From db8b4af65261e137436b9662ee34e930583b5da4 Mon Sep 17 00:00:00 2001 From: simorenoh Date: Wed, 12 Jan 2022 16:25:11 -0500 Subject: [PATCH 1/5] removed six package and updated packaging/ documentation to reflect new standards --- .../templates/stages/cosmos-sdk-client.yml | 7 +- sdk/cosmos/azure-cosmos/CHANGELOG.md | 3 + sdk/cosmos/azure-cosmos/MANIFEST.in | 6 +- sdk/cosmos/azure-cosmos/README.md | 5 +- sdk/cosmos/azure-cosmos/azure/cosmos/_base.py | 6 +- .../azure/cosmos/_cosmos_client_connection.py | 100 ++++++------ .../_execution_context/document_producer.py | 6 +- .../_execution_context/endpoint_component.py | 7 +- .../query_execution_info.py | 3 +- .../azure/cosmos/_synchronized_request.py | 12 +- sdk/cosmos/azure-cosmos/azure/cosmos/auth.py | 20 +-- .../azure-cosmos/azure/cosmos/container.py | 5 +- .../azure/cosmos/cosmos_client.py | 5 +- .../azure-cosmos/azure/cosmos/database.py | 5 +- .../azure-cosmos/azure/cosmos/scripts.py | 4 +- sdk/cosmos/azure-cosmos/azure/cosmos/user.py | 3 +- sdk/cosmos/azure-cosmos/dev_requirements.txt | 3 +- sdk/cosmos/azure-cosmos/samples/README.md | 2 +- .../nonpartitioned_container_operations.py | 12 +- sdk/cosmos/azure-cosmos/samples/test.py | 143 ++++++++++++++++++ sdk/cosmos/azure-cosmos/setup.cfg | 2 - sdk/cosmos/azure-cosmos/setup.py | 37 +++-- sdk/cosmos/azure-cosmos/test/test_crud.py | 12 +- sdk/cosmos/azure-cosmos/test/test_globaldb.py | 3 +- .../azure-cosmos/test/test_location_cache.py | 7 +- .../azure-cosmos/test/test_partition_key.py | 11 +- sdk/cosmos/azure-cosmos/test/test_proxy.py | 11 +- 27 files changed, 264 insertions(+), 176 deletions(-) create mode 100644 sdk/cosmos/azure-cosmos/samples/test.py delete mode 100644 sdk/cosmos/azure-cosmos/setup.cfg diff --git a/eng/pipelines/templates/stages/cosmos-sdk-client.yml b/eng/pipelines/templates/stages/cosmos-sdk-client.yml index c32ac984c3f9..d4b40e057ea8 100644 --- a/eng/pipelines/templates/stages/cosmos-sdk-client.yml +++ b/eng/pipelines/templates/stages/cosmos-sdk-client.yml @@ -33,12 +33,9 @@ stages: - job: Emulator strategy: matrix: - Windows_Python35: + Windows_Python37: OSVmImage: 'windows-2019' - PythonVersion: '3.5' - Windows_Python27: - OSVmImage: 'windows-2019' - PythonVersion: '2.7' + PythonVersion: '3.7' pool: vmImage: $(OSVmImage) diff --git a/sdk/cosmos/azure-cosmos/CHANGELOG.md b/sdk/cosmos/azure-cosmos/CHANGELOG.md index faf3adaa50e3..c23eab47fee8 100644 --- a/sdk/cosmos/azure-cosmos/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos/CHANGELOG.md @@ -2,6 +2,9 @@ ### 4.3.0b2 (Unreleased) +This version and all future versions will require Python 3.6+. Python 2.7 is no longer supported. +We will also be removing support for Python 3.6 and will only support Python 3.7+ starting December 2022. + #### Features Added #### Breaking Changes diff --git a/sdk/cosmos/azure-cosmos/MANIFEST.in b/sdk/cosmos/azure-cosmos/MANIFEST.in index ad9c8861d73e..ec3c2270a6ad 100644 --- a/sdk/cosmos/azure-cosmos/MANIFEST.in +++ b/sdk/cosmos/azure-cosmos/MANIFEST.in @@ -1,8 +1,6 @@ -include README.md -include CHANGELOG.md +include *.md include LICENSE include azure/__init__.py -recursive-include samples *.py +recursive-include samples *.py *.md recursive-include test *.py -recursive-include doc *.rst include azure/cosmos/py.typed diff --git a/sdk/cosmos/azure-cosmos/README.md b/sdk/cosmos/azure-cosmos/README.md index ea7ef28e17bd..c0cba8d0cd54 100644 --- a/sdk/cosmos/azure-cosmos/README.md +++ b/sdk/cosmos/azure-cosmos/README.md @@ -1,3 +1,6 @@ +## _Disclaimer_ +_Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691_ + # Azure Cosmos DB SQL API client library for Python Azure Cosmos DB is a globally distributed, multi-model database service that supports document, key-value, wide-column, and graph databases. @@ -23,7 +26,7 @@ New releases of this SDK won't support Python 2.x starting January 1st, 2022. Pl * Azure subscription - [Create a free account][azure_sub] * Azure [Cosmos DB account][cosmos_account] - SQL API -* [Python 2.7 or 3.6+][python] +* [Python 3.6+][python] If you need a Cosmos DB SQL API account, you can create one with this [Azure CLI][azure_cli] command: diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_base.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_base.py index 0c06891a549c..9a42583513ed 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_base.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_base.py @@ -29,8 +29,7 @@ import binascii from typing import Dict, Any -import six -from six.moves.urllib.parse import quote as urllib_quote +from urllib.parse import quote as urllib_quote from azure.core import MatchConditions @@ -578,9 +577,6 @@ def IsValidBase64String(string_to_validate): if len(buffer) != 4: return False except Exception as e: # pylint: disable=broad-except - if six.PY2: - e = e.message # pylint: disable=no-member - # (e.message does exist on py2) if isinstance(e, binascii.Error): return False raise e diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py index fabe08cf9161..78d7623119fe 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py @@ -26,8 +26,8 @@ """ # https://github.com/PyCQA/pylint/issues/3112 # Currently pylint is locked to 2.3.3 and this is fixed in 2.4.4 -from typing import Dict, Any, Optional # pylint: disable=unused-import -import six +from typing import Dict, Any, Optional # pylint: disable=unused-import +import urllib.parse from urllib3.util.retry import Retry from azure.core.paging import ItemPaged # type: ignore from azure.core import PipelineClient # type: ignore @@ -59,6 +59,7 @@ from . import _utils from .partition_key import _Undefined, _Empty + # pylint: disable=protected-access @@ -87,12 +88,12 @@ class _QueryCompatibilityMode: _DefaultStringRangePrecision = -1 def __init__( - self, - url_connection, # type: str - auth, # type: Dict[str, Any] - connection_policy=None, # type: Optional[ConnectionPolicy] - consistency_level=documents.ConsistencyLevel.Session, # type: str - **kwargs # type: Any + self, + url_connection, # type: str + auth, # type: Dict[str, Any] + connection_policy=None, # type: Optional[ConnectionPolicy] + consistency_level=documents.ConsistencyLevel.Session, # type: str + **kwargs # type: Any ): # type: (...) -> None """ @@ -177,9 +178,9 @@ def __init__( proxies = kwargs.pop('proxies', {}) if self.connection_policy.ProxyConfiguration and self.connection_policy.ProxyConfiguration.Host: host = self.connection_policy.ProxyConfiguration.Host - url = six.moves.urllib.parse.urlparse(host) + url = urllib.parse.urlparse(host) proxy = host if url.port else host + ":" + str(self.connection_policy.ProxyConfiguration.Port) - proxies.update({url.scheme : proxy}) + proxies.update({url.scheme: proxy}) policies = [ HeadersPolicy(**kwargs), @@ -191,7 +192,7 @@ def __init__( NetworkTraceLoggingPolicy(**kwargs), DistributedTracingPolicy(**kwargs), HttpLoggingPolicy(**kwargs), - ] + ] transport = kwargs.pop("transport", None) self.pipeline_client = PipelineClient(base_url=url_connection, transport=transport, policies=policies) @@ -840,13 +841,13 @@ def ReadItems(self, collection_link, feed_options=None, response_hook=None, **kw return self.QueryItems(collection_link, None, feed_options, response_hook=response_hook, **kwargs) def QueryItems( - self, - database_or_container_link, - query, - options=None, - partition_key=None, - response_hook=None, - **kwargs + self, + database_or_container_link, + query, + options=None, + partition_key=None, + response_hook=None, + **kwargs ): """Queries documents in a collection. @@ -936,7 +937,8 @@ def QueryItemsChangeFeed(self, collection_link, options=None, response_hook=None ) def _QueryChangeFeed( - self, collection_link, resource_type, options=None, partition_key_range_id=None, response_hook=None, **kwargs + self, collection_link, resource_type, options=None, partition_key_range_id=None, response_hook=None, + **kwargs ): """Queries change feed of a resource in a collection. @@ -1129,10 +1131,10 @@ def UpsertItem(self, database_or_container_link, document, options=None, **kwarg return self.Upsert(document, path, "docs", collection_id, None, options, **kwargs) PartitionResolverErrorMessage = ( - "Couldn't find any partition resolvers for the database link provided. " - + "Ensure that the link you used when registering the partition resolvers " - + "matches the link provided or you need to register both types of database " - + "link(self link as well as ID based link)." + "Couldn't find any partition resolvers for the database link provided. " + + "Ensure that the link you used when registering the partition resolvers " + + "matches the link provided or you need to register both types of database " + + "link(self link as well as ID based link)." ) # Gets the collection id and path for the document @@ -2040,7 +2042,7 @@ def GetDatabaseAccount(self, url_connection=None, **kwargs): ] self._useMultipleWriteLocations = ( - self.connection_policy.UseMultipleWriteLocations and database_account._EnableMultipleWritableLocations + self.connection_policy.UseMultipleWriteLocations and database_account._EnableMultipleWritableLocations ) return database_account @@ -2107,7 +2109,8 @@ def Upsert(self, body, path, typ, id, initial_headers, options=None, **kwargs): self._UpdateSessionIfRequired(headers, result, self.last_response_headers) return result - def Replace(self, resource, path, typ, id, initial_headers, options=None, **kwargs): # pylint: disable=redefined-builtin + def Replace(self, resource, path, typ, id, initial_headers, options=None, + **kwargs): # pylint: disable=redefined-builtin """Replaces a Azure Cosmos resource and returns it. :param dict resource: @@ -2163,7 +2166,8 @@ def Read(self, path, typ, id, initial_headers, options=None, **kwargs): # pylin result, self.last_response_headers = self.__Get(path, request_params, headers, **kwargs) return result - def DeleteResource(self, path, typ, id, initial_headers, options=None, **kwargs): # pylint: disable=redefined-builtin + def DeleteResource(self, path, typ, id, initial_headers, options=None, + **kwargs): # pylint: disable=redefined-builtin """Deletes a Azure Cosmos resource and returns it. :param str path: @@ -2327,18 +2331,18 @@ def QueryFeed(self, path, collection_id, query, options, partition_key_range_id= ) def __QueryFeed( - self, - path, - typ, - id_, - result_fn, - create_fn, - query, - options=None, - partition_key_range_id=None, - response_hook=None, - is_query_plan=False, - **kwargs + self, + path, + typ, + id_, + result_fn, + create_fn, + query, + options=None, + partition_key_range_id=None, + response_hook=None, + is_query_plan=False, + **kwargs ): """Query for more than one Azure Cosmos resources. @@ -2381,7 +2385,7 @@ def __GetBodiesFromQueryResult(result): if query is None: # Query operations will use ReadEndpoint even though it uses GET(for feed requests) request_params = _request_object.RequestObject(typ, - documents._OperationType.QueryPlan if is_query_plan else documents._OperationType.ReadFeed) + documents._OperationType.QueryPlan if is_query_plan else documents._OperationType.ReadFeed) headers = base.GetHeaders(self, initial_headers, "get", path, id_, typ, options, partition_key_range_id) result, self.last_response_headers = self.__Get(path, request_params, headers, **kwargs) if response_hook: @@ -2395,8 +2399,8 @@ def __GetBodiesFromQueryResult(result): initial_headers[http_constants.HttpHeaders.IsQuery] = "true" if ( - self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Default - or self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Query + self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Default + or self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Query ): initial_headers[http_constants.HttpHeaders.ContentType] = runtime_constants.MediaTypes.QueryJson elif self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.SqlQuery: @@ -2428,7 +2432,7 @@ def _GetQueryPlanThroughGateway(self, query, resource_link, **kwargs): "isQueryPlanRequest": True, "supportedQueryFeatures": supported_query_features, "queryVersion": http_constants.Versions.QueryVersion - } + } resource_link = base.TrimBeginningAndEndingSlashes(resource_link) path = base.GetPathFromLink(resource_link, "docs") @@ -2459,18 +2463,18 @@ def __CheckAndUnifyQueryFormat(self, query_body): dict or string """ if ( - self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Default - or self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Query + self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Default + or self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.Query ): - if not isinstance(query_body, dict) and not isinstance(query_body, six.string_types): + if not isinstance(query_body, dict) and not isinstance(query_body, str): raise TypeError("query body must be a dict or string.") if isinstance(query_body, dict) and not query_body.get("query"): raise ValueError('query body must have valid query text with key "query".') - if isinstance(query_body, six.string_types): + if isinstance(query_body, str): return {"query": query_body} elif ( - self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.SqlQuery - and not isinstance(query_body, six.string_types) + self._query_compatibility_mode == CosmosClientConnection._QueryCompatibilityMode.SqlQuery + and not isinstance(query_body, str) ): raise TypeError("query body must be a string.") else: diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/document_producer.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/document_producer.py index 084ec81e2ca4..54aab209c41e 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/document_producer.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/document_producer.py @@ -26,8 +26,6 @@ import numbers from collections import deque -import six - from azure.cosmos import _base from azure.cosmos._execution_context.base_execution_context import _DefaultQueryExecutionContext @@ -154,7 +152,7 @@ def getTypeOrd(orderby_item): return 2 if isinstance(val, numbers.Number): return 4 - if isinstance(val, six.string_types): + if isinstance(val, str): return 5 raise TypeError("unknown type" + str(val)) @@ -176,7 +174,7 @@ def getTypeStr(orderby_item): return "Boolean" if isinstance(val, numbers.Number): return "Number" - if isinstance(val, six.string_types): + if isinstance(val, str): return "String" raise TypeError("unknown type" + str(val)) diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/endpoint_component.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/endpoint_component.py index 9a948f5f716d..cb68d947f655 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/endpoint_component.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/endpoint_component.py @@ -26,7 +26,6 @@ import copy import hashlib import json -import six from azure.cosmos._execution_context.aggregators import ( _AverageAggregator, @@ -127,8 +126,7 @@ def __next__(self): res = next(self._execution_context) json_repr = json.dumps(self.make_hash(res)) - if six.PY3: - json_repr = json_repr.encode("utf-8") + json_repr = json_repr.encode("utf-8") hash_object = hashlib.sha1(json_repr) # nosec hashed_result = hash_object.hexdigest() @@ -136,8 +134,7 @@ def __next__(self): while hashed_result in self.last_result: res = next(self._execution_context) json_repr = json.dumps(self.make_hash(res)) - if six.PY3: - json_repr = json_repr.encode("utf-8") + json_repr = json_repr.encode("utf-8") hash_object = hashlib.sha1(json_repr) # nosec hashed_result = hash_object.hexdigest() diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/query_execution_info.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/query_execution_info.py index 177cd315f286..748155d863d5 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/query_execution_info.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_execution_context/query_execution_info.py @@ -22,7 +22,6 @@ """Internal class for partitioned query execution info implementation in the Azure Cosmos database service. """ -import six from azure.cosmos.documents import _DistinctType @@ -121,7 +120,7 @@ def has_rewritten_query(self): def _extract(self, path): item = self._query_execution_info - if isinstance(path, six.string_types): + if isinstance(path, str): return item.get(path) for p in path: diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_synchronized_request.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_synchronized_request.py index 2362205aa603..6df67d96cdc1 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_synchronized_request.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_synchronized_request.py @@ -25,8 +25,7 @@ import json import time -from six.moves.urllib.parse import urlparse -import six +from urllib.parse import urlparse from azure.core.exceptions import DecodeError # type: ignore from . import exceptions @@ -56,14 +55,12 @@ def _request_body_from_data(data): str, unicode, file-like stream object, or None """ - if data is None or isinstance(data, six.string_types) or _is_readable_stream(data): + if data is None or isinstance(data, str) or _is_readable_stream(data): return data if isinstance(data, (dict, list, tuple)): json_dumped = json.dumps(data, separators=(",", ":")) - if six.PY2: - return json_dumped.decode("utf-8") return json_dumped return None @@ -144,8 +141,7 @@ def _Request(global_endpoint_manager, request_params, connection_policy, pipelin headers = dict(response.headers) data = response.body() - if data and not six.PY2: - # python 3 compatible: convert data from byte to unicode string + if data: data = data.decode("utf-8") if response.status_code == 404: @@ -201,7 +197,7 @@ def SynchronizedRequest( :rtype: tuple of (dict dict) """ request.data = _request_body_from_data(request_data) - if request.data and isinstance(request.data, six.string_types): + if request.data and isinstance(request.data, str): request.headers[http_constants.HttpHeaders.ContentLength] = len(request.data) elif request.data is None: request.headers[http_constants.HttpHeaders.ContentLength] = 0 diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/auth.py b/sdk/cosmos/azure-cosmos/azure/cosmos/auth.py index 98821ba17b37..9c8252bd9869 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/auth.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/auth.py @@ -25,8 +25,7 @@ import base64 from hashlib import sha256 import hmac - -import six +import urllib.parse from . import http_constants @@ -89,15 +88,9 @@ def __GetAuthorizationTokenUsingMasterKey(verb, resource_id_or_fullname, resourc http_date=headers.get(http_constants.HttpHeaders.HttpDate, "").lower(), ) - if six.PY2: - body = text.decode("utf-8") - digest = hmac.new(key, body, sha256).digest() - signature = digest.encode("base64") - else: - # python 3 support - body = text.encode("utf-8") - digest = hmac.new(key, body, sha256).digest() - signature = base64.encodebytes(digest).decode("utf-8") + body = text.encode("utf-8") + digest = hmac.new(key, body, sha256).digest() + signature = base64.encodebytes(digest).decode("utf-8") master_token = "master" token_version = "1.0" @@ -118,9 +111,10 @@ def __GetAuthorizationTokenUsingResourceTokens(resource_tokens, path, resource_i # For database account access(through GetDatabaseAccount API), path and # resource_id_or_fullname are '', so in this case we return the first token to be # used for creating the auth header as the service will accept any token in this case - path = six.moves.urllib.parse.unquote(path) + path = urllib.parse.unquote(path) if not path and not resource_id_or_fullname: - return next(six.itervalues(resource_tokens)) + for value in resource_tokens.values(): + return value if resource_tokens.get(resource_id_or_fullname): return resource_tokens[resource_id_or_fullname] diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/container.py b/sdk/cosmos/azure-cosmos/azure/cosmos/container.py index 06b05b34404f..9d3939a281d4 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/container.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/container.py @@ -24,7 +24,6 @@ from typing import Any, Dict, List, Optional, Union, Iterable, cast # pylint: disable=unused-import -import six from azure.core.tracing.decorator import distributed_trace # type: ignore from ._cosmos_client_connection import CosmosClientConnection @@ -94,13 +93,13 @@ def scripts(self): def _get_document_link(self, item_or_link): # type: (Union[Dict[str, Any], str]) -> str - if isinstance(item_or_link, six.string_types): + if isinstance(item_or_link, str): return u"{}/docs/{}".format(self.container_link, item_or_link) return item_or_link["_self"] def _get_conflict_link(self, conflict_or_link): # type: (Union[Dict[str, Any], str]) -> str - if isinstance(conflict_or_link, six.string_types): + if isinstance(conflict_or_link, str): return u"{}/conflicts/{}".format(self.container_link, conflict_or_link) return conflict_or_link["_self"] diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/cosmos_client.py b/sdk/cosmos/azure-cosmos/azure/cosmos/cosmos_client.py index 75f3303d3877..b7605d38607e 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/cosmos_client.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/cosmos_client.py @@ -24,7 +24,6 @@ from typing import Any, Dict, Optional, Union, cast, Iterable, List # pylint: disable=unused-import -import six from azure.core.tracing.decorator import distributed_trace # type: ignore from ._cosmos_client_connection import CosmosClientConnection @@ -53,7 +52,7 @@ def _parse_connection_str(conn_str, credential): def _build_auth(credential): # type: (Any) -> Dict[str, Any] auth = {} - if isinstance(credential, six.string_types): + if isinstance(credential, str): auth['masterKey'] = credential elif isinstance(credential, dict): if any(k for k in credential.keys() if k in ['masterKey', 'resourceTokens', 'permissionFeed']): @@ -206,7 +205,7 @@ def from_connection_string(cls, conn_str, credential=None, consistency_level="Se @staticmethod def _get_database_link(database_or_id): # type: (Union[DatabaseProxy, str, Dict[str, str]]) -> str - if isinstance(database_or_id, six.string_types): + if isinstance(database_or_id, str): return "dbs/{}".format(database_or_id) try: return cast("DatabaseProxy", database_or_id).database_link diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/database.py b/sdk/cosmos/azure-cosmos/azure/cosmos/database.py index 85a40106bd72..566f00cfcb0c 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/database.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/database.py @@ -25,7 +25,6 @@ from typing import Any, List, Dict, Union, cast, Iterable, Optional import warnings -import six from azure.core.tracing.decorator import distributed_trace # type: ignore from ._cosmos_client_connection import CosmosClientConnection @@ -87,7 +86,7 @@ def __repr__(self): @staticmethod def _get_container_id(container_or_id): # type: (Union[str, ContainerProxy, Dict[str, Any]]) -> str - if isinstance(container_or_id, six.string_types): + if isinstance(container_or_id, str): return container_or_id try: return cast("ContainerProxy", container_or_id).id @@ -101,7 +100,7 @@ def _get_container_link(self, container_or_id): def _get_user_link(self, user_or_id): # type: (Union[UserProxy, str, Dict[str, Any]]) -> str - if isinstance(user_or_id, six.string_types): + if isinstance(user_or_id, str): return u"{}/users/{}".format(self.database_link, user_or_id) try: return cast("UserProxy", user_or_id).user_link diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/scripts.py b/sdk/cosmos/azure-cosmos/azure/cosmos/scripts.py index 53c600490aaa..2caacb4c3286 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/scripts.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/scripts.py @@ -24,8 +24,6 @@ from typing import Any, List, Dict, Union, Iterable, Optional -import six - from azure.cosmos._cosmos_client_connection import CosmosClientConnection from ._base import build_options from .partition_key import NonePartitionKeyValue @@ -55,7 +53,7 @@ def __init__(self, client_connection, container_link, is_system_key): def _get_resource_link(self, script_or_id, typ): # type: (Union[Dict[str, Any], str], str) -> str - if isinstance(script_or_id, six.string_types): + if isinstance(script_or_id, str): return u"{}/{}/{}".format(self.container_link, typ, script_or_id) return script_or_id["_self"] diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/user.py b/sdk/cosmos/azure-cosmos/azure/cosmos/user.py index 0b28ee01da78..31b0d2a1e921 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/user.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/user.py @@ -26,7 +26,6 @@ from typing import Any, List, Dict, Union, cast, Iterable, Optional -import six from azure.core.tracing.decorator import distributed_trace # type: ignore from ._cosmos_client_connection import CosmosClientConnection @@ -54,7 +53,7 @@ def __repr__(self): def _get_permission_link(self, permission_or_id): # type: (Union[Permission, str, Dict[str, Any]]) -> str - if isinstance(permission_or_id, six.string_types): + if isinstance(permission_or_id, str): return u"{}/permissions/{}".format(self.user_link, permission_or_id) try: return cast("Permission", permission_or_id).permission_link diff --git a/sdk/cosmos/azure-cosmos/dev_requirements.txt b/sdk/cosmos/azure-cosmos/dev_requirements.txt index 30f891539e8f..58d432546392 100644 --- a/sdk/cosmos/azure-cosmos/dev_requirements.txt +++ b/sdk/cosmos/azure-cosmos/dev_requirements.txt @@ -1,3 +1,4 @@ -e ../../../tools/azure-sdk-tools ../../core/azure-core --e ../../../tools/azure-devtools \ No newline at end of file +-e ../../../tools/azure-devtools +python_version >= '3.6' \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos/samples/README.md b/sdk/cosmos/azure-cosmos/samples/README.md index 97181792c2e5..bc7c8a4f08ab 100644 --- a/sdk/cosmos/azure-cosmos/samples/README.md +++ b/sdk/cosmos/azure-cosmos/samples/README.md @@ -46,7 +46,7 @@ The following are code samples that show common scenario operations with the Azu * [multi-master operations](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/cosmos/azure-cosmos/samples/MultiMasterOperations) - Example demonstrating multi-master operations. ## Prerequisites -* Python 2.7 or 3.5.3+ +* Python 3.6+ * You must have an [Azure subscription](https://azure.microsoft.com/free/) and an [Azure Cosmos DB account](https://docs.microsoft.com/azure/cosmos-db/create-sql-api-python#create-a-database-account) to run these samples. diff --git a/sdk/cosmos/azure-cosmos/samples/nonpartitioned_container_operations.py b/sdk/cosmos/azure-cosmos/samples/nonpartitioned_container_operations.py index 646a9769a8ad..bab2cb083e66 100644 --- a/sdk/cosmos/azure-cosmos/samples/nonpartitioned_container_operations.py +++ b/sdk/cosmos/azure-cosmos/samples/nonpartitioned_container_operations.py @@ -22,10 +22,8 @@ import azure.cosmos.cosmos_client as cosmos_client import azure.cosmos.exceptions as exceptions import requests -import six import json -import uuid -from six.moves.urllib.parse import quote as urllib_quote +from urllib.parse import quote as urllib_quote import azure.cosmos.auth as auth import azure.cosmos.partition_key as partition_key import datetime @@ -76,9 +74,7 @@ def create_nonpartitioned_container(db): verify=False) data = response.content - if not six.PY2: - # python 3 compatible: convert data from byte to unicode string - data = data.decode('utf-8') + data = data.decode('utf-8') data = json.loads(data) created_container = db.get_container_client("mycoll") @@ -100,9 +96,7 @@ def create_nonpartitioned_container(db): verify=False) data = response.content - if not six.PY2: - # python 3 compatible: convert data from byte to unicode string - data = data.decode('utf-8') + data = data.decode('utf-8') data = json.loads(data) created_document = data return created_container, "SaledOrder0" diff --git a/sdk/cosmos/azure-cosmos/samples/test.py b/sdk/cosmos/azure-cosmos/samples/test.py new file mode 100644 index 000000000000..0049d9a4e5e0 --- /dev/null +++ b/sdk/cosmos/azure-cosmos/samples/test.py @@ -0,0 +1,143 @@ +import sys +sys.path.append(r"C:\Users\simonmoreno\Repos\azure-sdk-for-python\sdk\cosmos\azure-cosmos") + +import uuid +import asyncio +import azure.cosmos.cosmos_client as SyncClient +import azure.cosmos.aio.cosmos_client as AsyncClient +from azure.cosmos import PartitionKey, database, partition_key + +url = 'https://simonmoreno-sql1.documents.azure.com:443/' +k = 'SXXGlx0lzKiZRjF4rQzpfDDMHC7N50GE0s2GQdlNlQxQmOfVdMTg8HWSKKIsODPD15daOrSDOgb3EzktZ67dCQ==' +url1='https://localhost:8081' +k1='C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==' +db_name='testi5' +c_name='c23' + +def get_test_item(): + async_item = { + 'id': 'Async_' + str(uuid.uuid4()), + 'address': { + 'state': 'WA', + 'city': 'Redmond', + 'street': '1 Microsoft Way' + }, + 'test_object': True, + 'lastName': 'Smith' + } + return async_item + +def get_test_item2(): + async_item = { + 'id': 'AsyncBoy', + 'address': { + 'state': 'WA', + 'city': 'Redmond', + 'street': '1 Microsoft Way' + }, + 'test_object': True, + 'lastName': 'Smith' + } + return async_item + +async def get_query_types(): + client = AsyncClient.CosmosClient(url, k) + db = await client.create_database_if_not_exists(id=db_name) + container = await db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/lastName")) + for i in range(25): + await container.create_item(get_test_item()) + + w = container.query_items_change_feed() + print(type(w)) + + await client.delete_database(db_name) + await client.close() + +async def qte(): + client = AsyncClient.CosmosClient(url, k) + db = await client.create_database_if_not_exists(id=db_name) + container = await db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/lastName")) + for i in range(29): + await container.create_item(get_test_item()) + + res = container.query_items(query="select * from c") + # rus = container.list_conflicts() + # lis = [item async for item in res] + # print(len(lis)) + + + triger_body = { + "body": "function updateMetadata() {\r\n var context = getContext();\r\n var collection = context.getCollection();\r\n var response = context.getResponse();\r\n }", + "id": "PostTrigger-UpdateMetaAll4", + "triggerOperation": "All", + "triggerType": "Post"} + + c = container.scripts.list_triggers() + + + + x = await container.scripts.create_trigger(body=triger_body) + + print(await container.scripts.get_trigger("PostTrigger-UpdateMetaAll4")) + + y = await container.create_item(body = get_test_item2(), post_trigger_include='PostTrigger-UpdateMetaAll4') + + + await client.delete_database(db_name) + await client.close() + print("done") + + +def stest(): + client = SyncClient.CosmosClient(url1,k1) + db = client.create_database_if_not_exists(id=db_name) + container = db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/id")) + container.create_item(get_test_item2()) + for i in range(10): + container.create_item(get_test_item()) + # x = list(container.query_items(query="select * from c", partition_key="AsyncBoy")) + # print(len(x)) + # x = list(container.query_items(query="select * from c")) + # print(len(x)) + # x = list(container.read_all_items()) + # print(len(x)) + x = container.read_item(item="AsyncBoy", partition_key="AsyncBoy") + print(x) + print(type(x)) + return None + +def stest2(): + client = SyncClient.CosmosClient(url1,k1) + db = client.create_database_if_not_exists(id=db_name) + container = db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/id")) + print(list(container.list_conflicts())) + +async def atest(): + client = AsyncClient.CosmosClient(url, k) + db = await client.create_database_if_not_exists(id=db_name) + container = await db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/id")) + db.query_containers(query="select * from c") + print("---------------------------------------") + print(client.client_connection.last_response_headers) + print("---------------------------------------") + for i in range(25): + await container.create_item(get_test_item()) + x = container.read_all_items() + count = 0 + async for i in x: + count+=1 + print(count) + y = await container.query_items(query="select * from c") + count = 0 + async for i in y: + count+=1 + print(count) + # c = await container.query_items(query="select * from c") + print("---------------------------------------") + print(client.client_connection.last_response_headers) + await client.delete_database(db_name) + await client.close() + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(qte()) diff --git a/sdk/cosmos/azure-cosmos/setup.cfg b/sdk/cosmos/azure-cosmos/setup.cfg deleted file mode 100644 index 3480374bc2f2..000000000000 --- a/sdk/cosmos/azure-cosmos/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[bdist_wheel] -universal=1 \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos/setup.py b/sdk/cosmos/azure-cosmos/setup.py index 65e30599f0e3..08d3eb872b8e 100644 --- a/sdk/cosmos/azure-cosmos/setup.py +++ b/sdk/cosmos/azure-cosmos/setup.py @@ -25,14 +25,26 @@ version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) +if not version: + raise RuntimeError("Cannot find version information") + with open("README.md", encoding="utf-8") as f: readme = f.read() with open("CHANGELOG.md", encoding="utf-8") as f: changelog = f.read() +exclude_packages = [ + "tests", + "tests.*", + "samples", + # Exclude packages that will be covered by PEP420 or nspkg + "azure", +] + setup( name=PACKAGE_NAME, version=version, + include_package_data=True, description="Microsoft Azure {} Client Library for Python".format(PACKAGE_PPRINT_NAME), long_description=readme + "\n\n" + changelog, long_description_content_type="text/markdown", @@ -48,31 +60,18 @@ "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "License :: OSI Approved :: MIT License", ], zip_safe=False, - packages=find_packages( - exclude=[ - "samples", - "test", - # Exclude packages that will be covered by PEP420 or nspkg - "azure", - ] - ), + packages=find_packages(exclude=exclude_packages), + python_requires=">=3.6", install_requires=[ - 'six >=1.11.0', - 'azure-core<2.0.0,>=1.0.0' + 'azure-core<2.0.0,>=1.2.2' ], - extras_require={ - ":python_version<'3.4'": ['enum34>=1.0.4'], - ":python_version<'3.0'": ["azure-nspkg"], - ":python_version<'3.5'": ["typing"] - }, -) \ No newline at end of file +) diff --git a/sdk/cosmos/azure-cosmos/test/test_crud.py b/sdk/cosmos/azure-cosmos/test/test_crud.py index e34a1784c83c..b0bedd3cc230 100644 --- a/sdk/cosmos/azure-cosmos/test/test_crud.py +++ b/sdk/cosmos/azure-cosmos/test/test_crud.py @@ -26,19 +26,11 @@ import json import logging import os.path -import sys import unittest -from six.moves import xrange -from struct import unpack, pack -# from six.moves.builtins import * import time from typing import Mapping -import six -if six.PY2: - import urllib as urllib -else: - import urllib.parse as urllib +import urllib.parse as urllib import uuid import pytest from azure.core import MatchConditions @@ -46,7 +38,7 @@ from azure.core.pipeline.transport import RequestsTransport, RequestsTransportResponse import azure.cosmos.documents as documents import azure.cosmos.exceptions as exceptions -from azure.cosmos.http_constants import HttpHeaders, StatusCodes, SubStatusCodes +from azure.cosmos.http_constants import HttpHeaders, StatusCodes import test_config import azure.cosmos._base as base import azure.cosmos.cosmos_client as cosmos_client diff --git a/sdk/cosmos/azure-cosmos/test/test_globaldb.py b/sdk/cosmos/azure-cosmos/test/test_globaldb.py index 4d534c883dd4..136148ce87f7 100644 --- a/sdk/cosmos/azure-cosmos/test/test_globaldb.py +++ b/sdk/cosmos/azure-cosmos/test/test_globaldb.py @@ -19,8 +19,7 @@ #OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #SOFTWARE. -from six.moves.urllib.parse import urlparse -import six +from urllib.parse import urlparse import unittest import time diff --git a/sdk/cosmos/azure-cosmos/test/test_location_cache.py b/sdk/cosmos/azure-cosmos/test/test_location_cache.py index 9d53303ca4ea..33834144fe11 100644 --- a/sdk/cosmos/azure-cosmos/test/test_location_cache.py +++ b/sdk/cosmos/azure-cosmos/test/test_location_cache.py @@ -12,7 +12,6 @@ from azure.cosmos.http_constants import StatusCodes, SubStatusCodes, HttpHeaders from azure.cosmos import _retry_utility import test_config -import six pytestmark = pytest.mark.cosmosEmulator @@ -20,11 +19,7 @@ class RefreshThread(threading.Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None): - if six.PY2: - super(RefreshThread, self).__init__(group=group, target=target, - name=name, verbose=verbose) - else: - super().__init__() + super().__init__() self.endpoint_manager = kwargs['endpoint_manager'] def run(self): diff --git a/sdk/cosmos/azure-cosmos/test/test_partition_key.py b/sdk/cosmos/azure-cosmos/test/test_partition_key.py index 026b1f30ae56..84191c01a7fe 100644 --- a/sdk/cosmos/azure-cosmos/test/test_partition_key.py +++ b/sdk/cosmos/azure-cosmos/test/test_partition_key.py @@ -23,10 +23,9 @@ import pytest import requests import datetime -import six import json import uuid -from six.moves.urllib.parse import quote as urllib_quote +from urllib.parse import quote as urllib_quote import azure.cosmos.auth as auth import azure.cosmos.partition_key as partition_key import azure.cosmos.cosmos_client as cosmos_client @@ -75,9 +74,7 @@ def setUpClass(cls): verify=False) data = response.content - if not six.PY2: - # python 3 compatible: convert data from byte to unicode string - data = data.decode('utf-8') + data = data.decode('utf-8') data = json.loads(data) cls.created_collection_id = data['id'] @@ -99,9 +96,7 @@ def setUpClass(cls): verify=False) data = response.content - if not six.PY2: - # python 3 compatible: convert data from byte to unicode string - data = data.decode('utf-8') + data = data.decode('utf-8') data = json.loads(data) cls.created_document = data diff --git a/sdk/cosmos/azure-cosmos/test/test_proxy.py b/sdk/cosmos/azure-cosmos/test/test_proxy.py index 4f0059552a4c..9e8fb21e0ef4 100644 --- a/sdk/cosmos/azure-cosmos/test/test_proxy.py +++ b/sdk/cosmos/azure-cosmos/test/test_proxy.py @@ -25,11 +25,7 @@ import azure.cosmos.documents as documents import azure.cosmos._cosmos_client_connection as cosmos_client_connection import test_config -import six -if six.PY2: - from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer -else: - from http.server import BaseHTTPRequestHandler, HTTPServer +from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Thread from azure.core.exceptions import ServiceRequestError @@ -46,10 +42,7 @@ def _set_headers(self): def _send_payload(self): self._set_headers() payload = "{\"id\":\"" + self.database_name + "\", \"_self\":\"self_link\"}" - if six.PY2: - self.wfile.write(payload) - else: - self.wfile.write(bytes(payload, "utf-8")) + self.wfile.write(bytes(payload, "utf-8")) def do_GET(self): self._send_payload() From 5f5075a20a7b8af1f892ae2bdb62f8e4fbaff35c Mon Sep 17 00:00:00 2001 From: simorenoh Date: Wed, 12 Jan 2022 16:35:21 -0500 Subject: [PATCH 2/5] massive oops, will rotate keys --- sdk/cosmos/azure-cosmos/samples/test.py | 143 ------------------------ 1 file changed, 143 deletions(-) delete mode 100644 sdk/cosmos/azure-cosmos/samples/test.py diff --git a/sdk/cosmos/azure-cosmos/samples/test.py b/sdk/cosmos/azure-cosmos/samples/test.py deleted file mode 100644 index 0049d9a4e5e0..000000000000 --- a/sdk/cosmos/azure-cosmos/samples/test.py +++ /dev/null @@ -1,143 +0,0 @@ -import sys -sys.path.append(r"C:\Users\simonmoreno\Repos\azure-sdk-for-python\sdk\cosmos\azure-cosmos") - -import uuid -import asyncio -import azure.cosmos.cosmos_client as SyncClient -import azure.cosmos.aio.cosmos_client as AsyncClient -from azure.cosmos import PartitionKey, database, partition_key - -url = 'https://simonmoreno-sql1.documents.azure.com:443/' -k = 'SXXGlx0lzKiZRjF4rQzpfDDMHC7N50GE0s2GQdlNlQxQmOfVdMTg8HWSKKIsODPD15daOrSDOgb3EzktZ67dCQ==' -url1='https://localhost:8081' -k1='C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==' -db_name='testi5' -c_name='c23' - -def get_test_item(): - async_item = { - 'id': 'Async_' + str(uuid.uuid4()), - 'address': { - 'state': 'WA', - 'city': 'Redmond', - 'street': '1 Microsoft Way' - }, - 'test_object': True, - 'lastName': 'Smith' - } - return async_item - -def get_test_item2(): - async_item = { - 'id': 'AsyncBoy', - 'address': { - 'state': 'WA', - 'city': 'Redmond', - 'street': '1 Microsoft Way' - }, - 'test_object': True, - 'lastName': 'Smith' - } - return async_item - -async def get_query_types(): - client = AsyncClient.CosmosClient(url, k) - db = await client.create_database_if_not_exists(id=db_name) - container = await db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/lastName")) - for i in range(25): - await container.create_item(get_test_item()) - - w = container.query_items_change_feed() - print(type(w)) - - await client.delete_database(db_name) - await client.close() - -async def qte(): - client = AsyncClient.CosmosClient(url, k) - db = await client.create_database_if_not_exists(id=db_name) - container = await db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/lastName")) - for i in range(29): - await container.create_item(get_test_item()) - - res = container.query_items(query="select * from c") - # rus = container.list_conflicts() - # lis = [item async for item in res] - # print(len(lis)) - - - triger_body = { - "body": "function updateMetadata() {\r\n var context = getContext();\r\n var collection = context.getCollection();\r\n var response = context.getResponse();\r\n }", - "id": "PostTrigger-UpdateMetaAll4", - "triggerOperation": "All", - "triggerType": "Post"} - - c = container.scripts.list_triggers() - - - - x = await container.scripts.create_trigger(body=triger_body) - - print(await container.scripts.get_trigger("PostTrigger-UpdateMetaAll4")) - - y = await container.create_item(body = get_test_item2(), post_trigger_include='PostTrigger-UpdateMetaAll4') - - - await client.delete_database(db_name) - await client.close() - print("done") - - -def stest(): - client = SyncClient.CosmosClient(url1,k1) - db = client.create_database_if_not_exists(id=db_name) - container = db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/id")) - container.create_item(get_test_item2()) - for i in range(10): - container.create_item(get_test_item()) - # x = list(container.query_items(query="select * from c", partition_key="AsyncBoy")) - # print(len(x)) - # x = list(container.query_items(query="select * from c")) - # print(len(x)) - # x = list(container.read_all_items()) - # print(len(x)) - x = container.read_item(item="AsyncBoy", partition_key="AsyncBoy") - print(x) - print(type(x)) - return None - -def stest2(): - client = SyncClient.CosmosClient(url1,k1) - db = client.create_database_if_not_exists(id=db_name) - container = db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/id")) - print(list(container.list_conflicts())) - -async def atest(): - client = AsyncClient.CosmosClient(url, k) - db = await client.create_database_if_not_exists(id=db_name) - container = await db.create_container_if_not_exists(id=c_name, partition_key=PartitionKey(path="/id")) - db.query_containers(query="select * from c") - print("---------------------------------------") - print(client.client_connection.last_response_headers) - print("---------------------------------------") - for i in range(25): - await container.create_item(get_test_item()) - x = container.read_all_items() - count = 0 - async for i in x: - count+=1 - print(count) - y = await container.query_items(query="select * from c") - count = 0 - async for i in y: - count+=1 - print(count) - # c = await container.query_items(query="select * from c") - print("---------------------------------------") - print(client.client_connection.last_response_headers) - await client.delete_database(db_name) - await client.close() - -if __name__ == '__main__': - loop = asyncio.get_event_loop() - loop.run_until_complete(qte()) From 8334b211cf56060a231995fd63dce4466a41ccc0 Mon Sep 17 00:00:00 2001 From: Simon Moreno <30335873+simorenoh@users.noreply.github.com> Date: Wed, 12 Jan 2022 16:36:54 -0500 Subject: [PATCH 3/5] change 3.7 to 3.6 --- eng/pipelines/templates/stages/cosmos-sdk-client.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/cosmos-sdk-client.yml b/eng/pipelines/templates/stages/cosmos-sdk-client.yml index d4b40e057ea8..0ec0d69b1df4 100644 --- a/eng/pipelines/templates/stages/cosmos-sdk-client.yml +++ b/eng/pipelines/templates/stages/cosmos-sdk-client.yml @@ -33,9 +33,9 @@ stages: - job: Emulator strategy: matrix: - Windows_Python37: + Windows_Python36: OSVmImage: 'windows-2019' - PythonVersion: '3.7' + PythonVersion: '3.6' pool: vmImage: $(OSVmImage) From ece73f35e9eb9792c6c31c9077a5802b147e3720 Mon Sep 17 00:00:00 2001 From: simorenoh Date: Wed, 12 Jan 2022 16:56:25 -0500 Subject: [PATCH 4/5] pylint --- .../azure-cosmos/azure/cosmos/_cosmos_client_connection.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py b/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py index 78d7623119fe..35f7fb470d9d 100644 --- a/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py +++ b/sdk/cosmos/azure-cosmos/azure/cosmos/_cosmos_client_connection.py @@ -2384,8 +2384,8 @@ def __GetBodiesFromQueryResult(result): # Copy to make sure that default_headers won't be changed. if query is None: # Query operations will use ReadEndpoint even though it uses GET(for feed requests) - request_params = _request_object.RequestObject(typ, - documents._OperationType.QueryPlan if is_query_plan else documents._OperationType.ReadFeed) + request_params = _request_object.RequestObject( + typ, documents._OperationType.QueryPlan if is_query_plan else documents._OperationType.ReadFeed) headers = base.GetHeaders(self, initial_headers, "get", path, id_, typ, options, partition_key_range_id) result, self.last_response_headers = self.__Get(path, request_params, headers, **kwargs) if response_hook: From 16ed6c85159bf4bc8940b9520c008db85c77c146 Mon Sep 17 00:00:00 2001 From: simorenoh Date: Wed, 12 Jan 2022 18:06:22 -0500 Subject: [PATCH 5/5] addressed Anna's comments --- sdk/cosmos/azure-cosmos/dev_requirements.txt | 3 +-- sdk/cosmos/azure-cosmos/setup.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/sdk/cosmos/azure-cosmos/dev_requirements.txt b/sdk/cosmos/azure-cosmos/dev_requirements.txt index 58d432546392..30f891539e8f 100644 --- a/sdk/cosmos/azure-cosmos/dev_requirements.txt +++ b/sdk/cosmos/azure-cosmos/dev_requirements.txt @@ -1,4 +1,3 @@ -e ../../../tools/azure-sdk-tools ../../core/azure-core --e ../../../tools/azure-devtools -python_version >= '3.6' \ No newline at end of file +-e ../../../tools/azure-devtools \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos/setup.py b/sdk/cosmos/azure-cosmos/setup.py index 08d3eb872b8e..f206cdb487a8 100644 --- a/sdk/cosmos/azure-cosmos/setup.py +++ b/sdk/cosmos/azure-cosmos/setup.py @@ -34,8 +34,7 @@ changelog = f.read() exclude_packages = [ - "tests", - "tests.*", + "test", "samples", # Exclude packages that will be covered by PEP420 or nspkg "azure",