def check_credentials(self): api = NYT(self.key_input) if api.api_key_valid(): self.save_credentials() else: api = None self.api = api
class NYTTestsApiValidErrorRaising(unittest.TestCase): API_KEY = 'api_key' def setUp(self): self.nyt = NYT(self.API_KEY) def test_api_key_valid_errors(self): errors = [ HTTPError(None, 429, None, None, None), URLError(''), HTTPException(), ] for e in errors: with patch('urllib.request.urlopen', Mock(side_effect=e)): self.assertFalse(self.nyt.api_key_valid())
class NYTTests(unittest.TestCase): API_KEY = 'api_key' def setUp(self): # NamedTemporaryFile actually creates and opens the file. On windows you can not open it a second time. # More: https://docs.python.org/3.8/library/tempfile.html#tempfile.NamedTemporaryFile self.tmp = tempfile.NamedTemporaryFile(delete=False) self.tmp.close() os.unlink(self.tmp.name) self.nyt = NYT(self.API_KEY) self.nyt.cache_path = self.tmp.name def tearDown(self): cache_path = f'{self.nyt.cache_path}.db' self.tmp.close() if os.path.exists(cache_path): os.unlink(cache_path) def test_nyt_key(self): self.assertTrue(self.nyt.api_key_valid()) def test_nyt_query_keywords(self): c = self.nyt.search('slovenia', max_docs=10) self.assertIsInstance(c, Corpus) self.assertEqual(len(c), 10) def test_nyt_query_date_range(self): from_date = datetime.date(2013, 1, 1) to_date = datetime.date(2014, 1, 1) corpus = self.nyt.search('slovenia', from_date, to_date, max_docs=10) self.assertEqual(len(corpus), 10) time_index = next(i for i, (var, _) in enumerate(NYT.metas) if isinstance(var, TimeVariable)) tv = corpus.domain.metas[time_index] for doc in corpus: date = tv.repr_val(doc.metas[time_index]) date = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S').date() self.assertGreaterEqual(date, from_date) self.assertLessEqual(date, to_date) def test_nyt_query_max_records(self): c = self.nyt.search('slovenia', max_docs=25) self.assertEqual(len(c), 25) def test_nyt_corpus_domain_generation(self): corpus = self.nyt.search('slovenia', max_docs=10) for var, _ in NYT.attributes: self.assertIn(var, corpus.domain.attributes) for var, _ in NYT.class_vars: self.assertIn(var, corpus.domain.class_vars) for var, _ in NYT.metas: self.assertIn(var, corpus.domain.metas) def test_nyt_result_caching(self): self.nyt._fetch_page('slovenia', None, None, 0) # assure in cache _, go_sleep = self.nyt._fetch_page('slovenia', None, None, 0) self.assertFalse(go_sleep) def test_nyt_sleep(self): self.nyt.search('slovenia', max_docs=25) with patch('time.sleep', Mock()) as sleep: self.nyt.search('slovenia', max_docs=25) self.assertEqual(sleep.call_count, 0) def test_on_progress(self): n_calls = 0 def on_progress(progress, max_docs): nonlocal n_calls n_calls += 1 self.assertEqual(max_docs, 25) self.nyt.search('slovenia', max_docs=25, on_progress=on_progress) self.assertEqual(n_calls, 3) def test_break(self): def should_break(): return True c = self.nyt.search('slovenia', max_docs=25, should_break=should_break) self.assertEqual(len(c), BATCH_SIZE)
class NYTTests(unittest.TestCase): API_KEY = 'api_key' def setUp(self): self.tmp = tempfile.NamedTemporaryFile(delete=False) os.remove(self.tmp.name) self.nyt = NYT(self.API_KEY) self.nyt.cache_path = self.tmp.name def tearDown(self): if os.path.exists(self.tmp.name): os.remove(self.tmp.name) def test_nyt_key(self): self.assertTrue(self.nyt.api_key_valid()) def test_nyt_query_keywords(self): c = self.nyt.search('slovenia', max_docs=10) self.assertIsInstance(c, Corpus) self.assertEqual(len(c), 10) def test_nyt_query_date_range(self): from_date = datetime.date(2013, 1, 1) to_date = datetime.date(2014, 1, 1) corpus = self.nyt.search('slovenia', from_date, to_date, max_docs=10) self.assertEqual(len(corpus), 10) time_index = next(i for i, (var, _) in enumerate(NYT.metas) if isinstance(var, TimeVariable)) tv = corpus.domain.metas[time_index] for doc in corpus: date = tv.repr_val(doc.metas[time_index]) date = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S').date() self.assertGreaterEqual(date, from_date) self.assertLessEqual(date, to_date) def test_nyt_query_max_records(self): c = self.nyt.search('slovenia', max_docs=25) self.assertEqual(len(c), 25) def test_nyt_corpus_domain_generation(self): corpus = self.nyt.search('slovenia', max_docs=10) for var, _ in NYT.attributes: self.assertIn(var, corpus.domain.attributes) for var, _ in NYT.class_vars: self.assertIn(var, corpus.domain.class_vars) for var, _ in NYT.metas: self.assertIn(var, corpus.domain.metas) def test_nyt_result_caching(self): self.nyt._fetch_page('slovenia', None, None, 0) # assure in cache _, is_cached = self.nyt._fetch_page('slovenia', None, None, 0) self.assertTrue(is_cached) def test_on_progress(self): n_calls = 0 def on_progress(progress, max_docs): nonlocal n_calls n_calls += 1 self.assertEqual(max_docs, 25) self.nyt.search('slovenia', max_docs=25, on_progress=on_progress) self.assertEqual(n_calls, 3) def test_break(self): def should_break(): return True c = self.nyt.search('slovenia', max_docs=25, should_break=should_break) self.assertEqual(len(c), BATCH_SIZE)