def get(self, *pk, **composite_keys): """ Return a Entity with the given primary key :param pk: Primary key value :param composite_keys: Primary key values for Entities with composite keys :return: Entity instance or None """ i = self.entity.__new__(self.entity) es = i.__odata__ oldfilters = self._get_or_create_option('$filter') tempfilters = [] if pk: pk = pk[0] prop = es.primary_key_properties[0][1] tempfilters.append(prop == pk) else: for _, prop in es.primary_key_properties: tempfilters.append(prop == composite_keys[prop.name]) self.options['$filter'] = tempfilters data = list(iter(self)) self.options['$filter'] = oldfilters if len(data) > 0: return data[0] raise exc.NoResultsFound()
async def by_pk(self, pk): self.url = self._get_url() + '/' + pk self.singleton = True data = [] async for item in self: data.append(item) if len(data) > 0: return data[0] raise exc.NoResultsFound()
def get(self, *pk, **composite_keys): """ Return a Entity with the given primary key :param pk: Primary key value :param composite_keys: Primary key values for Entities with composite keys :return: Entity instance or None """ if isinstance(self.entity, str): url = f"{self._get_url()}({pk[0]})" extra_headers = { "Prefer": "odata.maxpagesize=0" # Pagination turned off in raw mode } response_data = self.connection.execute_get(url, extra_headers=extra_headers) if not response_data: exc.NoResultsFound() return (response_data or {}).get('value') i = self.entity.__new__(self.entity) es = i.__odata__ oldfilters = self._get_or_create_option('$filter') tempfilters = [] if pk: pk = pk[0] prop = es.primary_key_properties[0][1] tempfilters.append(prop == pk) else: for _, prop in es.primary_key_properties: tempfilters.append(prop == composite_keys[prop.name]) self.options['$filter'] = tempfilters data = list(iter(self)) self.options['$filter'] = oldfilters if len(data) > 0: return data[0] raise exc.NoResultsFound()
def one(self): """ Return only one resulting Entity :return: Entity instance :raises NoResultsFound: Zero results returned :raises MultipleResultsFound: Multiple results returned """ oldlimit = self.options.get('$top', None) self.options['$top'] = 2 data = self.all() self.options['$top'] = oldlimit if len(data) == 0: raise exc.NoResultsFound() if len(data) > 1: raise exc.MultipleResultsFound() return data[0]
def get(self, pk): """ Return a Entity with the given primary key :param pk: Primary key value :return: Entity instance or None """ i = self.entity.__new__(self.entity) es = i.__odata__ _, prop = es.primary_key_property oldfilters = self._get_or_create_option('$filter') self.options['$filter'] = [prop == pk] data = list(iter(self)) self.options['$filter'] = oldfilters if len(data) > 0: return data[0] raise exc.NoResultsFound()