Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
    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()
Esempio n. 4
0
    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]
Esempio n. 5
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()