Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
LucGenetier committed Nov 14, 2024
1 parent 60fa1ff commit 8fb57cf
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 41 deletions.
37 changes: 17 additions & 20 deletions src/libraries/Microsoft.PowerFx.Connectors/ConnectorFunction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -294,19 +294,16 @@ public ConnectorType ReturnParameterType
// Those properties are only used by HttpFunctionInvoker
internal ConnectorParameterInternals _internals = null;

private readonly ConnectorLogger _configurationLogger = null;

internal readonly SymbolTable OptionSets;
private readonly ConnectorLogger _configurationLogger = null;

internal ConnectorFunction(OpenApiOperation openApiOperation, bool isSupported, string notSupportedReason, string name, string operationPath, HttpMethod httpMethod, ConnectorSettings connectorSettings, List<ConnectorFunction> functionList,
ConnectorLogger configurationLogger, IReadOnlyDictionary<string, FormulaValue> globalValues, SymbolTable optionSets)
ConnectorLogger configurationLogger, IReadOnlyDictionary<string, FormulaValue> globalValues, SymbolTable optionSets /* to be removed */)
{
Operation = openApiOperation;
Name = name;
OperationPath = operationPath;
HttpMethod = httpMethod;
ConnectorSettings = connectorSettings;
OptionSets = optionSets;
ConnectorSettings = connectorSettings;
GlobalContext = new ConnectorGlobalContext(functionList ?? throw new ArgumentNullException(nameof(functionList)), globalValues);

_configurationLogger = configurationLogger;
Expand Down Expand Up @@ -991,7 +988,7 @@ private async Task<ConnectorType> GetConnectorSuggestionsFromDynamicSchemaAsync(
return null;
}

ConnectorType connectorType = GetConnectorType(cds.ValuePath, sv, null, new SymbolTable(), ConnectorSettings.Compatibility);
ConnectorType connectorType = GetConnectorType(cds.ValuePath, sv, ConnectorSettings.Compatibility);

if (connectorType.HasErrors)
{
Expand All @@ -1005,10 +1002,10 @@ private async Task<ConnectorType> GetConnectorSuggestionsFromDynamicSchemaAsync(
return connectorType;
}

internal static ConnectorType GetConnectorType(string valuePath, StringValue sv, string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility)
internal static ConnectorType GetConnectorType(string valuePath, StringValue sv, ConnectorCompatibility compatibility)
{
JsonElement je = ExtractFromJson(sv, valuePath);
return GetConnectorTypeInternal(tableName, optionSets, compatibility, je);
return GetConnectorTypeInternal(compatibility, je);
}

// Only called by ConnectorTable.GetSchema
Expand Down Expand Up @@ -1084,17 +1081,17 @@ internal class SalesForceReferencedEntity
public bool RestrictedDelete { get; set; }
}

private static ConnectorType GetConnectorTypeInternal(string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility, JsonElement je)
private static ConnectorType GetConnectorTypeInternal(ConnectorCompatibility compatibility, JsonElement je)
{
OpenApiReaderSettings oars = new OpenApiReaderSettings() { RuleSet = DefaultValidationRuleSet };
OpenApiSchema schema = new OpenApiStringReader(oars).ReadFragment<OpenApiSchema>(je.ToString(), OpenApi.OpenApiSpecVersion.OpenApi2_0, out OpenApiDiagnostic diag);

return new ConnectorType(SwaggerSchema.New(schema), tableName, optionSets, compatibility);
return new ConnectorType(SwaggerSchema.New(schema), compatibility);
}

private static ConnectorType GetJsonConnectorTypeInternal(string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility, JsonElement je, IList<SqlRelationship> sqlRelationships)
private static ConnectorType GetJsonConnectorTypeInternal(ConnectorCompatibility compatibility, JsonElement je, IList<SqlRelationship> sqlRelationships)
{
return new ConnectorType(je, tableName, optionSets, compatibility, sqlRelationships);
return new ConnectorType(je, compatibility, sqlRelationships);
}

private async Task<ConnectorType> GetConnectorSuggestionsFromDynamicPropertyAsync(NamedValue[] knownParameters, BaseRuntimeConnectorContext runtimeContext, ConnectorDynamicProperty cdp, CancellationToken cancellationToken)
Expand All @@ -1115,7 +1112,7 @@ private async Task<ConnectorType> GetConnectorSuggestionsFromDynamicPropertyAsyn
return null;
}

ConnectorType connectorType = GetConnectorType(cdp.ItemValuePath, sv, null, new SymbolTable(), ConnectorSettings.Compatibility);
ConnectorType connectorType = GetConnectorType(cdp.ItemValuePath, sv, ConnectorSettings.Compatibility);

if (connectorType.HasErrors)
{
Expand Down Expand Up @@ -1422,7 +1419,7 @@ private ConnectorParameterInternals Initialize()
return null;
}

ConnectorParameter connectorParameter = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(parameter, OptionSets, ConnectorSettings.Compatibility));
ConnectorParameter connectorParameter = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(parameter, ConnectorSettings.Compatibility));

if (connectorParameter.HiddenRecordType != null)
{
Expand Down Expand Up @@ -1491,12 +1488,12 @@ private ConnectorParameterInternals Initialize()
}

OpenApiParameter bodyParameter = new OpenApiParameter() { Name = bodyPropertyName, Schema = bodyPropertySchema, Description = requestBody.Description, Required = bodyPropertyRequired, Extensions = bodyPropertySchema.Extensions };
ConnectorParameter bodyConnectorParameter2 = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter, requestBody, OptionSets, ConnectorSettings.Compatibility));
ConnectorParameter bodyConnectorParameter2 = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter, requestBody, ConnectorSettings.Compatibility));
openApiBodyParameters.Add(bodyConnectorParameter2, OpenApiExtensions.TryGetOpenApiValue(bodyConnectorParameter2.Schema.Default, null, out FormulaValue defaultValue, errorsAndWarnings) ? defaultValue : null);

if (bodyConnectorParameter2.HiddenRecordType != null)
{
hiddenRequiredParameters.Add(errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter, true, OptionSets, ConnectorSettings.Compatibility)));
hiddenRequiredParameters.Add(errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter, true, ConnectorSettings.Compatibility)));
}

List<ConnectorParameter> parameterList = !bodyPropertyRequired ? optionalParameters : bodyPropertyHiddenRequired ? hiddenRequiredParameters : requiredParameters;
Expand All @@ -1515,7 +1512,7 @@ private ConnectorParameterInternals Initialize()
}

OpenApiParameter bodyParameter2 = new OpenApiParameter() { Name = bodyName, Schema = bodySchema, Description = requestBody.Description, Required = requestBody.Required, Extensions = bodySchema.Extensions };
ConnectorParameter bodyConnectorParameter3 = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter2, requestBody, OptionSets, ConnectorSettings.Compatibility));
ConnectorParameter bodyConnectorParameter3 = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter2, requestBody, ConnectorSettings.Compatibility));
openApiBodyParameters.Add(bodyConnectorParameter3, OpenApiExtensions.TryGetOpenApiValue(bodyConnectorParameter3.Schema.Default, null, out FormulaValue defaultValue, errorsAndWarnings) ? defaultValue : null);

if (bodyConnectorParameter3.HiddenRecordType != null)
Expand All @@ -1535,7 +1532,7 @@ private ConnectorParameterInternals Initialize()
OpenApiSchema bodyParameterSchema = new OpenApiSchema() { Type = "string" };

OpenApiParameter bodyParameter3 = new OpenApiParameter() { Name = bodyName, Schema = bodyParameterSchema, Description = "Body", Required = requestBody.Required };
ConnectorParameter bodyParameter = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter3, requestBody, OptionSets, ConnectorSettings.Compatibility));
ConnectorParameter bodyParameter = errorsAndWarnings.AggregateErrorsAndWarnings(new ConnectorParameter(bodyParameter3, requestBody, ConnectorSettings.Compatibility));
openApiBodyParameters.Add(bodyParameter, OpenApiExtensions.TryGetOpenApiValue(bodyParameter.Schema.Default, null, out FormulaValue defaultValue, errorsAndWarnings) ? defaultValue : null);

List<ConnectorParameter> parameterList = requestBody.Required ? requiredParameters : optionalParameters;
Expand Down Expand Up @@ -1578,7 +1575,7 @@ private ConnectorParameterInternals Initialize()
_arityMax = _arityMin + (_optionalParameters.Length == 0 ? 0 : 1);
_warnings = new List<ErrorResourceKey>();

_returnType = errorsAndWarnings.AggregateErrorsAndWarnings(Operation.GetConnectorReturnType(null, OptionSets, ConnectorSettings.Compatibility));
_returnType = errorsAndWarnings.AggregateErrorsAndWarnings(Operation.GetConnectorReturnType(ConnectorSettings.Compatibility));

if (IsDeprecated)
{
Expand Down
18 changes: 11 additions & 7 deletions src/libraries/Microsoft.PowerFx.Connectors/OpenApiExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,11 @@ internal string GetOptionSetName(string optionSetNameBase)
}
}

internal static ConnectorType GetConnectorType(this ISwaggerParameter openApiParameter, ConnectorCompatibility compatibility, IList<SqlRelationship> sqlRelationships = null)
{
return openApiParameter.GetConnectorType(tableName: null, optionSets: null, compatibility, sqlRelationships);
}

internal static ConnectorType GetConnectorType(this ISwaggerParameter openApiParameter, string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility, IList<SqlRelationship> sqlRelationships = null)
{
ConnectorTypeGetterSettings settings = new ConnectorTypeGetterSettings(compatibility, tableName, optionSets, sqlRelationships);
Expand Down Expand Up @@ -813,9 +818,8 @@ public static HttpMethod ToHttpMethod(this OperationType key)
}

public static FormulaType GetReturnType(this OpenApiOperation openApiOperation, ConnectorCompatibility compatibility)
{
SymbolTable optionSets = new SymbolTable();
ConnectorType connectorType = openApiOperation.GetConnectorReturnType(null, optionSets, compatibility);
{
ConnectorType connectorType = openApiOperation.GetConnectorReturnType(compatibility);
FormulaType ft = connectorType.HasErrors ? ConnectorType.DefaultType : connectorType?.FormulaType ?? new BlankType();
return ft;
}
Expand All @@ -825,7 +829,7 @@ public static bool GetRequiresUserConfirmation(this OpenApiOperation op)
return op.Extensions.TryGetValue(XMsRequireUserConfirmation, out IOpenApiExtension openExt) && openExt is OpenApiBoolean b && b.Value;
}

internal static ConnectorType GetConnectorReturnType(this OpenApiOperation openApiOperation, string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility)
internal static ConnectorType GetConnectorReturnType(this OpenApiOperation openApiOperation, ConnectorCompatibility compatibility)
{
OpenApiResponses responses = openApiOperation.Responses;
OpenApiResponse response = responses.Where(kvp => kvp.Key?.Length == 3 && kvp.Key.StartsWith("2", StringComparison.Ordinal)).OrderBy(kvp => kvp.Key).FirstOrDefault().Value;
Expand All @@ -849,7 +853,7 @@ internal static ConnectorType GetConnectorReturnType(this OpenApiOperation openA
if (response.Content.Count == 0)
{
OpenApiSchema schema = new OpenApiSchema() { Type = "string", Format = "no_format" };
return new SwaggerParameter("response", true, new SwaggerSchema("string", "no_format"), response.Extensions).GetConnectorType(tableName, optionSets, compatibility);
return new SwaggerParameter("response", true, new SwaggerSchema("string", "no_format"), response.Extensions).GetConnectorType(compatibility);
}

// Responses is a list by content-type. Find "application/json"
Expand All @@ -868,10 +872,10 @@ internal static ConnectorType GetConnectorReturnType(this OpenApiOperation openA
if (openApiMediaType.Schema == null)
{
// Treat as void.
return new SwaggerParameter("response", true, new SwaggerSchema("string", "no_format"), response.Extensions).GetConnectorType(tableName, optionSets, compatibility);
return new SwaggerParameter("response", true, new SwaggerSchema("string", "no_format"), response.Extensions).GetConnectorType(compatibility);
}

return new SwaggerParameter("response", true, SwaggerSchema.New(openApiMediaType.Schema), openApiMediaType.Schema.Extensions).GetConnectorType(tableName, optionSets, compatibility);
return new SwaggerParameter("response", true, SwaggerSchema.New(openApiMediaType.Schema), openApiMediaType.Schema.Extensions).GetConnectorType(compatibility);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,24 @@ public class ConnectorParameter : ConnectorSchema

internal bool IsBodyParameter = false;

internal ConnectorParameter(OpenApiParameter openApiParameter, SymbolTable optionSets, ConnectorCompatibility compatibility)
: this(openApiParameter, null, false, optionSets, compatibility)
internal ConnectorParameter(OpenApiParameter openApiParameter, ConnectorCompatibility compatibility)
: this(openApiParameter, null, false, compatibility)
{
}

internal ConnectorParameter(OpenApiParameter openApiParameter, bool useHiddenTypes, SymbolTable optionSets, ConnectorCompatibility compatibility)
: this(openApiParameter, null, useHiddenTypes, optionSets, compatibility)
internal ConnectorParameter(OpenApiParameter openApiParameter, bool useHiddenTypes, ConnectorCompatibility compatibility)
: this(openApiParameter, null, useHiddenTypes, compatibility)
{
}

internal ConnectorParameter(OpenApiParameter openApiParameter, IOpenApiExtensible bodyExtensions, SymbolTable optionSets, ConnectorCompatibility compatibility)
: this(openApiParameter, bodyExtensions, false, optionSets, compatibility)
internal ConnectorParameter(OpenApiParameter openApiParameter, IOpenApiExtensible bodyExtensions, ConnectorCompatibility compatibility)
: this(openApiParameter, bodyExtensions, false, compatibility)
{
IsBodyParameter = true;
}

internal ConnectorParameter(OpenApiParameter openApiParameter, IOpenApiExtensible bodyExtensions, bool useHiddenTypes, SymbolTable optionSets, ConnectorCompatibility compatibility)
: base(SwaggerParameter.New(openApiParameter), SwaggerExtensions.New(bodyExtensions), useHiddenTypes, optionSets, compatibility)
internal ConnectorParameter(OpenApiParameter openApiParameter, IOpenApiExtensible bodyExtensions, bool useHiddenTypes, ConnectorCompatibility compatibility)
: base(SwaggerParameter.New(openApiParameter), SwaggerExtensions.New(bodyExtensions), useHiddenTypes, compatibility)
{
Name = openApiParameter.Name;
Description = openApiParameter.Description;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ public class ConnectorSchema : SupportsConnectorErrors

public bool? NotificationUrl => ConnectorType.NotificationUrl;

internal ConnectorSchema(ISwaggerParameter openApiParameter, ISwaggerExtensions bodyExtensions, bool useHiddenTypes, SymbolTable optionSets, ConnectorCompatibility compatibility)
internal ConnectorSchema(ISwaggerParameter openApiParameter, ISwaggerExtensions bodyExtensions, bool useHiddenTypes, ConnectorCompatibility compatibility)
{
Schema = openApiParameter.Schema;
UseHiddenTypes = useHiddenTypes;
ConnectorType = AggregateErrorsAndWarnings(openApiParameter.GetConnectorType(null, optionSets, compatibility));
ConnectorType = AggregateErrorsAndWarnings(openApiParameter.GetConnectorType(compatibility));
DefaultValue = openApiParameter.Schema.TryGetDefaultValue(FormulaType, out FormulaValue defaultValue, this) && defaultValue is not BlankValue ? defaultValue : null;
ConnectorExtensions = new ConnectorExtensions(openApiParameter, bodyExtensions);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,16 +197,17 @@ internal ConnectorType(string error, ErrorResourceKey warning = default)
FormulaType = DefaultType;
}

internal ConnectorType(ISwaggerSchema schema, string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility)
: this(schema, null, new SwaggerParameter(null, true, schema, null).GetConnectorType(tableName, optionSets, compatibility))
internal ConnectorType(ISwaggerSchema schema, ConnectorCompatibility compatibility)
: this(schema, null, new SwaggerParameter(null, true, schema, null).GetConnectorType(compatibility))
{
}

internal ConnectorType(JsonElement schema, string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility, IList<SqlRelationship> sqlRelationships)
: this(SwaggerJsonSchema.New(schema), null, new SwaggerParameter(null, true, SwaggerJsonSchema.New(schema), null).GetConnectorType(tableName, optionSets, compatibility, sqlRelationships))
internal ConnectorType(JsonElement schema, ConnectorCompatibility compatibility, IList<SqlRelationship> sqlRelationships)
: this(SwaggerJsonSchema.New(schema), null, new SwaggerParameter(null, true, SwaggerJsonSchema.New(schema), null).GetConnectorType(compatibility, sqlRelationships))
{
}

// Called by ConnectorFunction.GetCdpTableType
internal ConnectorType(JsonElement schema, string tableName, SymbolTable optionSets, ConnectorCompatibility compatibility, IList<SqlRelationship> sqlRelationships, IList<ReferencedEntity> referencedEntities, string datasetName, string name, string connectorName, ICdpTableResolver resolver, ServiceCapabilities serviceCapabilities, bool isTableReadOnly)
: this(SwaggerJsonSchema.New(schema), null, new SwaggerParameter(null, true, SwaggerJsonSchema.New(schema), null).GetConnectorType(tableName, optionSets, compatibility, sqlRelationships))
{
Expand Down

0 comments on commit 8fb57cf

Please sign in to comment.