def test_retry_with_success(): failing_fn = fail_for_n_function(3) fn = retry.Retry(failing_fn, FailException) fn('hello', retry_timedelta=datetime.timedelta(days=1), retry_sleep_base=0.001) assert fn.num_iters == 3
def test_retry_with_timeout(): failing_fn = fail_for_n_function(10000) fn = retry.Retry(failing_fn, FailException) with pytest.raises(FailException): fn('hello', retry_timedelta=datetime.timedelta(0, 0, 0, 50), retry_sleep_base=0.001)
def test_retry_with_noauth(capsys): def fail(): res = requests.Response() res.status_code = 401 raise retry.TransientException(exc=requests.HTTPError(response=res)) fn = retry.Retry(fail, check_retry_fn=util.no_retry_auth) with pytest.raises(CommError): fn()
def test_retry_with_noauth_403(capsys): def fail(): res = requests.Response() res.status_code = 403 raise retry.TransientException(exc=requests.HTTPError(response=res)) fn = retry.Retry(fail, check_retry_fn=util.no_retry_auth) with pytest.raises(CommError) as excinfo: fn() assert excinfo.value.message == 'Permission denied, ask the project owner to grant you access'
def test_retry_with_noauth_401(capsys): def fail(): res = requests.Response() res.status_code = 401 raise retry.TransientException(exc=requests.HTTPError(response=res)) fn = retry.Retry(fail, check_retry_fn=util.no_retry_auth) with pytest.raises(CommError) as excinfo: fn() assert excinfo.value.message == 'Invalid or missing api_key. Run wandb login'
def __init__(self, default_settings=None, load_settings=True, retry_timedelta=datetime.timedelta(days=1), environ=os.environ): self._environ = environ self.default_settings = { 'section': "default", 'run': "latest", 'git_remote': "origin", 'ignore_globs': [], 'base_url': "https://api.wandb.ai" } self.retry_timedelta = retry_timedelta self.default_settings.update(default_settings or {}) self._settings = None self.retry_uploads = 10 self.settings_parser = configparser.ConfigParser() if load_settings: potential_settings_paths = [ os.path.expanduser('~/.wandb/settings') ] potential_settings_paths.append( os.path.join(wandb_dir(), 'settings')) files = self.settings_parser.read(potential_settings_paths) self.settings_file = files[0] if len(files) > 0 else "Not found" else: self.settings_file = "Not found" self.git = GitRepo(remote=self.settings("git_remote")) # Mutable settings set by the _file_stream_api self.dynamic_settings = { 'system_sample_seconds': 2, 'system_samples': 15, 'heartbeat_seconds': 30, } self.client = Client(transport=RequestsHTTPTransport( headers={ 'User-Agent': self.user_agent, 'X-WANDB-USERNAME': env.get_username(env=self._environ) }, use_json=True, # this timeout won't apply when the DNS lookup fails. in that case, it will be 60s # https://bugs.python.org/issue22889 timeout=self.HTTP_TIMEOUT, auth=("api", self.api_key or ""), url='%s/graphql' % self.settings('base_url'))) self.gql = retry.Retry( self.execute, retry_timedelta=retry_timedelta, check_retry_fn=util.no_retry_auth, retryable_exceptions=(RetryError, requests.RequestException)) self._current_run_id = None self._file_stream_api = None
def __init__(self, default_settings=None, load_settings=True, retry_timedelta=datetime.timedelta(days=1)): self.default_settings = { 'section': "default", 'entity': "models", 'run': "latest", 'git_remote': "origin", 'git_tag': False, 'base_url': "https://api.wandb.ai" } self.retry_timedelta = retry_timedelta self.default_settings.update(default_settings or {}) self._settings = None self.retries = 3 self._settings_parser = configparser.ConfigParser() self.tagged = False if load_settings: potential_settings_paths = [ os.path.expanduser('~/.wandb/settings') ] potential_settings_paths.append( os.path.join(wandb_dir(), 'settings')) files = self._settings_parser.read(potential_settings_paths) self.settings_file = files[0] if len(files) > 0 else "Not found" else: self.settings_file = "Not found" self.git = GitRepo(remote=self.settings("git_remote")) client = Client(retries=1, transport=RequestsHTTPTransport( headers={'User-Agent': self.user_agent}, use_json=True, timeout=self.HTTP_TIMEOUT, auth=("api", self.api_key), url='%s/graphql' % self.settings('base_url'))) # 1-day worth of retry self.gql = retry.Retry(client.execute, retry_timedelta=retry_timedelta, retryable_exceptions=(RetryError, requests.HTTPError)) self._current_run_id = None self._file_stream_api = None