Skip to content

Commit

Permalink
Merge branch 'main' into lesaltzm/featuresallocation
Browse files Browse the repository at this point in the history
  • Loading branch information
lesaltzm authored Nov 14, 2024
2 parents 94aec9a + 9a9f71e commit 0b536d6
Show file tree
Hide file tree
Showing 15 changed files with 367 additions and 145 deletions.
40 changes: 23 additions & 17 deletions src/libraries/Microsoft.PowerFx.Connectors/ConnectorFunction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
using Microsoft.PowerFx.Intellisense;
using Microsoft.PowerFx.Types;
using static Microsoft.PowerFx.Connectors.ConnectorHelperFunctions;

#pragma warning disable SA1117

namespace Microsoft.PowerFx.Connectors
{
Expand Down Expand Up @@ -292,15 +294,16 @@ public ConnectorType ReturnParameterType
// Those properties are only used by HttpFunctionInvoker
internal ConnectorParameterInternals _internals = null;

private readonly ConnectorLogger _configurationLogger = null;
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)
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)
{
Operation = openApiOperation;
Name = name;
OperationPath = operationPath;
HttpMethod = httpMethod;
ConnectorSettings = connectorSettings;
ConnectorSettings = connectorSettings;
GlobalContext = new ConnectorGlobalContext(functionList ?? throw new ArgumentNullException(nameof(functionList)), globalValues);

_configurationLogger = configurationLogger;
Expand Down Expand Up @@ -1007,21 +1010,24 @@ internal static ConnectorType GetConnectorType(string valuePath, StringValue sv,

// Only called by ConnectorTable.GetSchema
// Returns a FormulaType with AssociatedDataSources set (done in AddTabularDataSource)
internal static ConnectorType GetCdpTableType(ICdpTableResolver tableResolver, string connectorName, string valuePath, StringValue stringValue, List<SqlRelationship> sqlRelationships, ConnectorCompatibility compatibility, string datasetName, out string name, out string displayName, out TableDelegationInfo delegationInfo)
internal static ConnectorType GetCdpTableType(ICdpTableResolver tableResolver, string connectorName, string tableName, string valuePath, StringValue stringValue, List<SqlRelationship> sqlRelationships, ConnectorCompatibility compatibility, string datasetName,
out string name, out string displayName, out TableDelegationInfo delegationInfo, out IEnumerable<OptionSet> optionSets)
{
// There are some errors when parsing this Json payload but that's not a problem here as we only need x-ms-capabilities parsing to work
OpenApiReaderSettings oars = new OpenApiReaderSettings() { RuleSet = DefaultValidationRuleSet };
ISwaggerSchema tableSchema = SwaggerSchema.New(new OpenApiStringReader(oars).ReadFragment<OpenApiSchema>(stringValue.Value, OpenApi.OpenApiSpecVersion.OpenApi2_0, out OpenApiDiagnostic _));

ServiceCapabilities serviceCapabilities = tableSchema.GetTableCapabilities();
ConnectorPermission tablePermission = tableSchema.GetPermission();
ConnectorPermission tablePermission = tableSchema.GetPermission();

JsonElement jsonElement = ExtractFromJson(stringValue, valuePath, out name, out displayName);
bool isTableReadOnly = tablePermission == ConnectorPermission.PermissionReadOnly;
IList<ReferencedEntity> referencedEntities = GetReferenceEntities(connectorName, stringValue);

ConnectorType connectorType = new ConnectorType(jsonElement, compatibility, sqlRelationships, referencedEntities, datasetName, name, connectorName, tableResolver, serviceCapabilities, isTableReadOnly);

SymbolTable symbolTable = new SymbolTable();
ConnectorType connectorType = new ConnectorType(jsonElement, tableName, symbolTable, compatibility, sqlRelationships, referencedEntities, datasetName, name, connectorName, tableResolver, serviceCapabilities, isTableReadOnly);
delegationInfo = ((DataSourceInfo)connectorType.FormulaType._type.AssociatedDataSources.First()).DelegationInfo;
optionSets = symbolTable.OptionSets.Select(kvp => kvp.Value);

return connectorType;
}
Expand Down Expand Up @@ -1400,7 +1406,7 @@ private ConnectorParameterInternals Initialize()
{
// Ex: Api-Version
hiddenRequired = true;
}
}
}
else if (ConnectorSettings.Compatibility.ExcludeInternals())
{
Expand All @@ -1413,8 +1419,8 @@ private ConnectorParameterInternals Initialize()
return null;
}

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

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

if (connectorParameter.HiddenRecordType != null)
{
errorsAndWarnings.AddError("[Internal error] Unexpected HiddenRecordType non-null value");
Expand Down Expand Up @@ -1482,11 +1488,11 @@ 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, 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, ConnectorSettings.Compatibility)));
}

Expand All @@ -1506,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, 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 @@ -1526,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, 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 @@ -1569,8 +1575,8 @@ private ConnectorParameterInternals Initialize()
_arityMax = _arityMin + (_optionalParameters.Length == 0 ? 0 : 1);
_warnings = new List<ErrorResourceKey>();

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

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

if (IsDeprecated)
{
_warnings.Add(ConnectorStringResources.WarnDeprecatedFunction);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,10 @@ private async Task WritePropertyAsync(string propertyName, ISwaggerSchema proper
{
await WriteBlobValueAsync(bv).ConfigureAwait(false);
}
else if (fv is OptionSetValue optionSetValue)
{
WriteStringValue(optionSetValue.Option);
}
else
{
throw new PowerFxConnectorException($"Expected StringValue and got {fv?.GetType()?.Name ?? "<null>"} value, for property {propertyName}");
Expand Down
Loading

0 comments on commit 0b536d6

Please sign in to comment.