def main(args, stdout, stderr): ''' Parses the arguments and prepares each cache. ''' arguments = _parse_args(args, _load_defaults()) try: _save_defaults(arguments) caches = Caches(site=GeocachingSite(user=arguments.user, password=arguments.password), parser=PageParser(table_parser=TableParser(), description_parser=DescriptionParser()), factory=WorksheetFactory(keyfile=arguments.keyfile)) # TODO(KNR): can I prevent argparse from returning a list of lists? for codes in arguments.cache_codes: caches.prepare(codes=codes) except Exception: traceback.print_exc()
def test_prepares_a_cache(self, publish_mock, factory_mock, parser_mock, site_mock): code = 'ABCDEF' name = 'foo' site_mock.fetch = MagicMock(return_value='<html></html>') stages_mock = MagicMock() parser_mock.parse = MagicMock(return_value={'name': name, 'stages': stages_mock}) caches = Caches(site=site_mock, parser=parser_mock, factory=factory_mock) caches.prepare([code]) self.assertTrue(site_mock.fetch.called) self.assertEqual(site_mock.mock_calls, [call.fetch(code=code)]) self.assertTrue(parser_mock.parse.called) self.assertIn(call.parse(page=site_mock.fetch.return_value), parser_mock.mock_calls) self.assertTrue(publish_mock.called) self.assertEqual(publish_mock.mock_calls, [call.publish_mock(name=name, stages=stages_mock, factory=factory_mock)])