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))
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))
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
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))
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))
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)
def test_get_query(): assert not get_query(None) assert get_query(dict(query='{"a": "b"}')) == {'a': 'b'}
def test_get_query_bad(arguments): with pytest.raises(ValueError): get_query(arguments)