Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update the example and fix two bugs in worker #34

Merged
merged 3 commits into from
Sep 7, 2018
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 13 additions & 18 deletions examples/PSCoreApp/MyHttpTrigger/run.ps1
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
# Invoked with Invoke-RestMethod:
# irm http://localhost:7071/api/MyHttpTrigger?Name=Tyler
# Input bindings are added via param block

param($req, $TriggerMetadata)

# If no name was passed by query parameter
$name = 'World'
Write-Verbose "PowerShell HTTP trigger function processed a request." -Verbose

# You can interact with query parameters, the body of the request, etc.
if($req.Query.Name) {
if($req.Query.Name -or $req.Body.Name) {
$name = $req.Query.Name
}

# you can write to the same streams as you would in a normal PowerShell script
Write-Verbose "Verbose $name" -Verbose
Write-Warning "Warning $name"
if (-not $name) { $name = $req.Body.Name }

# items in the pipeline get logged
$name
$status = 200
$body = "Hello " + $name
}
else {
$status = 400
$body = "Please pass a name on the query string or in the request body."
}

# You set the value of your output bindings by assignment `$nameOfOutputBinding = 'foo'`
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should keep in some comments for the more "Azure Functions-y" concepts like Push-OutputBinding, the param block relation to the input bindings, etc.

It will help our customers with getting started without having to dig through too many docs.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That makes sense. Will add the comments back.

Body = @{ Hello = $name }
ContentType = 'application/json'
StatusCode = $status
Body = $body
})

10 changes: 6 additions & 4 deletions src/PowerShell/PowerShellManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,14 @@ internal Hashtable InvokeFunction(
{
// Log everything we received from the pipeline and set the last one to be the ReturnObject
Collection<PSObject> pipelineItems = _pwsh.InvokeAndClearCommands<PSObject>();
foreach (var psobject in pipelineItems)
if (pipelineItems.Count > 0)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is needed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's for the returnObject = pipelineItems[pipelineItems.Count - 1]; statement below. When nothing is written to the output, this will crash the worker. Since we need to check for count anyway, better to put it before the iteration.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch!

{
_logger.Log(LogLevel.Information, $"OUTPUT: {psobject.ToString()}");
foreach (var psobject in pipelineItems)
{
_logger.Log(LogLevel.Information, $"OUTPUT: {psobject.ToString()}");
}
returnObject = pipelineItems[pipelineItems.Count - 1];
}

returnObject = pipelineItems[pipelineItems.Count - 1];
}

var result = _pwsh.AddCommand("Azure.Functions.PowerShell.Worker.Module\\Get-OutputBinding")
Expand Down
3 changes: 2 additions & 1 deletion src/Utility/TypeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ public static object ToObject (this TypedData data)
switch (data.DataCase)
{
case TypedData.DataOneofCase.Json:
return JsonConvert.DeserializeObject<Hashtable>(data.Json);
var hashtable = JsonConvert.DeserializeObject<Hashtable>(data.Json);
return new Hashtable(hashtable, StringComparer.OrdinalIgnoreCase);
case TypedData.DataOneofCase.Bytes:
return data.Bytes.ToByteArray();
case TypedData.DataOneofCase.Double:
Expand Down