Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
    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')
        )
Exemple #5
0
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