diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 94c66e1..623ebe8 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1 +1,2 @@
-* @CluedIn-io/Back-End
\ No newline at end of file
+* @CluedIn-io/connector-approvers
+
diff --git a/docs/4.0.1-release-notes.md b/docs/4.0.1-release-notes.md
new file mode 100644
index 0000000..4a22faf
--- /dev/null
+++ b/docs/4.0.1-release-notes.md
@@ -0,0 +1,6 @@
+# Features
+- Set Accepted Entity Type to mandatory
+
+# Fix
+- Fixed Accept not responding correctly to configured entity type
+- No longer adding codes to entity
\ No newline at end of file
diff --git a/src/ExternalSearch.Providers.PermId/Constants.cs b/src/ExternalSearch.Providers.PermId/Constants.cs
index bb78072..369152e 100644
--- a/src/ExternalSearch.Providers.PermId/Constants.cs
+++ b/src/ExternalSearch.Providers.PermId/Constants.cs
@@ -38,7 +38,7 @@ public struct KeyName
{
displayName = "Accepted Entity Type",
type = "input",
- isRequired = false,
+ isRequired = true,
name = KeyName.AcceptedEntityType
},
new Control()
diff --git a/src/ExternalSearch.Providers.PermId/PermIdExternalSearchProvider.cs b/src/ExternalSearch.Providers.PermId/PermIdExternalSearchProvider.cs
index aa2f89d..9811b51 100644
--- a/src/ExternalSearch.Providers.PermId/PermIdExternalSearchProvider.cs
+++ b/src/ExternalSearch.Providers.PermId/PermIdExternalSearchProvider.cs
@@ -27,7 +27,6 @@
using CluedIn.ExternalSearch.Providers.PermId.Vocabularies;
using EntityType = CluedIn.Core.Data.EntityType;
using CluedIn.Core.Data.Vocabularies;
-using AngleSharp.Io;
namespace CluedIn.ExternalSearch.Providers.PermId
{
@@ -35,65 +34,56 @@ namespace CluedIn.ExternalSearch.Providers.PermId
///
public class PermIdExternalSearchProvider : ExternalSearchProviderBase, IExtendedEnricherMetadata , IConfigurableExternalSearchProvider
{
+ /**********************************************************************************************************
+ * FIELDS
+ **********************************************************************************************************/
- private static readonly EntityType[] AcceptedEntityTypes = { EntityType.Organization };
+ private static readonly EntityType[] DefaultAcceptedEntityTypes = { EntityType.Organization };
/**********************************************************************************************************
* CONSTRUCTORS
**********************************************************************************************************/
public PermIdExternalSearchProvider()
- : base(Constants.ProviderId, AcceptedEntityTypes)
- {
- var nameBasedTokenProvider = new NameBasedTokenProvider("PermId");
-
- if (nameBasedTokenProvider.ApiToken != null)
- this.TokenProvider = new RoundRobinTokenProvider(nameBasedTokenProvider.ApiToken.Split(',', ';'));
- }
-
- private PermIdExternalSearchProvider(IList tokens)
- : this(true)
+ : base(Constants.ProviderId, DefaultAcceptedEntityTypes)
{
- this.TokenProvider = new RoundRobinTokenProvider(tokens);
- }
-
- private PermIdExternalSearchProvider([NotNull] IExternalSearchTokenProvider tokenProvider)
- : this(true)
- {
- this.TokenProvider = tokenProvider ?? throw new ArgumentNullException(nameof(tokenProvider));
- }
-
- private PermIdExternalSearchProvider(bool tokenProviderIsRequired)
- : this()
- {
- this.TokenProviderIsRequired = tokenProviderIsRequired;
}
/**********************************************************************************************************
* METHODS
**********************************************************************************************************/
- public override IEnumerable BuildQueries(ExecutionContext context, IExternalSearchRequest request)
+ public IEnumerable Accepts(IDictionary config, IProvider provider) => this.Accepts(config);
+
+ private IEnumerable Accepts(IDictionary config)
+ => Accepts(new PermIdExternalSearchJobData(config));
+
+ private IEnumerable Accepts(PermIdExternalSearchJobData config)
{
- foreach (var externalSearchQuery in InternalBuildQueries(context, request))
+ if (!string.IsNullOrWhiteSpace(config.AcceptedEntityType))
{
- yield return externalSearchQuery;
+ // If configured, only accept the configured entity types
+ return new EntityType[] { config.AcceptedEntityType };
}
+
+ // Fallback to default accepted entity types
+ return DefaultAcceptedEntityTypes;
}
- private IEnumerable InternalBuildQueries(ExecutionContext context, IExternalSearchRequest request, IDictionary config = null)
+
+ private bool Accepts(PermIdExternalSearchJobData config, EntityType entityTypeToEvaluate)
{
- if (config.TryGetValue(Constants.KeyName.AcceptedEntityType, out var customType) && !string.IsNullOrWhiteSpace(customType?.ToString()))
- {
- if (!request.EntityMetaData.EntityType.Is(customType.ToString()))
- {
- yield break;
- }
- }
- else if (!this.Accepts(request.EntityMetaData.EntityType))
- yield break;
+ var configurableAcceptedEntityTypes = this.Accepts(config).ToArray();
+
+ return configurableAcceptedEntityTypes.Any(entityTypeToEvaluate.Is);
+ }
- //if (string.IsNullOrEmpty(this.TokenProvider.ApiToken))
- // throw new InvalidOperationException("PermId ApiToken have not been configured");
+ public IEnumerable BuildQueries(ExecutionContext context, IExternalSearchRequest request, IDictionary config, IProvider provider)
+ => InternalBuildQueries(context, request, new PermIdExternalSearchJobData(config));
+
+ private IEnumerable InternalBuildQueries(ExecutionContext context, IExternalSearchRequest request, PermIdExternalSearchJobData config)
+ {
+ if (!this.Accepts(config, request.EntityMetaData.EntityType))
+ yield break;
var existingResults = request.GetQueryResults(this).ToList();
@@ -103,7 +93,7 @@ private IEnumerable InternalBuildQueries(ExecutionContext
// Query Input
var entityType = request.EntityMetaData.EntityType;
- var organizationName = GetValue(request, config, Constants.KeyName.OrganizationName, Core.Data.Vocabularies.Vocabularies.CluedInOrganization.OrganizationName);
+ var organizationName = GetValue(request, config.ToDictionary(), Constants.KeyName.OrganizationName, Core.Data.Vocabularies.Vocabularies.CluedInOrganization.OrganizationName);
if (!string.IsNullOrEmpty(request.EntityMetaData.Name))
@@ -142,21 +132,13 @@ private static HashSet GetValue(IExternalSearchRequest request, IDiction
return value;
}
- ///
- public override IEnumerable ExecuteSearch(ExecutionContext context,
- IExternalSearchQuery query)
+ public IEnumerable ExecuteSearch(ExecutionContext context, IExternalSearchQuery query, IDictionary config, IProvider provider)
{
- var apiKey = this.TokenProvider.ApiToken;
-
- foreach (var externalSearchQueryResult in InternalExecuteSearch(query, apiKey))
- yield return externalSearchQueryResult;
- }
+ var jobData = new PermIdExternalSearchJobData(config);
- private static IEnumerable InternalExecuteSearch(IExternalSearchQuery query, string apiKey)
- {
var name = query.QueryParameters[ExternalSearchQueryParameter.Name].FirstOrDefault();
var idList = new List();
- var apiToken = apiKey;
+ var apiToken = jobData.ApiToken;
if (string.IsNullOrEmpty(apiToken))
throw new InvalidOperationException("PermId ApiToken has not been configured");
@@ -169,7 +151,7 @@ private static IEnumerable InternalExecuteSearch(IEx
if (!string.IsNullOrEmpty(name))
{
- var searchResult = RequestWrapper(searchClient, "search?q=" + name, apiKey);
+ var searchResult = RequestWrapper(searchClient, "search?q=" + name, apiToken);
foreach (var res in searchResult.Result.Organizations.Entities)
{
@@ -179,7 +161,7 @@ private static IEnumerable InternalExecuteSearch(IEx
foreach (var permId in idList)
{
- var socialResult = RequestWrapper(socialClient, permId, apiKey);
+ var socialResult = RequestWrapper(socialClient, permId, apiToken);
if (socialResult != null)
{
@@ -214,11 +196,9 @@ private static T RequestWrapper(IRestClient client, string parameter, string
return retval;
}
- ///
- public override IEnumerable BuildClues(ExecutionContext context, IExternalSearchQuery query, IExternalSearchQueryResult result, IExternalSearchRequest request)
+ public IEnumerable BuildClues(ExecutionContext context, IExternalSearchQuery query, IExternalSearchQueryResult result, IExternalSearchRequest request, IDictionary config, IProvider provider)
{
- var organizationCode = this.GetOriginEntityCode(result.As(), request);
- var organizationClue = new Clue(organizationCode, context.Organization);
+ var organizationClue = new Clue(request.EntityMetaData.OriginEntityCode, context.Organization);
organizationClue.Data.EntityData.Codes.Add(request.EntityMetaData.Codes.First());
this.PopulateMetadata(organizationClue.Data.EntityData, result.As(), request);
@@ -242,8 +222,7 @@ public override IEnumerable BuildClues(ExecutionContext context, IExternal
}
}
- ///
- public override IEntityMetadata GetPrimaryEntityMetadata(ExecutionContext context, IExternalSearchQueryResult result, IExternalSearchRequest request)
+ public IEntityMetadata GetPrimaryEntityMetadata(ExecutionContext context, IExternalSearchQueryResult result, IExternalSearchRequest request, IDictionary config, IProvider provider)
{
var resultItem = result.As();
@@ -253,15 +232,16 @@ public override IEntityMetadata GetPrimaryEntityMetadata(ExecutionContext contex
return this.CreateMetadata(resultItem, request);
}
- ///
public override IPreviewImage GetPrimaryEntityPreviewImage(ExecutionContext context, IExternalSearchQueryResult result, IExternalSearchRequest request)
{
return null;
}
- /// Creates the metadata.
- /// The result item.
- /// The metadata.
+ public IPreviewImage GetPrimaryEntityPreviewImage(ExecutionContext context, IExternalSearchQueryResult result, IExternalSearchRequest request, IDictionary config, IProvider provider)
+ {
+ return null;
+ }
+
private IEntityMetadata CreateMetadata(IExternalSearchQueryResult resultItem, IExternalSearchRequest request)
{
if (resultItem == null)
@@ -274,49 +254,18 @@ private IEntityMetadata CreateMetadata(IExternalSearchQueryResultGets the origin entity code.
- /// The result item.
- /// The origin entity code.
- private EntityCode GetOriginEntityCode(IExternalSearchQueryResult resultItem, IExternalSearchRequest request)
- {
- if (resultItem == null)
- throw new ArgumentNullException(nameof(resultItem));
-
- return new EntityCode(request.EntityMetaData.EntityType, GetCodeOrigin(), request.EntityMetaData.OriginEntityCode.Value);
- }
-
- /// Gets person entity code.
- /// The person.
- /// The person entity code.
- private EntityCode GetPersonEntityCode(AssociatedPerson person, IExternalSearchRequest request)
- {
- return new EntityCode(request.EntityMetaData.EntityType, GetCodeOrigin(), request.EntityMetaData.OriginEntityCode.Value);
- }
-
- /// Gets the code origin.
- /// The code origin
- private CodeOrigin GetCodeOrigin()
- {
- return CodeOrigin.CluedIn.CreateSpecific("permid");
- }
-
- /// Populates the metadata.
- /// The metadata.
- /// The result item.
private void PopulateMetadata(IEntityMetadata metadata, IExternalSearchQueryResult resultItem, IExternalSearchRequest request)
{
if (resultItem == null)
throw new ArgumentNullException(nameof(resultItem));
- var code = this.GetOriginEntityCode(resultItem, request);
var data = resultItem.Data;
metadata.EntityType = request.EntityMetaData.EntityType;
metadata.Name = request.EntityMetaData.Name;
metadata.CreatedDate = resultItem.CreatedDate;
- metadata.OriginEntityCode = code;
- metadata.Codes.Add(code);
+ metadata.OriginEntityCode = request.EntityMetaData.OriginEntityCode;
metadata.Properties[PermIdVocabularies.Organization.PermId] = data.PermId?.FirstOrDefault().PrintIfAvailable();
metadata.Properties[PermIdVocabularies.Organization.DomiciledIn] = data.DomiciledIn?.FirstOrDefault().PrintIfAvailable();
@@ -365,18 +314,12 @@ private void PopulateMetadata(IEntityMetadata metadata, IExternalSearchQueryResu
}
}
- /// Populate person metadata.
- /// The metadata.
- /// The person.
private void PopulatePersonMetadata(IEntityMetadata metadata, AssociatedPerson person, IExternalSearchRequest request)
{
- var code = this.GetPersonEntityCode(person, request);
-
metadata.EntityType = request.EntityMetaData.EntityType;
metadata.Name = request.EntityMetaData.Name;
- metadata.OriginEntityCode = code;
- metadata.Codes.Add(code);
+ metadata.OriginEntityCode = request.EntityMetaData.OriginEntityCode;
metadata.Properties[PermIdVocabularies.Person.PersonUrl] = person.PersonUrl?.FirstOrDefault().PrintIfAvailable();
metadata.Properties[PermIdVocabularies.Person.HonorificPrefix] = person.HonorificPrefix?.FirstOrDefault().PrintIfAvailable();
@@ -396,6 +339,17 @@ private void PopulatePersonMetadata(IEntityMetadata metadata, AssociatedPerson p
metadata.Uri = new Uri(string.Format("https://permid.org/1-{0}", person.PersonUrl.First()));
}
+ // Since this is a configurable external search provider, theses methods should never be called
+ public override bool Accepts(EntityType entityType) => throw new NotSupportedException();
+ public override IEnumerable BuildQueries(ExecutionContext context, IExternalSearchRequest request) => throw new NotSupportedException();
+ public override IEnumerable ExecuteSearch(ExecutionContext context, IExternalSearchQuery query) => throw new NotSupportedException();
+ public override IEnumerable BuildClues(ExecutionContext context, IExternalSearchQuery query, IExternalSearchQueryResult result, IExternalSearchRequest request) => throw new NotSupportedException();
+ public override IEntityMetadata GetPrimaryEntityMetadata(ExecutionContext context, IExternalSearchQueryResult result, IExternalSearchRequest request) => throw new NotSupportedException();
+
+ /**********************************************************************************************************
+ * PROPERTIES
+ **********************************************************************************************************/
+
public string Icon { get; } = Constants.Icon;
public string Domain { get; } = Constants.Domain;
public string About { get; } = Constants.About;
@@ -403,44 +357,5 @@ private void PopulatePersonMetadata(IEntityMetadata metadata, AssociatedPerson p
public IEnumerable Properties { get; } = Constants.Properties;
public Guide Guide { get; } = Constants.Guide;
public IntegrationType Type { get; } = Constants.IntegrationType;
-
- public IEnumerable Accepts(IDictionary config, IProvider provider)
- {
- return AcceptedEntityTypes;
- }
-
- public IEnumerable BuildQueries(ExecutionContext context, IExternalSearchRequest request, IDictionary config,
- IProvider provider)
- {
- return InternalBuildQueries(context, request, config);
- }
-
- public IEnumerable ExecuteSearch(ExecutionContext context, IExternalSearchQuery query, IDictionary config, IProvider provider)
- {
- var jobData = new PermIdExternalSearchJobData(config);
-
- foreach (var externalSearchQueryResult in InternalExecuteSearch(query, jobData.ApiToken))
- {
- yield return externalSearchQueryResult;
- }
- }
-
- public IEnumerable BuildClues(ExecutionContext context, IExternalSearchQuery query, IExternalSearchQueryResult result,
- IExternalSearchRequest request, IDictionary config, IProvider provider)
- {
- return BuildClues(context, query, result, request);
- }
-
- public IEntityMetadata GetPrimaryEntityMetadata(ExecutionContext context, IExternalSearchQueryResult result,
- IExternalSearchRequest request, IDictionary config, IProvider provider)
- {
- return GetPrimaryEntityMetadata(context, result, request);
- }
-
- public IPreviewImage GetPrimaryEntityPreviewImage(ExecutionContext context, IExternalSearchQueryResult result,
- IExternalSearchRequest request, IDictionary config, IProvider provider)
- {
- return GetPrimaryEntityPreviewImage(context, result, request);
- }
}
}