a3ee277d by 胡边

check and fix sql part for the env

1 parent 7c9602c8
...@@ -3,4 +3,4 @@ ...@@ -3,4 +3,4 @@
3 from server.app import web_app 3 from server.app import web_app
4 4
5 if __name__ == "__main__": 5 if __name__ == "__main__":
6 web_app.run(host='0.0.0.0', port=7788) 6 web_app.run(host='0.0.0.0', port=7788, debug=True)
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 from flask_restful import Resource, reqparse
4 from flask import request
5
6 from server.services.user import user_service
7 from server.utils.api_response import ok
8
3 9
4 from flask_restful import Resource 10 from flask_restful import Resource
5 11
...@@ -11,4 +17,8 @@ class UserResource(Resource): ...@@ -11,4 +17,8 @@ class UserResource(Resource):
11 17
12 class UserListResource(Resource): 18 class UserListResource(Resource):
13 def get(self): 19 def get(self):
14 return [] 20 parse = reqparse.RequestParser()
21 parse.add_argument('name', type=str, location='args', required=False)
22 parse.add_argument('role', type=str, location='args', required=False)
23 args = parse.parse_args()
24 return ok(data=user_service.get_user_list(args))
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 3
4 from server.app import web_api
5 from server.database import db_adapter
6 from flask_restful import Resource 4 from flask_restful import Resource
7 5
6 from server.api.resources import user
7 from server.app import web_api
8
8 9
9 class TestResource(Resource): 10 class TestResource(Resource):
10 def get(self): 11 def get(self):
11 return "server started" 12 return "server started"
12 13
13 14
14 class HostResource(Resource):
15 def get(self):
16 return "passed"
17
18
19 def init_routes(): 15 def init_routes():
20 web_api.add_resource(TestResource, "/api/test") 16 web_api.add_resource(TestResource, "/api/test")
21 web_api.add_resource(HostResource, "/api/users") 17 web_api.add_resource(user.UserListResource, "/api/users")
18 web_api.add_resource(user.UserResource, "/api/user")
......
...@@ -4,10 +4,11 @@ ...@@ -4,10 +4,11 @@
4 from sqlalchemy import create_engine 4 from sqlalchemy import create_engine
5 from sqlalchemy.orm import scoped_session, sessionmaker 5 from sqlalchemy.orm import scoped_session, sessionmaker
6 from sqlalchemy.ext.declarative import declarative_base 6 from sqlalchemy.ext.declarative import declarative_base
7 from db_adapters import SQLAlchemyAdapter
8 7
8 from db_adapters import SQLAlchemyAdapter
9 from server.utils import get_config
9 10
10 engine = create_engine('mysql://root:123456@localhost/sunnycloud', 11 engine = create_engine(get_config('mysql_connection'),
11 convert_unicode=True, 12 convert_unicode=True,
12 pool_size=50, 13 pool_size=50,
13 max_overflow=100, 14 max_overflow=100,
......
...@@ -6,7 +6,11 @@ from . import Base, db_adapter ...@@ -6,7 +6,11 @@ from . import Base, db_adapter
6 from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, TypeDecorator 6 from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, TypeDecorator
7 from sqlalchemy.orm import relation, backref 7 from sqlalchemy.orm import relation, backref
8 8
9 from datetime import datetime
10
9 from server.utils import get_now 11 from server.utils import get_now
12 from pytz import utc
13 from dateutil import parser
10 14
11 15
12 def relationship(*arg, **kw): 16 def relationship(*arg, **kw):
...@@ -15,11 +19,15 @@ def relationship(*arg, **kw): ...@@ -15,11 +19,15 @@ def relationship(*arg, **kw):
15 return ret 19 return ret
16 20
17 21
22 def date_serializer(date):
23 return long((date - datetime(1970, 1, 1)).total_seconds() * 1000)
24
25
18 def to_dic(inst, cls): 26 def to_dic(inst, cls):
19 # add your coversions for things like datetime's 27 # add your coversions for things like datetime's
20 # and what-not that aren't serializable. 28 # and what-not that aren't serializable.
21 convert = dict() 29 convert = dict()
22 # convert[TZDateTime] = date_serializer 30 convert[TZDateTime] = date_serializer
23 31
24 d = dict() 32 d = dict()
25 for c in cls.__table__.columns: 33 for c in cls.__table__.columns:
...@@ -39,6 +47,33 @@ def to_json(inst, cls): ...@@ -39,6 +47,33 @@ def to_json(inst, cls):
39 return json.dumps(to_dic(inst, cls)) 47 return json.dumps(to_dic(inst, cls))
40 48
41 49
50 class TZDateTime(TypeDecorator):
51 """
52 usage: remove datetime's tzinfo
53 To set all datetime datas are the naive datetime (tzinfo=None)
54 in the whole environment
55 """
56 impl = DateTime
57
58 def process_bind_param(self, value, dialect):
59 if value is not None:
60 if isinstance(value, basestring) or isinstance(value, str):
61 value = parser.parse(value)
62 if isinstance(value, datetime):
63 if value.tzinfo is not None:
64 value = value.astimezone(utc)
65 value.replace(tzinfo=None)
66 return value
67
68 def process_result_value(self, value, dialect):
69 if value is not None:
70 if isinstance(value, datetime):
71 if value.tzinfo is not None:
72 value = value.astimezone(utc)
73 value.replace(tzinfo=None)
74 return value
75
76
42 class DBBase(Base): 77 class DBBase(Base):
43 """ 78 """
44 DB model base class, providing basic functions 79 DB model base class, providing basic functions
...@@ -66,8 +101,8 @@ class User(DBBase): ...@@ -66,8 +101,8 @@ class User(DBBase):
66 password = Column(String(128)) 101 password = Column(String(128))
67 role = Column(String(16)) 102 role = Column(String(16))
68 status = Column(String(32)) 103 status = Column(String(32))
69 create_time = Column(DateTime, default=get_now()) 104 create_time = Column(TZDateTime, default=get_now())
70 last_login_time = Column(DateTime, default=get_now()) 105 last_login_time = Column(TZDateTime, default=get_now())
71 106
72 def __init__(self, **kwargs): 107 def __init__(self, **kwargs):
73 super(User, self).__init__(**kwargs) 108 super(User, self).__init__(**kwargs)
...@@ -82,8 +117,8 @@ class UserToken(DBBase): ...@@ -82,8 +117,8 @@ class UserToken(DBBase):
82 user_id = Column(Integer, ForeignKey('user.id', ondelete='CASCADE')) 117 user_id = Column(Integer, ForeignKey('user.id', ondelete='CASCADE'))
83 user = relationship('User', backref=backref('tokens', lazy='dynamic')) 118 user = relationship('User', backref=backref('tokens', lazy='dynamic'))
84 119
85 create_time = Column(DateTime, default=get_now()) 120 create_time = Column(TZDateTime, default=get_now())
86 expire_time = Column(DateTime, nullable=False) 121 expire_time = Column(TZDateTime, nullable=False)
87 122
88 def __init__(self, **kwargs): 123 def __init__(self, **kwargs):
89 super(UserToken, self).__init__(**kwargs) 124 super(UserToken, self).__init__(**kwargs)
......
...@@ -35,15 +35,19 @@ class UserService(object): ...@@ -35,15 +35,19 @@ class UserService(object):
35 return db_adapter.get_first_object_by(User, d=id) 35 return db_adapter.get_first_object_by(User, d=id)
36 36
37 def get_user_list(self, filter_json): 37 def get_user_list(self, filter_json):
38 sql_condition = 1 == 1 38 conditions = [1 == 1]
39 for condition in filter_json: 39
40 if condition == 'begin_time': 40 if 'begin_time' in filter_json:
41 sql_condition = sql_condition, User.condition > filter_json['begin_time'] 41 conditions.append(User.create_time > filter_json['begin_time'])
42 elif condition == 'end_time': 42 if 'end_time' in filter_json:
43 sql_condition = sql_condition, User.condition < filter_json['end_time'] 43 conditions.append(User.create_time > filter_json['end_time'])
44 else: 44 if 'role' in filter_json:
45 sql_condition = sql_condition, User.condition == filter_json['condition'] 45 conditions.append(User.role == filter_json['role'])
46 return db_adapter.get_all_objects(User, sql_condition) 46 if 'name' in filter_json:
47 conditions.append(User.name.like("%" + filter_json['name'] + "%"))
48
49 user_list = db_adapter.get_all_objects(User, *conditions)
50 return map(lambda x: x.dic(), user_list)
47 51
48 # --------------- helper private functions ---------------------# 52 # --------------- helper private functions ---------------------#
49 53
...@@ -56,3 +60,6 @@ class UserService(object): ...@@ -56,3 +60,6 @@ class UserService(object):
56 issue_date=token_issue_date) 60 issue_date=token_issue_date)
57 user_token.save() 61 user_token.save()
58 return user_token 62 return user_token
63
64
65 user_service = UserService()
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
2 2
3 3
4 from server.database import Base, engine 4 from server.database import Base, engine
5 from server.database.models import Host
6 from server.database import db_adapter 5 from server.database import db_adapter
6 from server.database.models import User, UserToken
7 7
8 8
9 def setup_db(): 9 def setup_db():
...@@ -15,12 +15,10 @@ def setup_db(): ...@@ -15,12 +15,10 @@ def setup_db():
15 Base.metadata.create_all(bind=engine) 15 Base.metadata.create_all(bind=engine)
16 16
17 # init REQUIRED db data. 17 # init REQUIRED db data.
18 db_adapter.add_object_kwargs(Host, 18 db_adapter.add_object_kwargs(User,
19 id='1', 19 id=1,
20 hostname='test1', 20 name='super_admin',
21 public_ip='10.0.2.15', 21 password='123456',
22 private_ip='127.0.0.1', 22 role='admin'
23 mem='32G',
24 cores=16
25 ) 23 )
26 setup_db() 24 setup_db()
...\ No newline at end of file ...\ No newline at end of file
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!