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()}, } }
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']]
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, } }
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', [])], }