Exemplo n.º 1
0
    def get(self, uid=None):
        if not uid:
            paging, success = get_paging(request.args)
            if not success:
                return error_message(paging, self.URL, request_data=request.args)
            offset, limit = paging

            try:
                query = get_query(request.args)
            except ValueError as value_error:
                return error_message(str(value_error), self.URL, request_data=dict(query=request.args.get('query')))

            try:
                with ConnectTo(FrontEndDbInterface, self.config) as connection:
                    uids = connection.rest_get_file_object_uids(offset=offset, limit=limit, query=query)

                return success_message(dict(uids=uids), self.URL, dict(offset=offset, limit=limit, query=query))
            except Exception:
                return error_message('Unknown exception on request', self.URL, dict(offset=offset, limit=limit, query=query))
        else:
            with ConnectTo(FrontEndDbInterface, self.config) as connection:
                file_object = connection.get_file_object(uid)
            if not file_object:
                return error_message('No file object with UID {} found'.format(uid), self.URL, dict(uid=uid))

            fitted_file_object = self._fit_file_object(file_object)
            return success_message(dict(file_object=fitted_file_object), self.URL, request_data=dict(uid=uid))
Exemplo n.º 2
0
    def get(self, uid=None):
        if not uid:
            paging, success = get_paging(request.args)
            if not success:
                return error_message(paging, self.URL, request_data=request.args)
            offset, limit = paging

            try:
                recursive = get_recursive(request.args)
                query = get_query(request.args)
            except ValueError as value_error:
                return error_message(str(value_error), self.URL, request_data=dict(query=request.args.get('query'), recursive=request.args.get('recursive')))
            if recursive and not query:
                return error_message('recursive search is only permissible with non-empty query', self.URL, request_data=dict(query=request.args.get('query'), recursive=request.args.get('recursive')))

            try:
                with ConnectTo(FrontEndDbInterface, self.config) as connection:
                    uids = connection.rest_get_firmware_uids(offset=offset, limit=limit, query=query, recursive=recursive)

                return success_message(dict(uids=uids), self.URL, dict(offset=offset, limit=limit, query=query, recursive=recursive))
            except Exception:
                return error_message('Unknown exception on request', self.URL, dict(offset=offset, limit=limit, query=query, recursive=recursive))
        else:
            summary = get_summary_flag(request.args)
            if summary:
                with ConnectTo(FrontEndDbInterface, self.config) as connection:
                    firmware = connection.get_complete_object_including_all_summaries(uid)
            else:
                with ConnectTo(FrontEndDbInterface, self.config) as connection:
                    firmware = connection.get_firmware(uid)
            if not firmware or not isinstance(firmware, Firmware):
                return error_message('No firmware with UID {} found'.format(uid), self.URL, dict(uid=uid))

            fitted_firmware = self._fit_firmware(firmware)
            return success_message(dict(firmware=fitted_firmware), self.URL, request_data=dict(uid=uid))
Exemplo n.º 3
0
 def _get_parameters_from_request(request_parameters):
     query = get_query(request_parameters)
     recursive = get_recursive_flag(request_parameters)
     inverted = get_inverted_flag(request_parameters)
     offset, limit = get_paging(request.args)
     if recursive and not query:
         raise ValueError(
             'Recursive search is only permissible with non-empty query')
     if inverted and not recursive:
         raise ValueError('Inverted flag can only be used with recursive')
     return query, recursive, inverted, offset, limit
Exemplo n.º 4
0
    def _get_without_uid(self):
        paging, success = get_paging(request.args)
        if not success:
            return error_message(paging, self.URL, request_data=request.args)
        offset, limit = paging

        try:
            query = get_query(request.args)
        except ValueError as value_error:
            return error_message(str(value_error), self.URL, request_data=dict(query=request.args.get('query')))

        try:
            with ConnectTo(FrontEndDbInterface, self.config) as connection:
                uids = connection.rest_get_file_object_uids(offset=offset, limit=limit, query=query)

            return success_message(dict(uids=uids), self.URL, dict(offset=offset, limit=limit, query=query))
        except Exception:
            return error_message('Unknown exception on request', self.URL, dict(offset=offset, limit=limit, query=query))
Exemplo n.º 5
0
    def _get_without_uid(self):
        paging, success = get_paging(request.args)
        if not success:
            return error_message(paging, self.URL, request_data=request.args)
        offset, limit = paging

        try:
            recursive = get_recursive(request.args)
            query = get_query(request.args)
        except ValueError as value_error:
            return error_message(str(value_error),
                                 self.URL,
                                 request_data=dict(
                                     query=request.args.get('query'),
                                     recursive=request.args.get('recursive')))
        if recursive and not query:
            return error_message(
                'recursive search is only permissible with non-empty query',
                self.URL,
                request_data=dict(query=request.args.get('query'),
                                  recursive=request.args.get('recursive')))

        try:
            with ConnectTo(FrontEndDbInterface, self.config) as connection:
                uids = connection.rest_get_firmware_uids(offset=offset,
                                                         limit=limit,
                                                         query=query,
                                                         recursive=recursive)

            return success_message(
                dict(uids=uids), self.URL,
                dict(offset=offset,
                     limit=limit,
                     query=query,
                     recursive=recursive))
        except Exception:
            return error_message(
                'Unknown exception on request', self.URL,
                dict(offset=offset,
                     limit=limit,
                     query=query,
                     recursive=recursive))
Exemplo n.º 6
0
    def _get_without_uid(self):
        try:
            query = get_query(request.args)
            offset, limit = get_paging(request.args)
        except ValueError as value_error:
            request_data = {
                k: request.args.get(k)
                for k in ['query', 'limit', 'offset']
            }
            return error_message(str(value_error),
                                 self.URL,
                                 request_data=request_data)

        parameters = dict(offset=offset, limit=limit, query=query)
        try:
            with ConnectTo(FrontEndDbInterface, self.config) as connection:
                uids = connection.rest_get_file_object_uids(**parameters)
            return success_message(dict(uids=uids), self.URL, parameters)
        except PyMongoError:
            return error_message('Unknown exception on request', self.URL,
                                 parameters)
Exemplo n.º 7
0
def test_get_paging_success():
    paging, success = get_paging(dict(offset=0, limit=1))
    assert success and paging == (0, 1)

    paging, success = get_paging(dict(offset='0', limit='1'))
    assert success and paging == (0, 1)
Exemplo n.º 8
0
def test_get_paging_bad_arguments(arguments):
    offset, limit = arguments
    paging, success = get_paging(dict(offset=offset, limit=limit))
    assert not success
Exemplo n.º 9
0
def test_get_paging_success(request_args):
    offset, limit = get_paging(request_args)
    assert (offset, limit) == (0, 1)
Exemplo n.º 10
0
def test_get_paging_bad_arguments(offset, limit):
    with pytest.raises(ValueError):
        _ = get_paging(dict(offset=offset, limit=limit))