def setUp(self): mock_server = Server(utils.MockPGServerConnection()) db = Database(mock_server, mock_server.maintenance_db_name) mock_server._child_objects[ Database.__name__] = self._as_node_collection([db]) mock_server._search_path = self._as_node_collection([MYSCHEMA]) self.schema1 = Schema(mock_server, db, MYSCHEMA) self.schema2 = Schema(mock_server, db, MYSCHEMA2) db._schemas = self._as_node_collection([self.schema1, self.schema2]) self.mock_server = mock_server self.executor: MetadataExecutor = MetadataExecutor(mock_server)
def refresh_casing(completer: PGCompleter or MySQLCompleter, metadata_executor: MetadataExecutor): casing_file = completer.casing_file if not casing_file: return generate_casing_file = completer.generate_casing_file if generate_casing_file and not os.path.isfile(casing_file): casing_prefs = '\n'.join(metadata_executor.casing()) with open(casing_file, 'w') as f: f.write(casing_prefs) if os.path.isfile(casing_file): with open(casing_file, 'r') as f: completer.extend_casing([line.strip() for line in f])
def _bg_refresh(self, callbacks, history=None, settings=None): settings = settings or {} completer: PGCompleter or MySQLCompleter = COMPLETER_MAP[ self.connection._provider_name](smart_completion=True, settings=settings) self.server.refresh() metadata_executor = MetadataExecutor(self.server) # If callbacks is a single function then push it into a list. if callable(callbacks): callbacks = [callbacks] try: while True: for do_refresh in self.refreshers.values(): do_refresh(completer, metadata_executor) if self._restart_refresh.is_set(): self._restart_refresh.clear() break else: # Break out of while loop if the for loop finishes natually # without hitting the break statement. break # Start over the refresh from the beginning if the for loop hit the # break statement. continue # Load history into completer so it can learn user preferences n_recent = 100 if history: for recent in history[-n_recent:]: completer.extend_query_history(recent, is_init=True) except Exception as e: if self.logger: self.logger.exception('Error during metadata refresh: {0}', e) for callback in callbacks: callback(completer) if self._restart_refresh.is_set(): self._restart_refresh.clear()
def test_tables(self): # Given 2 tables in the database expected_table_tuples = [] for x in range(0, 3): s1_table_name = 's1_t%s' % x s2_table_name = 's2_t%s' % x expected_table_tuples.append( tuple([self.schema1.name, s1_table_name])) expected_table_tuples.append( tuple([self.schema2.name, s2_table_name])) cursor = MockCursor(expected_table_tuples) mock_server = Server(utils.MockPGServerConnection(cursor)) executor: MetadataExecutor = MetadataExecutor(mock_server) # When I query tables actual_table_tuples = executor.tables() # I expect to get 2 tables from the executor self.assertEqual(len(expected_table_tuples), len(actual_table_tuples)) for expected in expected_table_tuples: self.assertTrue(expected in actual_table_tuples)
def refresh_functions(completer: PGCompleter or MySQLCompleter, metadata_executor: MetadataExecutor): completer.extend_functions(metadata_executor.functions())
def refresh_databases(completer: PGCompleter or MySQLCompleter, metadata_executor: MetadataExecutor): completer.extend_database_names(metadata_executor.databases())
def refresh_views(completer: PGCompleter or MySQLCompleter, metadata_executor: MetadataExecutor): completer.extend_relations(metadata_executor.views(), kind='views') completer.extend_columns(metadata_executor.view_columns(), kind='views')
def refresh_tables(completer: PGCompleter or MySQLCompleter, metadata_executor: MetadataExecutor): completer.extend_relations(metadata_executor.tables(), kind='tables') completer.extend_columns(metadata_executor.table_columns(), kind='tables') completer.extend_foreignkeys(metadata_executor.foreignkeys())
def refresh_schemata(completer: PGCompleter or MySQLCompleter, metadata_executor: MetadataExecutor): completer.set_search_path(metadata_executor.search_path()) completer.extend_schemata(metadata_executor.schemata())