class TestDatabaseRecordReader(BaseDatabaseRecordTester): def setUp(self): self.fake_connection = FakeDatabaseConnection() self.reader = DatabaseRecordReader(self.fake_connection) def test_can_close(self): self.reader.close() self.assertTrue(self.fake_connection.closed) def test_row_factory_set(self): self.assertEqual(self.fake_connection.row_factory, self.reader._row_factory) def test_iter_latest_records_performs_correct_query(self): expected_query = ( ' SELECT * FROM records\n' ' WHERE id =\n' ' (SELECT id FROM records WHERE timestamp =\n' ' (SELECT max(timestamp) FROM records)) ORDER BY timestamp;' ) [_ for _ in self.reader.iter_latest_records()] self.assertEqual(self.fake_connection.execute.call_args[0][0].strip(), expected_query.strip()) def test_iter_latest_records_does_iter_records(self): records_to_get = [1, 2, 3] self.fake_connection.execute.return_value.__iter__.return_value = iter( records_to_get) records = [r for r in self.reader.iter_latest_records()] self.assertEqual(records, records_to_get) def test_iter_records_performs_correct_query(self): expected_query = ('SELECT * from records where id = ? ' 'ORDER BY timestamp') [_ for _ in self.reader.iter_records('fake_id')] self.assertEqual(self.fake_connection.execute.call_args[0][0].strip(), expected_query.strip()) def test_iter_records_does_iter_records(self): records_to_get = [1, 2, 3] self.fake_connection.execute.return_value.__iter__.return_value = iter( records_to_get) records = [r for r in self.reader.iter_records('fake_id')] self.assertEqual(records, records_to_get)
class HistorySubcommand(BasicCommand): def __init__(self, session, db_reader=None, output_stream_factory=None): super(HistorySubcommand, self).__init__(session) self._db_reader = db_reader self._output_stream_factory = output_stream_factory if output_stream_factory is None: self._output_stream_factory = OutputStreamFactory() def _connect_to_history_db(self): if self._db_reader is None: connection = DatabaseConnection(self._get_history_db_filename()) self._db_reader = DatabaseRecordReader(connection) def _close_history_db(self): self._db_reader.close() def _get_history_db_filename(self): filename = os.environ.get( HISTORY_FILENAME_ENV_VAR, DEFAULT_HISTORY_FILENAME) if not os.path.exists(filename): raise RuntimeError( 'Could not locate history. Make sure cli_history is set to ' 'enabled in the ~/.aws/config file' ) return filename def _should_use_color(self, parsed_globals): if parsed_globals.color == 'on': return True elif parsed_globals.color == 'off': return False return is_a_tty() and not is_windows def _get_output_stream(self, preferred_pager=None): if is_a_tty(): return self._output_stream_factory.get_pager_stream( preferred_pager) return self._output_stream_factory.get_stdout_stream()
class HistorySubcommand(BasicCommand): def __init__(self, session, db_reader=None, output_stream_factory=None): super(HistorySubcommand, self).__init__(session) self._db_reader = db_reader self._output_stream_factory = output_stream_factory if output_stream_factory is None: self._output_stream_factory = \ self._get_default_output_stream_factory() def _get_default_output_stream_factory(self): return OutputStreamFactory(self._session) def _connect_to_history_db(self): if self._db_reader is None: connection = DatabaseConnection(self._get_history_db_filename()) self._db_reader = DatabaseRecordReader(connection) def _close_history_db(self): self._db_reader.close() def _get_history_db_filename(self): filename = os.environ.get(HISTORY_FILENAME_ENV_VAR, DEFAULT_HISTORY_FILENAME) if not os.path.exists(filename): raise RuntimeError( 'Could not locate history. Make sure cli_history is set to ' 'enabled in the ~/.aws/config file') return filename def _should_use_color(self, parsed_globals): if parsed_globals.color == 'on': return True elif parsed_globals.color == 'off': return False return is_a_tty() and not is_windows def _get_output_stream(self): return self._output_stream_factory.get_output_stream()