예제 #1
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')
        )
예제 #2
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
예제 #3
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