コード例 #1
0
    def make_mutation(cls, operation: Operation, key: Key,
                      properties: Dict[str, Any] = None) -> Dict[str, Any]:
        if operation == Operation.DELETE:
            return {operation.value: key.to_repr()}

        return {
            operation.value: {
                'key': key.to_repr(),
                'properties': {k: cls.value_kind(v).to_repr()
                               for k, v in properties.items()},
            }
        }
コード例 #2
0
    async def allocateIds(self,
                          keys: List[Key],
                          session: aiohttp.ClientSession = None,
                          timeout: int = 10) -> List[Key]:
        url = f'{API_ROOT}/{self.project}:allocateIds'

        payload = json.dumps({
            'keys': [k.to_repr() for k in keys],
        }).encode('utf-8')

        headers = await self.headers()
        headers.update({
            'Content-Length': str(len(payload)),
            'Content-Type': 'application/json',
        })

        if not self.session:
            self.session = aiohttp.ClientSession(conn_timeout=10,
                                                 read_timeout=10)
        session = session or self.session
        resp = await session.post(url,
                                  data=payload,
                                  headers=headers,
                                  timeout=timeout)
        resp.raise_for_status()
        data = await resp.json()

        return [Key.from_repr(k) for k in data['keys']]
コード例 #3
0
ファイル: datastore.py プロジェクト: KevinGDialpad/gcloud-aio
    def make_mutation(
            cls,
            operation: Operation,
            key: Key,
            properties: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
        if operation == Operation.DELETE:
            return {operation.value: key.to_repr()}

        mutation_properties = {}
        for k, v in (properties or {}).items():
            value = v if isinstance(v, cls.value_kind) else cls.value_kind(v)
            mutation_properties[k] = value.to_repr()

        return {
            operation.value: {
                'key': key.to_repr(),
                'properties': mutation_properties,
            }
        }
コード例 #4
0
    async def lookup(self,
                     keys: List[Key],
                     transaction: str = None,
                     consistency: Consistency = Consistency.STRONG,
                     session: aiohttp.ClientSession = None,
                     timeout: int = 10) -> dict:
        url = f'{API_ROOT}/{self.project}:lookup'

        if transaction:
            options = {'transaction': transaction}
        else:
            options = {'readConsistency': consistency.value}
        payload = json.dumps({
            'keys': [k.to_repr() for k in keys],
            'readOptions': options,
        }).encode('utf-8')

        headers = await self.headers()
        headers.update({
            'Content-Length': str(len(payload)),
            'Content-Type': 'application/json',
        })

        if not self.session:
            self.session = aiohttp.ClientSession(conn_timeout=10,
                                                 read_timeout=10)
        session = session or self.session
        resp = await session.post(url,
                                  data=payload,
                                  headers=headers,
                                  timeout=timeout)
        resp.raise_for_status()
        data: dict = await resp.json()

        return {
            'found':
            [EntityResult.from_repr(e) for e in data.get('found', [])],
            'missing':
            [EntityResult.from_repr(e) for e in data.get('missing', [])],
            'deferred': [Key.from_repr(k) for k in data.get('deferred', [])],
        }