Skip to content

Commit c488001

Browse files
committed
Chore:Automatically serialize models
1 parent c56fa31 commit c488001

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

api/core/Flask.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
from flask import Flask as BaseFlask, request
22
from .routing.Router import Router
3+
from .JSONEncoder import JSONEncoder
34

45

56
class Flask(BaseFlask):
67

8+
json_encoder = JSONEncoder
9+
710
def dispatch_request(self):
811
"""triggers an action related to this request"""
912
adapter = self.create_url_adapter(request)

api/core/JSONEncoder.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from flask.json import JSONEncoder as BaseJSONEncoder
2+
from api.core.storage import Model, ModelCollection
3+
4+
5+
class JSONEncoder(BaseJSONEncoder):
6+
def default(self, data):
7+
if isinstance(data, Model) or isinstance(data, ModelCollection):
8+
return data.to_json()
9+
return BaseJSONEncoder.default(self, data)

api/core/storage/storage.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ def count(self):
6969
def __len__(self):
7070
return self.count()
7171

72+
def to_json(self):
73+
return [model.to_json() for model in self.models]
74+
7275
def first(self):
7376
try:
7477
return self.models[0]
@@ -84,6 +87,7 @@ def __repr__(self):
8487

8588
class Model:
8689
timestamps = True
90+
hidden = []
8791

8892
@classmethod
8993
def table_name(cls):
@@ -161,6 +165,14 @@ def or_where(cls, *args, **kwargs):
161165
def hydrate(cls, models):
162166
return list(map(cls, models))
163167

168+
def to_json(self):
169+
170+
return {
171+
key: self.attributes[key]
172+
for key in self.attributes
173+
if (key not in self.hidden)
174+
}
175+
164176
@classmethod
165177
def all(cls):
166178
models = cls.hydrate(Storage.get_table_data(cls.table_name()).values())

0 commit comments

Comments
 (0)