mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Preserve the order of TextColumns and ProseColumns.
This commit is contained in:
parent
c40324652e
commit
625aa19fbd
1 changed files with 23 additions and 6 deletions
|
@ -18,6 +18,8 @@ Columns have a info dictionary with these keys:
|
||||||
"""
|
"""
|
||||||
# XXX: Check if "gametext" is set correctly everywhere
|
# XXX: Check if "gametext" is set correctly everywhere
|
||||||
|
|
||||||
|
import operator
|
||||||
|
|
||||||
from sqlalchemy import Column, ForeignKey, MetaData, PrimaryKeyConstraint, Table
|
from sqlalchemy import Column, ForeignKey, MetaData, PrimaryKeyConstraint, Table
|
||||||
from sqlalchemy.ext.declarative import declarative_base, declared_attr
|
from sqlalchemy.ext.declarative import declarative_base, declared_attr
|
||||||
from sqlalchemy.ext.associationproxy import association_proxy
|
from sqlalchemy.ext.associationproxy import association_proxy
|
||||||
|
@ -63,10 +65,13 @@ class LanguageSpecific(object):
|
||||||
|
|
||||||
class LanguageSpecificColumn(object):
|
class LanguageSpecificColumn(object):
|
||||||
"""A column that will not appear in the table it's defined in, but in a related one"""
|
"""A column that will not appear in the table it's defined in, but in a related one"""
|
||||||
|
_ordering = [1]
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.args = args
|
self.args = args
|
||||||
self.plural = kwargs.pop('plural')
|
self.plural = kwargs.pop('plural')
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
|
self.order = self._ordering[0]
|
||||||
|
self._ordering[0] += 1
|
||||||
|
|
||||||
def makeSAColumn(self):
|
def makeSAColumn(self):
|
||||||
return Column(*self.args, **self.kwargs)
|
return Column(*self.args, **self.kwargs)
|
||||||
|
@ -1828,22 +1833,34 @@ def makeTextTable(object_table, name_plural, name_singular, columns, lazy):
|
||||||
return Strings
|
return Strings
|
||||||
|
|
||||||
for table in all_tables():
|
for table in all_tables():
|
||||||
text_columns = []
|
# Find all the language-specific columns, keeping them in the order they
|
||||||
prose_columns = []
|
# were defined
|
||||||
|
all_columns = []
|
||||||
for colname in dir(table):
|
for colname in dir(table):
|
||||||
column = getattr(table, colname)
|
column = getattr(table, colname)
|
||||||
|
if isinstance(column, LanguageSpecificColumn):
|
||||||
|
all_columns.append((colname, column))
|
||||||
|
all_columns.sort(key=lambda pair: pair[1].order)
|
||||||
|
|
||||||
|
# Break them into text and prose columns
|
||||||
|
text_columns = []
|
||||||
|
prose_columns = []
|
||||||
|
for colname, column in all_columns:
|
||||||
|
spec = colname, column.plural, column.makeSAColumn()
|
||||||
if isinstance(column, TextColumn):
|
if isinstance(column, TextColumn):
|
||||||
text_columns.append((colname, column.plural, column.makeSAColumn()))
|
text_columns.append(spec)
|
||||||
elif isinstance(column, ProseColumn):
|
elif isinstance(column, ProseColumn):
|
||||||
prose_columns.append((colname, column.plural, column.makeSAColumn()))
|
prose_columns.append(spec)
|
||||||
|
|
||||||
|
if (text_columns or prose_columns) and issubclass(table, LanguageSpecific):
|
||||||
|
raise AssertionError("Language-specific table %s shouldn't have explicit language-specific columns" % table)
|
||||||
|
|
||||||
if text_columns:
|
if text_columns:
|
||||||
string_table = makeTextTable(table, 'texts', 'text', text_columns, lazy=False)
|
string_table = makeTextTable(table, 'texts', 'text', text_columns, lazy=False)
|
||||||
globals()[string_table.__name__] = string_table
|
globals()[string_table.__name__] = string_table
|
||||||
if prose_columns:
|
if prose_columns:
|
||||||
string_table = makeTextTable(table, 'prose', 'prose', prose_columns, lazy=True)
|
string_table = makeTextTable(table, 'prose', 'prose', prose_columns, lazy=True)
|
||||||
globals()[string_table.__name__] = string_table
|
globals()[string_table.__name__] = string_table
|
||||||
if (text_columns or prose_columns) and issubclass(table, LanguageSpecific):
|
|
||||||
raise AssertionError("Language-specific table %s shouldn't have explicit language-specific columns" % table)
|
|
||||||
|
|
||||||
### Add language relations
|
### Add language relations
|
||||||
for table in all_tables():
|
for table in all_tables():
|
||||||
|
|
Loading…
Reference in a new issue