def set_value(key, value, persist_across_reboots=False): """Set the value for a key. If |persist_across_restarts| is set, then the key won't be deleted even run.py is restarted. """ value_path = get_value_file_path(key) try: value_str = json_utils.dumps(value) except Exception: logs.log_error( 'Non-serializable value stored to cache key %s: "%s"' % (key, value)) return try: with open(value_path, 'wb') as f: f.write(value_str.encode()) except IOError: logs.log_error('Failed to write %s to persistent cache.' % key) if not persist_across_reboots: return persist_value_path = value_path + PERSIST_FILE_EXTENSION if os.path.exists(persist_value_path): return try: open(persist_value_path, 'wb').close() except IOError: logs.log_error( 'Failed to write presistent metadata file for cache key %s' % key)
def set_metadata(self, key, value, update_testcase=True): """Set metadata for a test case.""" self._ensure_metadata_is_cached() self.metadata_cache[key] = value self.additional_metadata = json_utils.dumps(self.metadata_cache) if update_testcase: self.put()
def delete_metadata(self, key, update_testcase=True): """Remove metadata key for a test case.""" self._ensure_metadata_is_cached() # Make sure that the key exists in cache. If not, no work to do here. if key not in self.metadata_cache: return del self.metadata_cache[key] self.additional_metadata = json_utils.dumps(self.metadata_cache) if update_testcase: self.put()
def test(self): """Tests json_utils.dumps with various primitive data types.""" self.assertEqual(json_utils.dumps('string'), '"string"') self.assertEqual(json_utils.dumps(True), 'true') self.assertEqual(json_utils.dumps(False), 'false') self.assertEqual(json_utils.dumps(-5), '-5') self.assertEqual(json_utils.dumps(0), '0') self.assertEqual(json_utils.dumps(10), '10') self.assertEqual(json_utils.dumps(12.0), '12.0') self.assertEqual( json_utils.dumps(datetime.datetime(2018, 2, 4, 1, 2, 3, 9)), '{"__type__": "datetime", "day": 4, "hour": 1, "microsecond": 9, ' '"minute": 2, "month": 2, "second": 3, "year": 2018}') self.assertEqual( json_utils.dumps(datetime.date(2018, 3, 20)), '{"__type__": "date", "day": 20, "month": 3, "year": 2018}')
def request(url, body=None, method=POST_METHOD, force_reauthorization=False, configuration=None): """Make an HTTP request to the specified URL.""" if configuration: authorization = _get_authorization(force_reauthorization, configuration) headers = { 'User-Agent': 'clusterfuzz-reproduce', 'Authorization': authorization } else: headers = {} http = httplib2.Http() request_body = json_utils.dumps(body) if body is not None else '' response, content = http.request(url, method=method, headers=headers, body=request_body) # If the server returns 401 we may need to reauthenticate. Try the request # a second time if this happens. if response.status == 401 and not force_reauthorization: return request(url, body, method=method, force_reauthorization=True, configuration=configuration) if AUTHORIZATION_HEADER in response: shell.create_directory(os.path.dirname(AUTHORIZATION_CACHE_FILE), create_intermediates=True) utils.write_data_to_file(response[AUTHORIZATION_HEADER], AUTHORIZATION_CACHE_FILE) return response, content