def get(self): """Get information of all uploaded test results. Get information of all uploaded test results in descending chronological order. Make it possible to specify some input parameters for filtering. For example: /v1/results?page=<page number>&cpid=1234. By default, page is set to page number 1, if the page parameter is not specified. """ expected_input_params = [const.START_DATE, const.END_DATE, const.CPID, const.SIGNED] filters = api_utils.parse_input_params(expected_input_params) records_count = db.get_test_records_count(filters) page_number, total_pages_number = api_utils.get_page_number(records_count) try: per_page = CONF.api.results_per_page results = db.get_test_records(page_number, per_page, filters) for result in results: result.update({"url": parse.urljoin(CONF.ui_url, CONF.api.test_results_url) % result["id"]}) page = {"results": results, "pagination": {"current_page": page_number, "total_pages": total_pages_number}} except Exception as ex: LOG.debug("An error occurred during " "operation with database: %s" % ex) pecan.abort(400) return page
def test_get_page_number_success(self, mock_request): per_page = 20 total_records = 100 self.CONF.set_override("results_per_page", per_page, "api") mock_request.GET = {const.PAGE: "2"} page_number, total_pages = api_utils.get_page_number(total_records) self.assertEqual(page_number, 2) self.assertEqual(total_pages, total_records / per_page)
def test_get_page_number_success(self, mock_request): per_page = 20 total_records = 100 self.CONF.set_override('results_per_page', per_page, 'api') mock_request.GET = {const.PAGE: '2'} page_number, total_pages = api_utils.get_page_number(total_records) self.assertEqual(page_number, 2) self.assertEqual(total_pages, total_records / per_page)
def get(self): """ Get information of all uploaded test results in descending chronological order. Make it possible to specify some input parameters for filtering. For example: /v1/results?page=<page number>&cpid=1234. By default, page is set to page number 1, if the page parameter is not specified. """ expected_input_params = [ const.START_DATE, const.END_DATE, const.CPID, ] try: filters = api_utils.parse_input_params(expected_input_params) records_count = db.get_test_records_count(filters) page_number, total_pages_number = \ api_utils.get_page_number(records_count) except api_utils.ParseInputsError as ex: pecan.abort(400, 'Reason: %s' % ex) except Exception as ex: LOG.debug('An error occurred: %s' % ex) pecan.abort(500) try: per_page = CONF.api.results_per_page records = db.get_test_records(page_number, per_page, filters) results = [] for r in records: results.append({ 'test_id': r.id, 'created_at': r.created_at, 'cpid': r.cpid, 'url': CONF.api.test_results_url % r.id }) page = { 'results': results, 'pagination': { 'current_page': page_number, 'total_pages': total_pages_number } } except Exception as ex: LOG.debug('An error occurred during ' 'operation with database: %s' % ex) pecan.abort(400) return page
def get(self): """ Get information of all uploaded test results in descending chronological order. Make it possible to specify some input parameters for filtering. For example: /v1/results?page=<page number>&cpid=1234. By default, page is set to page number 1, if the page parameter is not specified. """ expected_input_params = [ const.START_DATE, const.END_DATE, const.CPID, ] try: filters = api_utils.parse_input_params(expected_input_params) records_count = db.get_test_records_count(filters) page_number, total_pages_number = \ api_utils.get_page_number(records_count) except api_utils.ParseInputsError as ex: pecan.abort(400, 'Reason: %s' % ex) except Exception as ex: LOG.debug('An error occurred: %s' % ex) pecan.abort(500) try: per_page = CONF.api.results_per_page records = db.get_test_records(page_number, per_page, filters) results = [] for r in records: results.append({ 'test_id': r.id, 'created_at': r.created_at, 'cpid': r.cpid, 'url': CONF.api.test_results_url % r.id }) page = {'results': results, 'pagination': { 'current_page': page_number, 'total_pages': total_pages_number }} except Exception as ex: LOG.debug('An error occurred during ' 'operation with database: %s' % ex) pecan.abort(400) return page
def test_get_page_number_page_number_is_one(self, mock_request): per_page = 20 total_records = 100 self.CONF.set_override('results_per_page', per_page, 'api') mock_request.GET = { const.PAGE: '1' } page_number, total_pages = api_utils.get_page_number(total_records) self.assertEqual(page_number, 1) self.assertEqual(total_pages, total_records / per_page)
def get(self): """Get information of all uploaded test results. Get information of all uploaded test results in descending chronological order. Make it possible to specify some input parameters for filtering. For example: /v1/results?page=<page number>&cpid=1234. By default, page is set to page number 1, if the page parameter is not specified. """ expected_input_params = [ const.START_DATE, const.END_DATE, const.CPID, const.SIGNED ] filters = api_utils.parse_input_params(expected_input_params) records_count = db.get_test_records_count(filters) page_number, total_pages_number = \ api_utils.get_page_number(records_count) try: per_page = CONF.api.results_per_page results = db.get_test_records(page_number, per_page, filters) for result in results: result.update({'url': parse.urljoin( CONF.ui_url, CONF.api.test_results_url ) % result['id']}) cloud_id = result['cpid'] cloud = db.get_cloud(cloud_id) if cloud: result.update({'cloud_name': cloud['name'], 'cloud_description': cloud['description']}) page = {'results': results, 'pagination': { 'current_page': page_number, 'total_pages': total_pages_number }} except Exception as ex: LOG.debug('An error occurred during ' 'operation with database: %s' % ex) pecan.abort(400) return page
def get(self): """Get information of all uploaded test results. Get information of all uploaded test results in descending chronological order. Make it possible to specify some input parameters for filtering. For example: /v1/results?page=<page number>&cpid=1234. By default, page is set to page number 1, if the page parameter is not specified. """ expected_input_params = [ const.START_DATE, const.END_DATE, const.CPID, const.SIGNED, const.VERIFICATION_STATUS, const.PRODUCT_ID ] filters = api_utils.parse_input_params(expected_input_params) if const.PRODUCT_ID in filters: product = db.get_product(filters[const.PRODUCT_ID]) vendor_id = product['organization_id'] is_admin = (api_utils.check_user_is_foundation_admin() or api_utils.check_user_is_vendor_admin(vendor_id)) if is_admin: filters[const.ALL_PRODUCT_TESTS] = True elif not product['public']: pecan.abort(403, 'Forbidden.') records_count = db.get_test_records_count(filters) page_number, total_pages_number = \ api_utils.get_page_number(records_count) try: per_page = CONF.api.results_per_page results = db.get_test_records(page_number, per_page, filters) is_foundation = api_utils.check_user_is_foundation_admin() for result in results: if not (api_utils.check_owner(result['id']) or is_foundation): # Don't expose product info if the product is not public. if (result.get('product_version') and not result['product_version']['product_info'] ['public']): result['product_version'] = None # Only show all metadata if the user is the owner or a # member of the Foundation group. result['meta'] = { k: v for k, v in result['meta'].items() if k in MetadataController.rw_access_keys } result.update({ 'url': parse.urljoin(CONF.ui_url, CONF.api.test_results_url) % result['id'] }) page = { 'results': results, 'pagination': { 'current_page': page_number, 'total_pages': total_pages_number } } except Exception as ex: LOG.debug('An error occurred during ' 'operation with database: %s' % str(ex)) pecan.abort(500) return page