def run_sample():
    AUTH_URI = os.environ.get("ACCOUNT_URI")
    AUTH_KEY = os.environ.get("ACCOUNT_KEY")
    DATABASE_ID = "testdocumentmanagementdb"
    CONTAINER_ID = "testdocumentmanagementcollection"

    client = CosmosClient(AUTH_URI, AUTH_KEY)
    database = client.create_database(id=DATABASE_ID)
    partition_key = PartitionKey(path="/purchase_order_number")
    try:
        container = database.create_container(id=CONTAINER_ID,
                                              partition_key=partition_key)
        print(f'Container with id "{CONTAINER_ID}"" created')
    except HTTPFailure as e:
        if e.status_code == 409:
            print(f"Container with id {CONTAINER_ID} already exists")
            container = database.get_container(container=CONTAINER_ID)
        else:
            raise

    DocumentManagement.create_documents(container)
    DocumentManagement.read_document(container, "SalesOrder1")
    DocumentManagement.read_documents(container)

    client.delete_database(database=DATABASE_ID)
    print("\nrun_sample done")
    def clean_up_database(cls):
        client = CosmosClient(_config.host, key=_config.master_key)
        query_iterable = client.list_database_properties(
            query="SELECT * FROM root r WHERE r.id='{}'".format(
                _config.TEST_DATABASE_NAME
            )
        )

        for database in query_iterable:
            client.delete_database(database)
def run_sample():
    AUTH_URL = os.environ.get("ACCOUNT_HOST")
    AUTH_KEY = os.environ.get("ACCOUNT_KEY")
    DATABASE_ID = 'testdocumentmanagementdb'
    CONTAINER_ID = 'testdocumentmanagementcollection'

    client = CosmosClient(AUTH_URL, AUTH_KEY)
    database = client.create_database(id=DATABASE_ID)
    try:
        container = database.create_container(id=CONTAINER_ID)
        print(f'Container with id "{CONTAINER_ID}"" created')
    except HTTPFailure as e:
        if e.status_code == 409:
            print(f'Container with id {CONTAINER_ID} already exists')
            container = database.get_container(container=CONTAINER_ID)
        else:
            raise

    DocumentManagement.create_documents(container)
    DocumentManagement.read_document(container, 'SalesOrder1')
    DocumentManagement.read_documents(container)

    client.delete_database(database=DATABASE_ID)
    print("\nrun_sample done")
Exemplo n.º 4
0
class CosmosDB:
    def __init__(self):
        URL = os.environ["COSMOS_ENDPOINT"]
        KEY = os.environ["COSMOS_KEY"]
        self.client = CosmosClient(URL, {"masterKey": KEY})
        self.dbName = "pySolarSystem-" + uuid.uuid1().hex

    def create_database(self):
        print("Creating '{0}' database...".format(self.dbName))
        return self.client.create_database(self.dbName)

    def create_container(self, db):
        collectionName = "Planets"
        print("Creating '{0}' collection...".format(collectionName))
        partition_key = PartitionKey(path="/id", kind="Hash")
        return db.create_container(id="Planets", partition_key=partition_key)

    def create_documents(self, container):
        # Cosmos will look for an 'id' field in the items, if the 'id' is not specify Cosmos is going to assing a random key.
        planets = [
            {
                "id": "Earth",
                "HasRings": False,
                "Radius": 3959,
                "Moons": [{"Name": "Moon"}],
            },
            {
                "id": "Mars",
                "HasRings": False,
                "Radius": 2106,
                "Moons": [{"Name": "Phobos"}, {"Name": "Deimos"}],
            },
        ]

        print("Inserting items in the collection...")
        for planet in planets:
            container.create_item(planet)
            print("\t'{0}' created".format(planet["id"]))
        print("\tdone")

    def simple_query(self, container):
        print("Quering the container...")
        items = list(
            container.query_items(
                query="SELECT c.id FROM c", enable_cross_partition_query=True
            )
        )
        print("\tdone: {0}".format(items))

    def delete_database(self):
        print("Cleaning up the resource...")
        self.client.delete_database(self.dbName)
        print("\tdone")

    def run(self):
        print("")
        print("------------------------")
        print("Cosmos DB")
        print("------------------------")
        print("1) Create a Database")
        print("2) Create a Container in the database")
        print("3) Insert Documents (items) into the Container")
        print("4) Delete Database (Clean up the resource)")
        print("")

        # Ensure that the database does not exists
        try:
            self.delete_database()
        except:
            pass

        try:
            db = self.create_database()
            container = self.create_container(db=db)
            self.create_documents(container=container)
            self.simple_query(container=container)
        finally:
            # if something goes wrong, the resource should be cleaned anyway
            self.delete_database()
Exemplo n.º 5
0
# Create a database
# <create_database_if_not_exists>
database_name = 'GameDatabase'

databases = list(
    client.query_databases({
        "query":
        "SELECT * FROM r WHERE r.id=@id",
        "parameters": [{
            "name": "@id",
            "value": database_name
        }]
    }))

if (len(databases) > 0):
    client.delete_database(database_name)

database = client.create_database_if_not_exists(id=database_name)
# </create_database_if_not_exists>

orders_name = "Orders"
orders_db = database.create_container_if_not_exists(
    id=orders_name,
    partition_key=PartitionKey(path="/username"),
    offer_throughput=400)

order_items_to_create = [
    orders.vulture_1_1(),
    orders.vulture_1_2(),
    orders.scorpion_1_1(),
    orders.scorpion_1_2(),
Exemplo n.º 6
0
class CRUD:
    '''
    Class:
        CRUD
    Description:
        Class to perform Basic CRUD Operations on Cosmos DB SQL API
    Functions:
        dbConnection()
        create_database()
        create_container()
        insert_record()
        delete_record()
        read_record()
        drop_database()
    Variable:
        None
    '''
    def __init__(self):
        self.url = config('ACCOUNT_URI')
        self.key = config('ACCOUNT_KEY')
        self.clientConnection()
        self.create_database()
        self.create_container()

    def clientConnection(self):
        '''
        Description:
            Connection to Azure Cosmos DB
        Parameter:
            None
        Return:
            None
        '''
        try:
            self.client = CosmosClient(self.url, credential=self.key)
            logger.info("Connection Successfull")

        except Exception:
            logger.exception("Connection Unsuccessfull")

    def create_database(self):
        '''
        Description:
            Create a Database
        Parameter:
            None
        Return:
            None
        '''
        try:
            database_name = 'testDatabase'
            self.mydb = self.client.create_database(database_name)
            logger.info("Database Creation Successfull")
        except exceptions.CosmosResourceExistsError:
            self.mydb = self.client.get_database_client(database_name)
            logger.warning("Database Exists")
        except Exception:
            logger.exception("Database Creation Unsuccessfull")

    def create_container(self):
        '''
        Description:
            Create a Container
        Parameter:
            None
        Return:
            None
        '''
        try:
            container_name = 'products'
            self.myContainer = self.mydb.create_container(
                id=container_name,
                partition_key=PartitionKey(path="/productName"))
            logger.info("Container Creation Successfull")
        except exceptions.CosmosResourceExistsError:
            self.myContainer = self.mydb.get_container_client(container_name)
            logger.warning("Container Exists")
        except Exception:
            logger.exception("Container Creation Unsuccessfull")

    def insert_record(self):
        '''
        Description:
            Insert Records to the container
        Parameter:
            None
        Return:
            None
        '''
        try:
            for i in range(1, 10):
                self.myContainer.upsert_item({
                    'id':
                    'item{0}'.format(i),
                    'productName':
                    'Widget',
                    'productModel':
                    'Model {0}'.format(i)
                })
            logger.info("Insert Record Successfull")
        except Exception:
            logger.exception("Insert Record Unsuccessfull")

    def delete_record(self):
        '''
        Description:
            Delete a record in the container
        Parameter:
            None
        Return:
            None
        '''
        try:
            myQuery = "SELECT * FROM products p WHERE p.id = 'item3'"
            for item in self.myContainer.query_items(
                    query=myQuery, enable_cross_partition_query=True):
                self.myContainer.delete_item(item, partition_key='Widget')
            logger.info("Delete Record Successfull")
        except Exception:
            logger.exception("Delete Record Unsuccessfull")

    def read_record(self):
        '''
        Description:
            Read a record from the container
        Parameter:
            None
        Return:
            None
        '''
        try:
            myQuery = "SELECT * FROM products p WHERE p.productModel = 'Model 2'"
            for item in self.myContainer.query_items(
                    query=myQuery, enable_cross_partition_query=True):
                print(json.dumps(item, indent=True))
            logger.info("Read Record Successfull")
        except Exception:
            logger.exception("Read Record Unsuccessfull")

    def drop_database(self):
        '''
        Description:
            Delete the created Database
        Parameter:
            None
        Return:
            None
        '''
        try:
            self.client.delete_database("testDatabase")
            logger.info("Database Drop Successfull")
        except Exception:
            logger.exception("Drop Database Unsuccessfull")