-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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
[Cosmos] Add option for disabling auto id generation in create_item #15715
Changes from 11 commits
cf925cb
937171f
56f9b58
4028dd0
fa3a9fe
262e672
c6ca91c
c12d19d
0c99eaa
1070de4
d8c763f
9e8a247
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -485,6 +485,7 @@ def create_item( | |
:param pre_trigger_include: trigger id to be used as pre operation trigger. | ||
:param post_trigger_include: trigger id to be used as post operation trigger. | ||
:param indexing_directive: Indicate whether the document should be omitted from indexing. | ||
:keyword bool enable_automatic_id_generation: Enable automatic id generation if no id present. | ||
:keyword str session_token: Token for use with Session consistency. | ||
:keyword dict[str,str] initial_headers: Initial headers to be sent as part of the request. | ||
:keyword str etag: An ETag value, or the wildcard character (*). Used to check if the resource | ||
|
@@ -498,7 +499,7 @@ def create_item( | |
request_options = build_options(kwargs) | ||
response_hook = kwargs.pop('response_hook', None) | ||
|
||
request_options["disableAutomaticIdGeneration"] = True | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As I mentioned above - we probably need to keep this here to ensure consistent behaviour for existing customers, allowing the parameter overwrite: request_options["disableAutomaticIdGeneration"] = kwargs.pop('disable_auto_id_gen', True) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. that makes sense - I was thinking this wouldn't affect users since it requires them to use an ID already, but I can see people relying on getting an error when they do not pass an ID There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks @zfoster - just to clarify, when you say "requires them to use an ID already", whereabouts is that? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
having this hardcoded means you have to supply an ID in the args when creating items There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if i'm reading it right There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Interesting - in that case what is the keyword argument people would need to have been supplying? And is that what our tests are doing? (sorry I should have dug deeper into this earlier) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we didn't have a kwarg for it afaict. honestly, I'm not sure why this is the way it is, it's unique to this sdk. Our tests do supply IDs and from this we can assume our users do too, however I can flesh out why I think your comment about ensuring consistent behavior is still important: We may have users who generate IDs or create them programmatically, and rely on the fact that we don't ever automatically generate them. The way this is set up now, we keep this consistent and never generate IDs unless they explicitly pass the kwarg in (same behavior as before) |
||
request_options["disableAutomaticIdGeneration"] = not kwargs.pop('enable_automatic_id_generation', False) | ||
if populate_query_metrics: | ||
request_options["populateQueryMetrics"] = populate_query_metrics | ||
if pre_trigger_include is not None: | ||
|
@@ -508,8 +509,10 @@ def create_item( | |
if indexing_directive is not None: | ||
request_options["indexingDirective"] = indexing_directive | ||
|
||
passthrough_args = {k: v for k, v in kwargs.items() if k != "enable_automatic_id_generation"} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This line shouldn't be necessary as There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ah I think I saw this error before I understood what the difference between the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fixed |
||
|
||
result = self.client_connection.CreateItem( | ||
database_or_container_link=self.container_link, document=body, options=request_options, **kwargs | ||
database_or_container_link=self.container_link, document=body, options=request_options, **passthrough_args | ||
) | ||
if response_hook: | ||
response_hook(self.client_connection.last_response_headers, result) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A print statement ;)
Additionally - why was this block moved down? Does the ordering change here affect the
options
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops, I thought that print statement was already there when I reordered them. Let me remove! The order changed because the ID is generated and added to the body in the statement above this one. This statement then adds the
partitionKey
to the options. In the case thatpartitionKey
is/id
, we won't have thepartitionKey
in the options unless the statements are in this orderThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed