Skip to content

Commit b48e64d

Browse files
committed
field name lookup working
1 parent 49b319e commit b48e64d

File tree

4 files changed

+25
-26
lines changed

4 files changed

+25
-26
lines changed

aragorm/fields.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import typing
2+
import uuid
23

34
from .operators import Operator, In, NotIn, Equal, NotEqual, Like
45

@@ -10,6 +11,10 @@ class Field():
1011

1112
def __init__(self, null: bool = True):
1213
self.null = null
14+
self.uuid = uuid.uuid4()
15+
16+
def __hash__(self):
17+
return hash(self.uuid)
1318

1419
def is_in(self, values: Iterable) -> 'Where':
1520
return Where(field=self, values=values, operator=In)

aragorm/model.py

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,39 +22,27 @@ def __new__(cls, name, bases, namespace, **kwds):
2222
"""
2323
model = super().__new__(cls, name, bases, namespace)
2424

25-
tablename = _camel_to_snake(name)
26-
model.__tablename__ = tablename
25+
tablename = namespace.get('tablename')
26+
if not tablename:
27+
model.tablename = _camel_to_snake(name)
2728

2829
fields = {}
2930
for key, value in namespace.items():
3031
if issubclass(type(value), Field):
31-
fields[name] = value
32+
fields[value] = key
3233

33-
model.__fields__ = fields
34+
model.fields = fields
3435
return model
3536

3637

3738
class Model(metaclass=ModelMeta):
3839

3940
@classmethod
40-
def _tablename(cls):
41-
tablename = getattr(cls, 'tablename', None)
42-
if tablename:
43-
return tablename
44-
else:
45-
# TODO - FooBar -> foo_bar
46-
return cls.__name__.lower()
47-
48-
@property
49-
def fields() -> [Field]:
50-
"""
51-
Needs to inspect the subclass, and return all Fields.
52-
53-
Also ... needs to be a classproperty, or just stored by the meta
54-
class.
55-
56-
Want this generated once by the meta class, or cached.
57-
"""
41+
def get_field_name(cls, field: Field) -> str:
42+
field_name = cls.fields.get(field, None)
43+
if not field_name:
44+
raise ValueError(f'Unrecognised field')
45+
return field_name
5846

5947
@classmethod
6048
def select(cls, *field_names: [str]) -> Query:
@@ -73,11 +61,10 @@ def select(cls, *field_names: [str]) -> Query:
7361
# TODO - make sure the fields passed in are valid
7462
fields_str = ', '.join(field_names)
7563

76-
tablename = cls._tablename()
7764
return Query(
7865
type='SELECT',
7966
model=cls,
80-
base=f'SELECT {fields_str} from {tablename}'
67+
base=f'SELECT {fields_str} from {cls.tablename}'
8168
)
8269

8370
@classmethod

aragorm/query.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,14 @@ def generate_query(self):
4242
4343
The query needs a link to the table calling it ...
4444
"""
45-
return self.base
45+
query = self.base
46+
if self.where_clauses:
47+
query += ' WHERE '
48+
for clause in self.where_clauses:
49+
name = self.model.get_field_name(clause.field)
50+
query += clause.get_sql(name)
51+
print(query)
52+
return query
4653

4754
async def execute(self, as_dict=True) -> str:
4855
"""

tests/test_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,4 @@ def tearDown(self):
122122
class TestMetaClass(TestCase):
123123

124124
def test_tablename(self):
125-
self.assertEqual(Pokemon.__tablename__, 'pokemon')
125+
self.assertEqual(Pokemon.tablename, 'pokemon')

0 commit comments

Comments
 (0)