def forward_references(row, table, keys, aliases): foreign_keys = table.foreign_keys() alias = aliases.get(table.name, table.name) refs = [] for key in keys: k = key.replace('{0}_'.format(alias), '', 1) if key in foreign_keys: # Key is a foreign key column fk = foreign_keys[key] autocomplete = fk.b.table.autocomplete_(fk.b.name, row[tostring(key)]) elif table.column(k).primary_key: # Key is a simple column, but primary key autocomplete = table.autocomplete_(k, row[tostring(key)], OPTION_URI_SINGLE_ROW_FORMAT) else: # Key is a simple column autocomplete = table.autocomplete_( k, row[tostring(key)], OPTION_URI_MULTIPLE_ROWS_FORMAT) f = foreign_key_or_column(table, k) kind = KIND_VALUE if f.__class__.__name__ == 'ForeignKey': kind = KIND_FOREIGN_KEY refs.append(Value(row[tostring(key)], str(f), autocomplete, True, kind)) return refs
def forward_references(row, table, keys, aliases): foreign_keys = table.foreign_keys() alias = aliases.get(table.name, table.name) refs = [] for key in keys: k = key.replace('{0}_'.format(alias), '', 1) if key in foreign_keys: # Key is a foreign key column fk = foreign_keys[key] autocomplete = fk.b.table.autocomplete_( fk.b.name, row[tostring(key)]) elif table.column(k).primary_key: # Key is a simple column, but primary key autocomplete = table.autocomplete_( k, row[tostring(key)], OPTION_URI_SINGLE_ROW_FORMAT) else: # Key is a simple column autocomplete = table.autocomplete_( k, row[tostring(key)], OPTION_URI_MULTIPLE_ROWS_FORMAT) f = foreign_key_or_column(table, k) kind = KIND_VALUE if f.__class__.__name__ == 'ForeignKey': kind = KIND_FOREIGN_KEY refs.append(Value( row[tostring(key)], str(f), autocomplete, True, kind)) return refs
def back_references(row, table, aliases): foreign_keys = table.foreign_keys() refs = [] for key in sorted( foreign_keys, key=lambda k: foreign_keys[k].a.table.name): fk = foreign_keys[key] if fk.b.table.name == table.name: autocomplete = fk.a.table.autocomplete_( fk.a.name, row['{0}_{1}'.format( aliases.get(fk.b.table.name, fk.b.table.name), fk.b.name)], OPTION_URI_MULTIPLE_ROWS_FORMAT) logger.debug( 'table.name=%s, fk=%s, autocomplete=%s', table.name, fk, autocomplete) refs.append( Value( fk.a, str(foreign_key_or_column(fk.a.table, fk.a.name)), autocomplete, False, KIND_FOREIGN_VALUE)) return refs
def test_foreign_key_or_column(self): """Tests the utils.foreign_key_or_column function""" con = DbTestCase.connection user = con.table('user') article = con.table('article') self.assertEqual( user.column('id'), utils.foreign_key_or_column(user, 'id') ) self.assertEqual( article.foreign_key('user_id'), utils.foreign_key_or_column(article, 'user_id') ) self.assertEqual( None, utils.foreign_key_or_column(article, 'foo') )
def back_references(row, table, aliases): foreign_keys = table.foreign_keys() refs = [] for key in sorted(foreign_keys, key=lambda k: foreign_keys[k].a.table.name): fk = foreign_keys[key] if fk.b.table.name == table.name: autocomplete = fk.a.table.autocomplete_( fk.a.name, row['{0}_{1}'.format( aliases.get(fk.b.table.name, fk.b.table.name), fk.b.name)], OPTION_URI_MULTIPLE_ROWS_FORMAT) logger.debug('table.name=%s, fk=%s, autocomplete=%s', table.name, fk, autocomplete) refs.append( Value(fk.a, str(foreign_key_or_column(fk.a.table, fk.a.name)), autocomplete, False, KIND_FOREIGN_VALUE)) return refs