def get(self): """Handle a GET request.""" # pylint: disable=unexpected-keyword-arg # Memoize all project and job names. _ = data_handler.get_all_project_names(__memoize_force__=True) _ = data_handler.get_all_job_type_names(__memoize_force__=True) # Memoize both variants of get_all_fuzzer_names_including_children. _ = data_handler.get_all_fuzzer_names_including_children( include_parents=True, __memoize_force__=True) _ = data_handler.get_all_fuzzer_names_including_children( __memoize_force__=True) # Memoize expensive testcase attribute calls. for testcase_id in data_handler.get_open_testcase_id_iterator(): try: testcase = data_handler.get_testcase_by_id(testcase_id) except errors.InvalidTestcaseError: # Already deleted. continue blobs.get_blob_size(testcase.fuzzed_keys) blobs.get_blob_size(testcase.minimized_keys) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('OK') self.response.set_status(200)
def get(self): """Get the HTML page.""" key = self.request.get('key') if not key: raise helpers.EarlyExitException('No key provided.', 400) testcase_id = self.request.get('testcase_id') if testcase_id: testcase = helpers.get_testcase(testcase_id) if not access.can_user_access_testcase(testcase): raise helpers.AccessDeniedException() if key not in [testcase.fuzzed_keys, testcase.minimized_keys]: raise helpers.AccessDeniedException() else: if not access.has_access(): raise helpers.AccessDeniedException() if blobs.get_blob_size(key) > MAX_ALLOWED_CONTENT_SIZE: raise helpers.EarlyExitException( 'Content exceeds max allowed size.', 400) try: content = unicode(blobs.read_key(key), errors='replace') except Exception: raise helpers.EarlyExitException('Failed to read content.', 400) line_count = len(content.splitlines()) size = len(content) title = '%s, %s' % (utils.get_line_count_string(line_count), utils.get_size_string(size)) self.render('viewer.html', {'content': content, 'title': title})
def _get_blob_size_string(blob_key): """Return blob size string.""" blob_size = blobs.get_blob_size(blob_key) if blob_size is None: return None return utils.get_size_string(blob_size)
def _get_blob_size_string(blob_key): """Return blob size string.""" if not blob_key or blob_key == 'NA': return '' try: blob_size = blobs.get_blob_size(blob_key) if blob_size is None: return '' except: return '' return utils.get_size_string(blob_size)
def get(self): """Get the HTML page.""" key = request.get('key') if not key: raise helpers.EarlyExitException('No key provided.', 400) testcase_id = request.get('testcase_id') if testcase_id: testcase = helpers.get_testcase(testcase_id) if not access.can_user_access_testcase(testcase): raise helpers.AccessDeniedException() if key not in [testcase.fuzzed_keys, testcase.minimized_keys]: raise helpers.AccessDeniedException() else: if not access.has_access(): raise helpers.AccessDeniedException() blob_size = blobs.get_blob_size(key) if blob_size > MAX_ALLOWED_CONTENT_SIZE: raise helpers.EarlyExitException( 'Content exceeds max allowed size.', 400) # TODO(mbarbella): Workaround for an issue in the Cloud Storage API. Remove # once it is fixed properly upstream: # https://github.com/googleapis/google-cloud-python/issues/6572 if blob_size: try: content = blobs.read_key(key).decode('utf-8', errors='replace') except Exception: raise helpers.EarlyExitException('Failed to read content.', 400) else: content = u'' line_count = len(content.splitlines()) size = len(content) title = '%s, %s' % (utils.get_line_count_string(line_count), utils.get_size_string(size)) return self.render('viewer.html', {'content': content, 'title': title})
def test_get_blob_size_legacy(self): """Test get_gcs_path for legacy files.""" self.assertEqual(123, blobs.get_blob_size('legacyblobkey'))
def test_get_blob_size_gcs(self): """Test get_gcs_path for GCS files.""" self.assertEqual(456, blobs.get_blob_size(TEST_UUID))
def test_get_blob_size_invalid(self): """Test get_blob_size for invalid blob.""" self.assertEqual(None, blobs.get_blob_size(None)) self.assertEqual(None, blobs.get_blob_size('NA')) self.assertEqual(None, blobs.get_blob_size(''))