示例#1
0
    def __compose_filter(self, filter_params: FilterParams):
        filter_params = filter_params or FilterParams()
        search = filter_params.get_as_nullable_string('search')
        id = filter_params.get_as_nullable_string('id')
        name = filter_params.get_as_nullable_string('name')
        login = filter_params.get_as_nullable_string('login')
        active = filter_params.get_as_nullable_boolean('active')
        from_create_time = filter_params.get_as_nullable_datetime(
            'from_create_time')
        to_create_time = filter_params.get_as_nullable_datetime(
            'to_create_time')
        deleted = filter_params.get_as_boolean_with_default('deleted', False)

        def inner(item: AccountV1):
            if search is not None and not self.__match_search(item, search):
                return False
            if id is not None and id != item.id:
                return False
            if name is not None and name != item.name:
                return False
            if login is not None and login != item.login:
                return False
            if active is not None and active != item.active:
                return False
            if from_create_time is not None and item.create_time >= from_create_time:
                return False
            if to_create_time is not None and item.create_time < to_create_time:
                return False
            if not deleted and item.deleted:
                return False
            return True

        return inner
示例#2
0
    def get_page_by_filter(self, correlation_id: Optional[str],
                           filter: FilterParams,
                           paging: PagingParams) -> DataPage:
        filters = filter if filter is not None else FilterParams()
        key = filters.get_as_nullable_string("key")

        paging = paging if not (paging is None) else PagingParams()
        skip = paging.get_skip(0)
        take = paging.get_take(100)

        result = []
        self.__lock.acquire()
        try:
            for item in self.__items:
                if not (key is None) and key != item.key:
                    continue

                skip -= 1
                if skip >= 0: continue

                take -= 1
                if take < 0: break

                result.append(item)
        finally:
            self.__lock.release()

        return DataPage(result)
示例#3
0
    def get_page_by_filter(self, correlation_id, filter, paging):
        filter = filter or FilterParams()

        id = filter.get_as_nullable_string("id")
        site_id = filter.get_as_nullable_string("site_id")
        label = filter.get_as_nullable_string("label")
        udi = filter.get_as_nullable_string("udi")
        udis = filter.get_as_object("udis")
        if udis != None and len(udis) > 0:
            udis = udis.split(",")

        def filter_beacons(item):
            if id is not None and item.id != id:
                return False
            if site_id is not None and item.site_id != site_id:
                return False
            if label is not None and item.label != label:
                return False
            if udi is not None and item.udi != udi:
                return False
            if udis is not None and item.udi not in udis:
                return False
            return True

        return super(BeaconsMemoryPersistence,
                     self).get_page_by_filter(correlation_id,
                                              filter_beacons,
                                              paging=paging)
    def test_crud_operations(self):
        # Create 3 beacons
        self.test_create_beacons()

        # Get all beacons
        page = self._persistence.get_page_by_filter(None, FilterParams(),
                                                    PagingParams())
        assert page is not None
        assert len(page.data) == 3

        beacon1 = page.data[0]

        # Update the beacon
        beacon1['label'] = "ABC"
        beacon = self._persistence.update(None, beacon1)
        assert beacon is not None
        assert beacon1['id'] == beacon['id']
        assert "ABC" == beacon['label']

        # Get beacon by udi
        beacon = self._persistence.get_one_by_udi(None, beacon1['udi'])
        assert beacon is not None
        assert beacon['id'] == beacon1['id']

        # Delete beacon
        self._persistence.delete_by_id(None, beacon1['id'])

        # Try to get deleted beacon
        beacon = self._persistence.get_one_by_id(None, beacon1['id'])
        assert beacon is None
    def compose_filter(self, filter):
        filter = filter or FilterParams()
        id = filter.get_as_nullable_string("id")
        site_id = filter.get_as_nullable_string("site_id")
        label = filter.get_as_nullable_string('label')
        udi = filter.get_as_nullable_string('udi')
        udis = filter.get_as_object('udis')

        if type(udis) == str:
            udis = udis.split(',')

        if not (type(udis) == list):
            udis = None

        def filter_beacons(item):
            if id is not None and item.id != id:
                return False
            if site_id is not None and item.site_id != site_id:
                return False
            if label is not None and item.label != label:
                return False
            if udi is not None and item.udi != udi:
                return False
            if udis is not None:
                try:
                    udis.index(item.udi)
                except Exception as e:
                    return False
            return True

        return filter_beacons
    def __compose_filter(self, filter_params: FilterParams) -> Callable:
        filter_params = filter_params or FilterParams()

        id = filter_params.get_as_nullable_string('id')
        site_id = filter_params.get_as_nullable_string('site_id')
        label = filter_params.get_as_nullable_string('label')
        udi = filter_params.get_as_nullable_string('udi')
        udis = filter_params.get_as_object('udis')
        if isinstance(udis, str):
            udis = udis.split(',')
        if not isinstance(udis, list):
            udis = None

        def inner(item):
            if id is not None and item.id != id:
                return False
            if site_id is not None and item.site_id != site_id:
                return False
            if label is not None and item.label != label:
                return False
            if udi is not None and item.udi != udi:
                return False
            if udis is not None and udis.count(item.udi) < 0:
                return False
            return True

        return inner
示例#7
0
    def get_page_by_filter(self, correlation_id, filter, paging):
        filter = filter if filter is not None else FilterParams()
        key = filter.get_as_nullable_string("key")

        paging = paging if paging is not None else PagingParams()
        skip = paging.get_skip(0)
        take = paging.get_take(100)

        result = []
        self._lock.acquire()
        try:
            for item in self._items:
                if key is not None and key != item['key']:
                    continue

                skip -= 1
                if skip >= 0:
                    continue

                take -= 1
                if take < 0:
                    break

                result.append(item)
        finally:
            self._lock.release()

        return DataPage(result, len(result))
    def __compose_filter(self, filter: FilterParams) -> Callable:
        filter = filter if filter is not None else FilterParams()

        id = filter.get_as_nullable_string("id")
        site_id = filter.get_as_nullable_string("site_id")
        label = filter.get_as_nullable_string("label")
        udi = filter.get_as_nullable_string("udi")
        udis = filter.get_as_object("udis")
        if udis is not None and len(udis) > 0:
            udis = udis.split(",")

        def filter_beacons(item):
            if id is not None and item.id != id:
                return False
            if site_id is not None and item.site_id != site_id:
                return False
            if label is not None and item.label != label:
                return False
            if udi is not None and item.udi != udi:
                return False
            if udis is not None and item.udi not in udis:
                return False
            return True

        return filter_beacons
    def get_count_by_filter(self, correlation_id, filter):
        filter = filter or FilterParams()
        key = filter.get_as_nullable_string('key')

        filter_condition = ''
        if key is not None:
            filter_condition += "data->key='" + key + "'"

        return super().get_count_by_filter(correlation_id, filter_condition)
    def get_count_by_filter(self, correlation_id: Optional[str], filter: FilterParams) -> int:
        filter = filter or FilterParams()
        key = filter.get_as_nullable_string('key')

        filter_condition = {}
        if key is not None:
            filter_condition['key'] = key

        return super().get_count_by_filter(correlation_id, filter)
    def get_page_by_filter(self, correlation_id: Optional[str], filter: FilterParams, paging: PagingParams) -> DataPage:
        filter = filter or FilterParams()
        key = filter.get_as_nullable_string('key')

        filter_condition = {}
        if key is not None:
            filter_condition['key'] = key

        return super().get_page_by_filter(correlation_id, filter, paging, None, None)
    def __get_page_by_filter(self):
        result = self._controller.get_page_by_filter(
            self._get_correlation_id(),
            FilterParams(bottle.request.query.dict),
            PagingParams(bottle.request.query.get('skip'),
                         bottle.request.query.get('take'),
                         bottle.request.query.get('total')),
        )

        return self.send_result(result)
示例#13
0
 def get_page_by_filter(self,
                        correlation_id,
                        filter,
                        paging,
                        sort=None,
                        select=None):
     filter = filter if filter != None else FilterParams()
     return super(DummyMongoDbPersistence,
                  self).get_page_by_filter(correlation_id, filter, paging,
                                           None, None)
 def get_page_by_filter(self,
                        correlation_id: Optional[str],
                        filter: FilterParams,
                        paging: PagingParams,
                        sort: Any = None,
                        select: Any = None) -> DataPage:
     filter = filter if filter is not None else FilterParams()
     return super(BeaconsMongoDbPersistence,
                  self).get_page_by_filter(correlation_id,
                                           self.compose_filter(filter),
                                           paging, None, None)
    def get_page_by_filter(self, correlation_id, filter, paging):
        filter = filter if filter != None else FilterParams()
        key = filter.get_as_nullable_string("key")

        def filter_dummy(obj):
            if key != None and obj['key'] != key:
                return False
            return True

        return super(DummyMemoryPersistence,
                     self).get_page_by_filter(correlation_id,
                                              filter_dummy,
                                              paging=paging)
示例#16
0
    def test_crud_operations(self):
        # Create the first beacon
        beacon1 = self._controller.create_beacon(None, BEACON1)

        assert beacon1 != None
        assert beacon1['id'] == BEACON1['id']
        assert beacon1['site_id'] == BEACON1['site_id']
        assert beacon1['udi'] == BEACON1['udi']
        assert beacon1['type'] == BEACON1['type']
        assert beacon1['label'] == BEACON1['label']
        assert beacon1['center'] != None

        # Create the second beacon
        beacon2 = self._controller.create_beacon(None, BEACON2)

        assert beacon2 != None
        assert beacon2['id'] == BEACON2['id']
        assert beacon2['site_id'] == BEACON2['site_id']
        assert beacon2['udi'] == BEACON2['udi']
        assert beacon2['type'] == BEACON2['type']
        assert beacon2['label'] == BEACON2['label']
        assert beacon2['center'] != None

        # Get all beacons
        page = self._controller.get_beacons_by_filter(None, FilterParams(),
                                                      PagingParams())
        assert page != None
        assert len(page.data) == 2

        beacon1 = page.data[0]

        # Update the beacon
        beacon1['label'] = "ABC"
        beacon = self._controller.update_beacon(None, beacon1)
        assert beacon != None
        assert beacon1['id'] == beacon['id']
        assert "ABC" == beacon['label']

        # Get beacon by udi
        beacon = self._controller.get_beacon_by_udi(None, beacon1['udi'])
        assert beacon != None
        assert beacon['id'] == beacon1['id']

        # Delete beacon
        self._controller.delete_beacon_by_id(None, beacon1['id'])

        # Try to get deleted beacon
        beacon = self._controller.get_beacon_by_id(None, beacon1['id'])
        assert beacon == None
示例#17
0
    def test_crud_operations(self):
        # Create the first beacon
        beacon1 = self._controller.create_beacon(None, BEACON1)

        assert beacon1 is not None
        assert beacon1.id == BEACON1.id
        assert beacon1.site_id == BEACON1.site_id
        assert beacon1.udi == BEACON1.udi
        assert beacon1.type == BEACON1.type
        assert beacon1.label == BEACON1.label
        assert beacon1.center is not None

        # Create the second beacon
        beacon2 = self._controller.create_beacon(None, BEACON2)

        assert beacon2 != None
        assert beacon2.id == BEACON2.id
        assert beacon2.site_id == BEACON2.site_id
        assert beacon2.udi == BEACON2.udi
        assert beacon2.type == BEACON2.type
        assert beacon2.label == BEACON2.label
        assert beacon2.center is not None

        # Get all beacons
        page = self._controller.get_beacons_by_filter(None, FilterParams(),
                                                      PagingParams())
        assert page is not None
        assert len(page.data) == 2

        beacon1 = page.data[0]

        # Update the beacon
        beacon1.label = "ABC"
        beacon = self._controller.update_beacon(None, beacon1)
        assert beacon is not None
        assert beacon1.id == beacon.id
        assert "ABC" == beacon.label

        # Get beacon by udi
        beacon = self._controller.get_beacon_by_udi(None, beacon1.udi)
        assert beacon is not None
        assert beacon.id == beacon1.id

        # Delete beacon
        self._controller.delete_beacon_by_id(None, beacon1.id)

        # Try to get deleted beacon
        beacon = self._controller.get_beacon_by_id(None, beacon1.id)
        assert beacon is None
示例#18
0
    def get_page_by_filter(self,
                           correlation_id: Optional[str],
                           filter: FilterParams,
                           paging: PagingParams,
                           sort=None,
                           select=None):
        filter = filter or FilterParams()
        key = filter.get_as_nullable_string('key')

        filter_condition = ''
        if key is not None:
            filter_condition += "`key`='" + key + "'"

        return super().get_page_by_filter(correlation_id, filter_condition,
                                          paging, None, None)
示例#19
0
    def __compose_filter(self, filter_params: FilterParams) -> Callable:
        filter_params = filter_params or FilterParams()

        id = filter_params.get_as_nullable_string('id')
        ids = filter_params.get_as_object('ids')
        except_ids = filter_params.get_as_object('except_ids')
        roles = filter_params.get_as_object('roles')
        except_roles = filter_params.get_as_object('except_roles')

        # Process ids filter
        if isinstance(ids, str):
            ids = ids.split(',')
        if not isinstance(ids, list):
            ids = None

        # Process except ids filter
        if isinstance(except_ids, str):
            except_ids = except_ids.split(',')
        if isinstance(except_ids, list):
            except_ids = None

        # Process roles filter
        if isinstance(roles, str):
            roles = roles.split(',')
        if isinstance(roles, list):
            except_ids = None

        # Process except roles filter
        if isinstance(except_roles, str):
            except_roles = except_roles.split(',')
        if isinstance(except_roles, list):
            except_ids = None

        def inner(item):
            if id and item.id != id:
                return False
            if ids and ids.count(item.id) < 0:
                return False
            if except_ids and except_ids.count(item.id) >= 0:
                return False
            if roles and not self.__contains(roles, item.roles):
                return False
            if except_roles and self.__contains(except_roles, item.roles):
                return False

            return True

        return inner
示例#20
0
    def test_crud_operations(self):
        # Create one dummy
        dummy1 = self._client.create(None, DUMMY1)

        assert dummy1 is not None
        assert dummy1.id is not None
        assert DUMMY1.key == dummy1.key
        assert DUMMY1.content == dummy1.content

        # Create another dummy
        dummy2 = self._client.create(None, DUMMY2)

        assert dummy2 is not None
        assert dummy2.id is not None
        assert DUMMY2.key == dummy2.key
        assert DUMMY2.content == dummy2.content

        # Get all dummies
        dummies = self._client.get_page_by_filter(None, FilterParams(),
                                                  PagingParams(0, 5, False))
        assert dummies is not None
        assert len(dummies.data) >= 2

        # Update the dummy
        dummy1.content = "Updated Content 1"
        dummy = self._client.update(None, dummy1)

        assert dummy is not None
        assert dummy1.id == dummy.id
        assert dummy1.key == dummy.key
        assert "Updated Content 1" == dummy.content

        # Delete the dummy
        self._client.delete_by_id(None, dummy1.id)

        # Try to get deleted dummy
        dummy = self._client.get_one_by_id(None, dummy1.id)
        assert dummy is None

        # Check correlation id
        result = self._client.check_correlation_id('test_cor_id')
        assert result is not None
        assert 'test_cor_id' == result
示例#21
0
    def compose_filter(self, filter):
        filter = filter or FilterParams()
        criteria = []

        id = filter.get_as_nullable_string("id")
        if id is not None:
            criteria.append({"_id": id})
        site_id = filter.get_as_nullable_string("site_id")
        if site_id is not None:
            criteria.append({"site_id": site_id})
        label = filter.get_as_nullable_string("label")
        if label is not None:
            criteria.append({"label": label})
        udi = filter.get_as_nullable_string("udi")
        if udi is not None:
            criteria.append({"udi": udi})
        udis = filter.get_as_object("udis")
        if udis is not None and len(udis) > 0:
            udis = udis.split(",")
            criteria.append({"udi": {"$in": udis}})
        return {"$and": criteria} if len(criteria) > 0 else None
    def __compose_filter(self, filter_params: FilterParams) -> Callable:
        filter_params = filter_params or FilterParams()

        search = filter_params.get_as_nullable_string('search')
        id = filter_params.get_as_nullable_string('id')
        code = filter_params.get_as_nullable_string('code')
        active = filter_params.get_as_nullable_boolean('active')
        deleted = filter_params.get_as_boolean_with_default('deleted', False)

        def inner(item):
            if id and item.id != id:
                return False
            if code and item.code != code:
                return False
            if active and item.active != active:
                return False
            if not deleted and item.deleted:
                return False
            if search and not self.__match_search(item, search):
                return False

            return True

        return inner
示例#23
0
 def get_page_by_filter(self, correlation_id, filter, paging):
     filter = filter or FilterParams()
     return super(BeaconsMongoDbPersistence,
                  self).get_page_by_filter(correlation_id,
                                           self.compose_filter(filter),
                                           paging, None, None)