Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
胡边
/
WebService-python-framework
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
a3ee277d
authored
2017-10-30 16:39:42 +0800
by
胡边
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
check and fix sql part for the env
1 parent
7c9602c8
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
82 additions
and
34 deletions
run.py
server/api/resources/user.py
server/api/routes.py
server/database/__init__.py
server/database/models.py
server/services/user.py
server/setup_db.py
run.py
View file @
a3ee277
...
...
@@ -3,4 +3,4 @@
from
server.app
import
web_app
if
__name__
==
"__main__"
:
web_app
.
run
(
host
=
'0.0.0.0'
,
port
=
7788
)
web_app
.
run
(
host
=
'0.0.0.0'
,
port
=
7788
,
debug
=
True
)
...
...
server/api/resources/user.py
View file @
a3ee277
# -*- coding: utf-8 -*-
from
flask_restful
import
Resource
,
reqparse
from
flask
import
request
from
server.services.user
import
user_service
from
server.utils.api_response
import
ok
from
flask_restful
import
Resource
...
...
@@ -11,4 +17,8 @@ class UserResource(Resource):
class
UserListResource
(
Resource
):
def
get
(
self
):
return
[]
parse
=
reqparse
.
RequestParser
()
parse
.
add_argument
(
'name'
,
type
=
str
,
location
=
'args'
,
required
=
False
)
parse
.
add_argument
(
'role'
,
type
=
str
,
location
=
'args'
,
required
=
False
)
args
=
parse
.
parse_args
()
return
ok
(
data
=
user_service
.
get_user_list
(
args
))
...
...
server/api/routes.py
View file @
a3ee277
# -*- coding: utf-8 -*-
from
server.app
import
web_api
from
server.database
import
db_adapter
from
flask_restful
import
Resource
from
server.api.resources
import
user
from
server.app
import
web_api
class
TestResource
(
Resource
):
def
get
(
self
):
return
"server started"
class
HostResource
(
Resource
):
def
get
(
self
):
return
"passed"
def
init_routes
():
web_api
.
add_resource
(
TestResource
,
"/api/test"
)
web_api
.
add_resource
(
HostResource
,
"/api/users"
)
web_api
.
add_resource
(
user
.
UserListResource
,
"/api/users"
)
web_api
.
add_resource
(
user
.
UserResource
,
"/api/user"
)
...
...
server/database/__init__.py
View file @
a3ee277
...
...
@@ -4,10 +4,11 @@
from
sqlalchemy
import
create_engine
from
sqlalchemy.orm
import
scoped_session
,
sessionmaker
from
sqlalchemy.ext.declarative
import
declarative_base
from
db_adapters
import
SQLAlchemyAdapter
from
db_adapters
import
SQLAlchemyAdapter
from
server.utils
import
get_config
engine
=
create_engine
(
'mysql://root:123456@localhost/sunnycloud'
,
engine
=
create_engine
(
get_config
(
'mysql_connection'
)
,
convert_unicode
=
True
,
pool_size
=
50
,
max_overflow
=
100
,
...
...
server/database/models.py
View file @
a3ee277
...
...
@@ -6,7 +6,11 @@ from . import Base, db_adapter
from
sqlalchemy
import
Column
,
Integer
,
String
,
DateTime
,
ForeignKey
,
Text
,
TypeDecorator
from
sqlalchemy.orm
import
relation
,
backref
from
datetime
import
datetime
from
server.utils
import
get_now
from
pytz
import
utc
from
dateutil
import
parser
def
relationship
(
*
arg
,
**
kw
):
...
...
@@ -15,11 +19,15 @@ def relationship(*arg, **kw):
return
ret
def
date_serializer
(
date
):
return
long
((
date
-
datetime
(
1970
,
1
,
1
))
.
total_seconds
()
*
1000
)
def
to_dic
(
inst
,
cls
):
# add your coversions for things like datetime's
# and what-not that aren't serializable.
convert
=
dict
()
#
convert[TZDateTime] = date_serializer
convert
[
TZDateTime
]
=
date_serializer
d
=
dict
()
for
c
in
cls
.
__table__
.
columns
:
...
...
@@ -39,6 +47,33 @@ def to_json(inst, cls):
return
json
.
dumps
(
to_dic
(
inst
,
cls
))
class
TZDateTime
(
TypeDecorator
):
"""
usage: remove datetime's tzinfo
To set all datetime datas are the naive datetime (tzinfo=None)
in the whole environment
"""
impl
=
DateTime
def
process_bind_param
(
self
,
value
,
dialect
):
if
value
is
not
None
:
if
isinstance
(
value
,
basestring
)
or
isinstance
(
value
,
str
):
value
=
parser
.
parse
(
value
)
if
isinstance
(
value
,
datetime
):
if
value
.
tzinfo
is
not
None
:
value
=
value
.
astimezone
(
utc
)
value
.
replace
(
tzinfo
=
None
)
return
value
def
process_result_value
(
self
,
value
,
dialect
):
if
value
is
not
None
:
if
isinstance
(
value
,
datetime
):
if
value
.
tzinfo
is
not
None
:
value
=
value
.
astimezone
(
utc
)
value
.
replace
(
tzinfo
=
None
)
return
value
class
DBBase
(
Base
):
"""
DB model base class, providing basic functions
...
...
@@ -66,8 +101,8 @@ class User(DBBase):
password
=
Column
(
String
(
128
))
role
=
Column
(
String
(
16
))
status
=
Column
(
String
(
32
))
create_time
=
Column
(
DateTime
,
default
=
get_now
())
last_login_time
=
Column
(
DateTime
,
default
=
get_now
())
create_time
=
Column
(
TZ
DateTime
,
default
=
get_now
())
last_login_time
=
Column
(
TZ
DateTime
,
default
=
get_now
())
def
__init__
(
self
,
**
kwargs
):
super
(
User
,
self
)
.
__init__
(
**
kwargs
)
...
...
@@ -82,8 +117,8 @@ class UserToken(DBBase):
user_id
=
Column
(
Integer
,
ForeignKey
(
'user.id'
,
ondelete
=
'CASCADE'
))
user
=
relationship
(
'User'
,
backref
=
backref
(
'tokens'
,
lazy
=
'dynamic'
))
create_time
=
Column
(
DateTime
,
default
=
get_now
())
expire_time
=
Column
(
DateTime
,
nullable
=
False
)
create_time
=
Column
(
TZ
DateTime
,
default
=
get_now
())
expire_time
=
Column
(
TZ
DateTime
,
nullable
=
False
)
def
__init__
(
self
,
**
kwargs
):
super
(
UserToken
,
self
)
.
__init__
(
**
kwargs
)
...
...
server/services/user.py
View file @
a3ee277
...
...
@@ -35,15 +35,19 @@ class UserService(object):
return
db_adapter
.
get_first_object_by
(
User
,
d
=
id
)
def
get_user_list
(
self
,
filter_json
):
sql_condition
=
1
==
1
for
condition
in
filter_json
:
if
condition
==
'begin_time'
:
sql_condition
=
sql_condition
,
User
.
condition
>
filter_json
[
'begin_time'
]
elif
condition
==
'end_time'
:
sql_condition
=
sql_condition
,
User
.
condition
<
filter_json
[
'end_time'
]
else
:
sql_condition
=
sql_condition
,
User
.
condition
==
filter_json
[
'condition'
]
return
db_adapter
.
get_all_objects
(
User
,
sql_condition
)
conditions
=
[
1
==
1
]
if
'begin_time'
in
filter_json
:
conditions
.
append
(
User
.
create_time
>
filter_json
[
'begin_time'
])
if
'end_time'
in
filter_json
:
conditions
.
append
(
User
.
create_time
>
filter_json
[
'end_time'
])
if
'role'
in
filter_json
:
conditions
.
append
(
User
.
role
==
filter_json
[
'role'
])
if
'name'
in
filter_json
:
conditions
.
append
(
User
.
name
.
like
(
"
%
"
+
filter_json
[
'name'
]
+
"
%
"
))
user_list
=
db_adapter
.
get_all_objects
(
User
,
*
conditions
)
return
map
(
lambda
x
:
x
.
dic
(),
user_list
)
# --------------- helper private functions ---------------------#
...
...
@@ -56,3 +60,6 @@ class UserService(object):
issue_date
=
token_issue_date
)
user_token
.
save
()
return
user_token
user_service
=
UserService
()
\ No newline at end of file
...
...
server/setup_db.py
View file @
a3ee277
...
...
@@ -2,8 +2,8 @@
from
server.database
import
Base
,
engine
from
server.database.models
import
Host
from
server.database
import
db_adapter
from
server.database.models
import
User
,
UserToken
def
setup_db
():
...
...
@@ -15,12 +15,10 @@ def setup_db():
Base
.
metadata
.
create_all
(
bind
=
engine
)
# init REQUIRED db data.
db_adapter
.
add_object_kwargs
(
Host
,
id
=
'1'
,
hostname
=
'test1'
,
public_ip
=
'10.0.2.15'
,
private_ip
=
'127.0.0.1'
,
mem
=
'32G'
,
cores
=
16
db_adapter
.
add_object_kwargs
(
User
,
id
=
1
,
name
=
'super_admin'
,
password
=
'123456'
,
role
=
'admin'
)
setup_db
()
\ No newline at end of file
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment