Azure/azure-cosmos-python

Can't create StoredProcedure

Closed this issue · 3 comments

I use DocumentDB Emulator, but this python SDK can't create stored procedure.

>>> import pydocumentdb.document_client as document_client
>>> c = document_client.DocumentClient(r"https://localhost:8081", {"masterKey": r"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="})
>>> result = c.CreateDatabase({"id": "TEST"})
INFO:Starting new HTTPS connection (1): localhost
C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\requests\packages\urllib3\connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\requests\packages\urllib3\connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
>>> result = c.CreateCollection(r"dbs/TEST", {"id": "TEST"})
C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\requests\packages\urllib3\connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
>>> result = c.CreateDocument(r"dbs/TEST/colls/TEST", {"TEST":1})
C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\requests\packages\urllib3\connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\requests\packages\urllib3\connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
>>> f = open("stored_procedures/count_collection.js", "r", encoding="utf-8")
>>> proc = f.read()
>>> c.CreateStoredProcedure(r"dbs/TEST/colls/TEST", str(proc))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\pydocumentdb\document_client.py", line 1244, in CreateStoredProcedure
    collection_id, path, sproc = self._GetCollectionIdWithPathForSproc(collection_link, sproc)
  File "C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\pydocumentdb\document_client.py", line 1276, in _GetCollectionIdWithPathForSproc
    DocumentClient.__ValidateResource(sproc)
  File "C:\Users\user\Source\Repos\dkouma_uploader\env\lib\site-packages\pydocumentdb\document_client.py", line 2518, in __ValidateResource
    id = resource.get('id')
AttributeError: 'str' object has no attribute 'get'

Please forget about Warnings.

CreateStoredProcedure expects not a string but a dict. This will work:

sproc = dict([("id", "myStoredProc"), ("serverScript", proc)])
client.CreateStoredProcedure(coll_link, sproc)

Okay, I'll try it. thank you.