forked from cula/jingan
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodels.py
110 lines (78 loc) · 3.66 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# coding=utf-8
import hashlib
from motorengine import fields
import settings
from libs.base_doc import BaseDoc
from libs.object_id_field import ObjectIdField
from libs.date_field import DateField
class Role(BaseDoc):
__collection__ = 'role'
key = fields.StringField(db_field='key', max_length=50, unique=True,
required=True)
name = fields.StringField(db_field='name', max_length=50, required=True)
class User(BaseDoc):
__collection__ = 'user'
__lazy__ = False
name = fields.StringField(db_field='name', max_length=50, unique=True,
required=True)
password = fields.StringField(db_field='password', max_length=50,
required=True)
last_login = fields.DateTimeField(db_field='last_login', required=False)
role = fields.ReferenceField(reference_document_type=Role, required=True)
@classmethod
def encode_raw_password(cls, password):
m = hashlib.md5()
m.update(password.encode('utf-8'))
return m.hexdigest()
def check_raw_password(self, password):
return self.check_encoded_password(self.encode_raw_password(password))
def check_encoded_password(self, password):
if password == self.password:
return True
else:
return False
def set_password(self, password):
self.password = self.encode_raw_password(password)
def get_role(self):
return Role.objects.get(self.role_id)
class Product(BaseDoc):
__collection__ = 'product'
sku = fields.StringField(db_field='sku', max_length=50, unique=True,
required=True)
name = fields.StringField(db_field='name', max_length=200, required=True)
id_from_source = fields.StringField(db_field='id_from_source',
max_length=50)
price_for_ref = fields.DecimalField(db_field='price_for_ref', required=True,
default=0.0)
class Yard(BaseDoc):
__collection__ = 'yard'
source = fields.StringField(db_field='source', max_length=20, required=True)
region = fields.StringField(db_field='region', max_length=20,
required=True, default='')
name = fields.StringField(db_field='name', max_length=200, required=True)
phone = fields.StringField(db_field='phone', max_length=100, required=True)
address = fields.StringField(db_field='address', max_length=200,
required=True, default='')
class Item(BaseDoc):
__collection__ = 'item'
product = fields.EmbeddedDocumentField(embedded_document_type=Product)
count = fields.IntField(min_value=0)
price = fields.DecimalField(min_value=0)
class Suborder(BaseDoc):
__collection__ = 'suborder'
id_from_source = fields.StringField(
db_field='id_from_source', max_length=100, required=True)
warehouse_from_source = fields.StringField(
db_field='warehouse_from_source', max_length=100, required=True)
items = fields.ListField(
fields.EmbeddedDocumentField(embedded_document_type=Item))
class Order(BaseDoc):
__collection__ = 'order'
source = fields.StringField(db_field='source', max_length=20, required=True)
seller = fields.StringField(db_field='seller', max_length=20, required=True)
yard = fields.EmbeddedDocumentField(embedded_document_type=Yard)
deliver_at = DateField(db_field='deliver_at', required=False)
#sub_orders = fields.JsonField(db_field='sub_orders', required=True,
# default=dict())
suborders = fields.ListField(
fields.EmbeddedDocumentField(embedded_document_type=Suborder))