private static JObject Touchups()

in src/Microsoft.Azure.WebJobs.Host/Extensions/JobHostMetadataProvider.cs [161:220]


        private static JObject Touchups(Type attributeType, JObject metadata)
        {
            metadata = (JObject)metadata.DeepClone(); // avoid mutating the inpout 

            JToken token;
            if (attributeType.Name == "BlobAttribute" ||
                attributeType.Name == "BlobTriggerAttribute")
            {
                // Path --> BlobPath
                if (metadata.TryGetValue("path", StringComparison.OrdinalIgnoreCase, out token))
                {
                    metadata["BlobPath"] = token;
                }
            }

            if (string.Equals(attributeType.Name, "ServiceBusAttribute", StringComparison.OrdinalIgnoreCase))
            {
                // queueName --> queueOrTopicName, topicName --> queueOrTopicName
                if (metadata.TryGetValue("queueName", StringComparison.OrdinalIgnoreCase, out token))
                {
                    metadata["queueOrTopicName"] = token;
                    metadata["entityType"] = "Queue";
                }
                else if (metadata.TryGetValue("topicName", StringComparison.OrdinalIgnoreCase, out token))
                {
                    metadata["queueOrTopicName"] = token;
                    metadata["entityType"] = "Topic";
                }
            }

            // Other "look like a stream" attributes may expose an Access property for stream direction. 
            var prop = attributeType.GetProperty("Access", BindingFlags.Instance | BindingFlags.Public);
            if (prop != null)
            {
                if (prop.PropertyType == typeof(FileAccess?))
                {
                    if (metadata.TryGetValue("direction", StringComparison.OrdinalIgnoreCase, out token))
                    {
                        FileAccess access;
                        switch (token.ToString().ToLowerInvariant())
                        {
                            case "in":
                                access = FileAccess.Read;
                                break;
                            case "out":
                                access = FileAccess.Write;
                                break;
                            case "inout":
                                access = FileAccess.ReadWrite;
                                break;
                            default:
                                throw new InvalidOperationException($"Illegal direction value: '{token}'");
                        }
                        metadata["access"] = access.ToString();
                    }
                }
            }

            return metadata;
        }