@@ -51,12 +51,26 @@ def __getattr__(self, item):
5151_none = object ()
5252
5353
54+ def _get_column (model , column_or_name ) -> Column :
55+ if isinstance (column_or_name , str ):
56+ return getattr (model , column_or_name )
57+
58+ if isinstance (column_or_name , Column ):
59+ if column_or_name in model :
60+ return column_or_name
61+ raise AttributeError ('Column {} does not belong to model {}' .format (
62+ column_or_name , model ))
63+
64+ raise TypeError ('Unknown column {} with type {}' .
65+ format (column_or_name , type (column_or_name )))
66+
67+
5468class ModelLoader (Loader ):
55- def __init__ (self , model , * column_names , ** extras ):
69+ def __init__ (self , model , * columns , ** extras ):
5670 self .model = model
5771 self ._distinct = None
58- if column_names :
59- self .columns = self . _column_loader (model , column_names )
72+ if columns :
73+ self .columns = [ _get_column (model , name ) for name in columns ]
6074 else :
6175 self .columns = model
6276 self .extras = dict ((key , self .get (value ))
@@ -121,30 +135,14 @@ def get_from(self):
121135 getattr (subloader , 'on_clause' , None ))
122136 return rv
123137
124- def load (self , * column_names , ** extras ):
125- if column_names :
126- self .columns = self . _column_loader (self .model , column_names )
138+ def load (self , * columns , ** extras ):
139+ if columns :
140+ self .columns = [ _get_column (self .model , name ) for name in columns ]
127141
128142 self .extras .update ((key , self .get (value ))
129143 for key , value in extras .items ())
130144 return self
131145
132- @classmethod
133- def _column_loader (cls , model , column_names ):
134- def column_formatter (column_name ):
135- if isinstance (column_name , str ):
136- return getattr (model , column_name )
137- elif isinstance (column_name , Column ):
138- if column_name not in model :
139- raise AttributeError ('Column {} does not belong '
140- 'to this model' .format (column_name ))
141- return column_name
142- else :
143- raise TypeError ('Unknown column name {} type {}' .
144- format (column_name , type (column_name )))
145-
146- return [column_formatter (column_name ) for column_name in column_names ]
147-
148146 def on (self , on_clause ):
149147 self .on_clause = on_clause
150148 return self
@@ -163,8 +161,8 @@ def none_as_none(self, enabled=True):
163161
164162
165163class AliasLoader (ModelLoader ):
166- def __init__ (self , alias , * column_names , ** extras ):
167- super ().__init__ (alias , * column_names , ** extras )
164+ def __init__ (self , alias , * columns , ** extras ):
165+ super ().__init__ (alias , * columns , ** extras )
168166
169167
170168class ColumnLoader (Loader ):
0 commit comments