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

Add support for search identifier #909

Merged
merged 10 commits into from
Sep 1, 2024

Conversation

talsabagport
Copy link
Contributor

@talsabagport talsabagport commented Aug 15, 2024

Description

What - Add support for search identifier
Why - New feature to allow updating an entity without knowing its identifier
How - Call upsert entity API with query, and allow it in mapping

Type of change

Please leave one option from the following and delete the rest:

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • New Integration (non-breaking change which adds a new integration)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Non-breaking change (fix of existing functionality that will not change current behavior)
  • Documentation (added/updated documentation)

All tests should be run against the port production environment(using a testing org).

Core testing checklist

  • Integration able to create all default resources from scratch
  • Resync finishes successfully
  • Resync able to create entities
  • Resync able to update entities
  • Resync able to detect and delete entities
  • Scheduled resync able to abort existing resync and start a new one
  • Tested with at least 2 integrations from scratch
  • Tested with Kafka and Polling event listeners

Integration testing checklist

  • Integration able to create all default resources from scratch
  • Resync able to create entities
  • Resync able to update entities
  • Resync able to detect and delete entities
  • Resync finishes successfully
  • If new resource kind is added or updated in the integration, add example raw data, mapping and expected result to the examples folder in the integration directory.
  • If resource kind is updated, run the integration with the example data and check if the expected result is achieved
  • If new resource kind is added or updated, validate that live-events for that resource are working as expected
  • Docs PR link here

Preflight checklist

  • Handled rate limiting
  • Handled pagination
  • Implemented the code in async
  • Support Multi account

Screenshots

Include screenshots from your environment showing how the resources of the integration will look.

API Documentation

Provide links to the API documentation used for this integration.

@@ -58,7 +58,7 @@ async def upsert_entity(
)
handle_status_code(response, should_raise)
result = response.json()
result_entity = Entity.parse_obj(result)
result_entity = Entity.parse_obj(result.get("entity", {}))
Copy link
Contributor

Choose a reason for hiding this comment

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

is it a bug fix? as until now we didn't passed the "entity" key?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Correct

Comment on lines 157 to 158
if not isinstance(resource.port.entity.mappings.identifier, str):
logger.info("Skip unregistering due to non string identifier mapping")
Copy link
Contributor

Choose a reason for hiding this comment

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

missing additional context for who this will be skipped ( which resource kind ).
and what would be the effect?

@talsabagport talsabagport requested a review from a team as a code owner August 26, 2024 11:16
Copy link
Contributor

@Tankilevitch Tankilevitch left a comment

Choose a reason for hiding this comment

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

LGTM

@github-actions github-actions bot added size/M and removed size/S labels Aug 27, 2024
# Set the results of the search relation and identifier to the entity
entity.identifier = result_entity.identifier or entity.identifier
if isinstance(entity.identifier, dict):
Copy link
Contributor

Choose a reason for hiding this comment

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

lets have a method inside of the entity class for knowing if its of type search identifier

@@ -19,6 +19,10 @@ class Entity(BaseModel):
properties: dict[str, Any] = {}
relations: dict[str, Any] = {}

@property
def is_search_identifier(self) -> bool:
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
def is_search_identifier(self) -> bool:
def is_using_search_identifier(self) -> bool:

relations: dict[str, str | IngestSearchQuery] = Field(default_factory=dict)

@property
def is_search_identifier(self) -> bool:
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
def is_search_identifier(self) -> bool:
def is_using_search_identifier(self) -> bool:

Copy link
Contributor

@omby8888 omby8888 left a comment

Choose a reason for hiding this comment

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

Very Nice!

Copy link
Collaborator

@danielsinai danielsinai left a comment

Choose a reason for hiding this comment

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

🦢

@talsabagport talsabagport merged commit fac709f into main Sep 1, 2024
12 checks passed
@talsabagport talsabagport deleted the PORT-9402-port-api-search-identifier branch September 1, 2024 08:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants