0c035fbd by 胡边

first time enhancement for the code structure

1 parent 74442389
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 from server import app 3 from server.app import web_app
4 4
5 if __name__ == "__main__": 5 if __name__ == "__main__":
6 app.run(host='0.0.0.0', port=80) 6 web_app.run(host='0.0.0.0', port=80)
......
1 # -*- coding: utf-8 -*-
2
3 __author__ = 'hubian'
4
5 from flask import Flask
6 from flask_restful import Api
7
8
9 # initialize flask and flask restful
10 app = Flask(__name__)
11 app.config['SECRET_KEY'] = "myNameIsHuBian"
12 app.debug = True
13
14 api = Api(app)
15
16 from utils import init_factory
17 init_factory()
18
19 from views import init_routes
20 init_routes()
1 # -*- coding: utf-8 -*-
2
3
4 from flask_restful import Resource
5
6
7 class UserResource(Resource):
8 def get(self):
9 return "server started"
10
11
12 class UserListResource(Resource):
13 def get(self):
14 return []
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 from server import api 4 from server.app import web_api
6 from server.database import db_adapter 5 from server.database import db_adapter
7 from server.database.models import Host 6 from server.database.models import Host
8 from flask_restful import Resource 7 from flask_restful import Resource
...@@ -19,6 +18,5 @@ class HostResource(Resource): ...@@ -19,6 +18,5 @@ class HostResource(Resource):
19 18
20 19
21 def init_routes(): 20 def init_routes():
22 api.add_resource(TestResource, "/api/test") 21 web_api.add_resource(TestResource, "/api/test")
23 api.add_resource(HostResource, "/api/host") 22 web_api.add_resource(HostResource, "/api/host")
24
...\ No newline at end of file ...\ No newline at end of file
......
1 # -*- coding: utf-8 -*-
2
3
4 from flask import Flask
5 from flask_restful import Api
6
7
8 # initialize flask and flask restful
9 web_app = Flask(__name__)
10 web_app.config['SECRET_KEY'] = "myNameIsHuBian"
11 web_app.debug = True
12
13
14 web_api = Api(web_app)
15
16
17 from server.api.routes import init_routes
18 init_routes()
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4
5 3
6 from sqlalchemy import create_engine 4 from sqlalchemy import create_engine
7 from sqlalchemy.orm import scoped_session, sessionmaker 5 from sqlalchemy.orm import scoped_session, sessionmaker
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 class SQLAlchemyAdapterMetaClass(type): 4 class SQLAlchemyAdapterMetaClass(type):
6 @staticmethod 5 @staticmethod
...@@ -45,7 +44,7 @@ class SQLAlchemyAdapter(DBAdapter): ...@@ -45,7 +44,7 @@ class SQLAlchemyAdapter(DBAdapter):
45 def __init__(self, db_session): 44 def __init__(self, db_session):
46 super(SQLAlchemyAdapter, self).__init__(db_session) 45 super(SQLAlchemyAdapter, self).__init__(db_session)
47 46
48 # ------------------------------ methods that no need to wrap --- start ------------------------------ 47 # ------------------ ORM basic functions -------------------- #
49 48
50 def commit(self): 49 def commit(self):
51 self.db_session.commit() 50 self.db_session.commit()
...@@ -62,9 +61,8 @@ class SQLAlchemyAdapter(DBAdapter): ...@@ -62,9 +61,8 @@ class SQLAlchemyAdapter(DBAdapter):
62 def session(self): 61 def session(self):
63 return self.db_session 62 return self.db_session
64 63
65 # ------------------------------ methods that no need to wrap --- end------------------------------ 64 # -------------------- public usage functions ------------------ #
66 65
67 # ------------------------------ auto wrapped 'public' methods --- start ------------------------------
68 def get_object(self, ObjectClass, id): 66 def get_object(self, ObjectClass, id):
69 """ Retrieve one object specified by the primary key 'pk' """ 67 """ Retrieve one object specified by the primary key 'pk' """
70 return ObjectClass.query.get(id) 68 return ObjectClass.query.get(id)
...@@ -93,7 +91,6 @@ class SQLAlchemyAdapter(DBAdapter): ...@@ -93,7 +91,6 @@ class SQLAlchemyAdapter(DBAdapter):
93 def find_first_object_by(self, ObjectClass, **kwargs): 91 def find_first_object_by(self, ObjectClass, **kwargs):
94 return ObjectClass.query.filter_by(**kwargs).first() 92 return ObjectClass.query.filter_by(**kwargs).first()
95 93
96
97 def add_object(self, inst): 94 def add_object(self, inst):
98 self.db_session.add(inst) 95 self.db_session.add(inst)
99 96
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 import json 4 import json
6 from . import Base, db_adapter 5 from . import Base, db_adapter
......
File mode changed
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2
3 __author__ = 'hubian'
4
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 from server.database import Base, engine 4 from server.database import Base, engine
6 from server.database.models import Host 5 from server.database.models import Host
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 from utils import Utils
6 from log import Log
7 from factory import factory 4 from factory import factory
5
8 from server.database import db_session 6 from server.database import db_session
9 from server.database.db_adapters import SQLAlchemyAdapter 7 from server.database.db_adapters import SQLAlchemyAdapter
8 from server.log.log import Log
9 from utils import Utils
10
10 11
11 def init_factory(): 12 def init_factory():
12 factory.provide("util", Utils) 13 factory.provide("util", Utils)
......
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 4 class VM(object):
6 class VM:
7 OS_TYPE_LINUX = 0 5 OS_TYPE_LINUX = 0
8 OS_TYPE_WINDOWS = 1 6 OS_TYPE_WINDOWS = 1
9 7
10 8
11 class NETWORK: 9 class NETWORK(object):
12 IP_TYPE_PUBLIC = 0 10 IP_TYPE_PUBLIC = 0
13 IP_TYPE_PRIVATE = 1 11 IP_TYPE_PRIVATE = 1
14 12
15 13
16 class DISK: 14 class DISK(object):
17 TYPE_SYSTEM = 0 15 TYPE_SYSTEM = 0
18 TYPE_MOUNTED = 1 16 TYPE_MOUNTED = 1
19 17
...@@ -21,7 +19,7 @@ class DISK: ...@@ -21,7 +19,7 @@ class DISK:
21 FORMAT_EXT4 = 1 19 FORMAT_EXT4 = 1
22 20
23 21
24 class IMAGE: 22 class IMAGE(object):
25 TYPE_DEFAULT = 0 # Router or Monitor 23 TYPE_DEFAULT = 0 # Router or Monitor
26 TYPE_PROVIDER = 1 # vm images type 24 TYPE_PROVIDER = 1 # vm images type
27 TYPE_CUSTOMIZE = 2 # created by users 25 TYPE_CUSTOMIZE = 2 # created by users
......
1 # -*- coding: utf-8 -*-
2
3 __author__ = 'hubian'
4
5
6 class SunnycloudFactory:
7 def __init__(self, allow_replace=False):
8 """Create a new factory
9
10 :param allow_replace: whether to replace existing provider with same feature. AssertionException will be raised it's
11 False and more than one providers with same key(feature) are provided
12 """
13 self.providers = {}
14 self.allow_replace = allow_replace
15
16 def set_allow_replace(self, allow_replace):
17 """Set the value of allow_replace"""
18 self.allow_replace = allow_replace
19
20 def provide(self, feature, provider, *args, **kwargs):
21 """Add a provider to factory
22
23 :type feature: str|unicode
24 :param feature: key to store and get the object into/from the factory
25
26 :type provider: object | callable
27 :param provider: the object to be added.
28
29 :Example:
30 from *** import VMManager
31 factory.provide("vm_manager", VMManager)
32 factory.provide("vm_manager", VMManager, *init_args, **init_kwargs)
33
34 # or:
35 vmm = VMManager
36 factory.provide("user_manager", vmm)
37
38 """
39 if not self.allow_replace:
40 assert not self.providers.has_key(feature), "Duplicate feature: %r" % feature
41 if callable(provider):
42 def call():
43 return provider(*args, **kwargs)
44 else:
45 def call():
46 return provider
47 self.providers[feature] = call
48
49 def __getitem__(self, feature):
50 try:
51 provider = self.providers[feature]
52 except KeyError:
53 raise KeyError, "Unknown feature named %r" % feature
54 return provider()
55
56
57 factory = SunnycloudFactory()
58
59
60 def NoAssertion(obj):
61 return True
62
63
64 class RequiredFeature(object):
65 def __init__(self, feature, assertion=NoAssertion):
66 """Create instance of RequiredFeature.
67
68 Will get the actual target from factory upon the first call.
69
70 :type feature: str|unicode
71 :param feature: the key to get object from factory
72
73 :Example:
74 inst = RequiredFeature("user_manager")
75 inst.some_method() # where user_manager.some_method will be called
76
77 :raise:
78 KeyError if feature doesn't exist in factory.
79 """
80 self.feature = feature
81 self.assertion = assertion
82
83 def __get__(self, obj, T):
84 return self.result # <-- will request the feature upon first call
85
86 def __getattr__(self, name):
87 self.result = self.request()
88 if name == "result":
89 return self.result
90 else:
91 return getattr(self.result, name)
92
93 def request(self):
94 obj = factory[self.feature]
95 assert self.assertion(obj), \
96 "The value %r of %r does not match the specified criteria" \
97 % (obj, self.feature)
98 return obj
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 __author__ = 'hubian'
4 3
5 from datetime import datetime 4 from datetime import datetime
6 5
7 6
8 class Utils(): 7 def get_now():
9
10 def get_now(self):
11 return datetime.now() 8 return datetime.now()
12 9
13 def get_config(self): 10
11 def get_config():
14 return None 12 return None
15 13
16 def get_safe_config(self): 14
15 def get_safe_config():
17 return None 16 return None
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!