0c035fbd by 胡边

first time enhancement for the code structure

1 parent 74442389
# -*- coding: utf-8 -*-
from server import app
from server.app import web_app
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
web_app.run(host='0.0.0.0', port=80)
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
from flask import Flask
from flask_restful import Api
# initialize flask and flask restful
app = Flask(__name__)
app.config['SECRET_KEY'] = "myNameIsHuBian"
app.debug = True
api = Api(app)
from utils import init_factory
init_factory()
from views import init_routes
init_routes()
# -*- coding: utf-8 -*-
from flask_restful import Resource
class UserResource(Resource):
def get(self):
return "server started"
class UserListResource(Resource):
def get(self):
return []
# -*- coding: utf-8 -*-
__author__ = 'hubian'
from server import api
from server.app import web_api
from server.database import db_adapter
from server.database.models import Host
from flask_restful import Resource
......@@ -19,6 +18,5 @@ class HostResource(Resource):
def init_routes():
api.add_resource(TestResource, "/api/test")
api.add_resource(HostResource, "/api/host")
web_api.add_resource(TestResource, "/api/test")
web_api.add_resource(HostResource, "/api/host")
\ No newline at end of file
......
# -*- coding: utf-8 -*-
from flask import Flask
from flask_restful import Api
# initialize flask and flask restful
web_app = Flask(__name__)
web_app.config['SECRET_KEY'] = "myNameIsHuBian"
web_app.debug = True
web_api = Api(web_app)
from server.api.routes import init_routes
init_routes()
# -*- coding: utf-8 -*-
__author__ = 'hubian'
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
class SQLAlchemyAdapterMetaClass(type):
@staticmethod
......@@ -45,7 +44,7 @@ class SQLAlchemyAdapter(DBAdapter):
def __init__(self, db_session):
super(SQLAlchemyAdapter, self).__init__(db_session)
# ------------------------------ methods that no need to wrap --- start ------------------------------
# ------------------ ORM basic functions -------------------- #
def commit(self):
self.db_session.commit()
......@@ -62,9 +61,8 @@ class SQLAlchemyAdapter(DBAdapter):
def session(self):
return self.db_session
# ------------------------------ methods that no need to wrap --- end------------------------------
# -------------------- public usage functions ------------------ #
# ------------------------------ auto wrapped 'public' methods --- start ------------------------------
def get_object(self, ObjectClass, id):
""" Retrieve one object specified by the primary key 'pk' """
return ObjectClass.query.get(id)
......@@ -93,7 +91,6 @@ class SQLAlchemyAdapter(DBAdapter):
def find_first_object_by(self, ObjectClass, **kwargs):
return ObjectClass.query.filter_by(**kwargs).first()
def add_object(self, inst):
self.db_session.add(inst)
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
import json
from . import Base, db_adapter
......
File mode changed
# -*- coding: utf-8 -*-
__author__ = 'hubian'
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
from server.database import Base, engine
from server.database.models import Host
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
from utils import Utils
from log import Log
from factory import factory
from server.database import db_session
from server.database.db_adapters import SQLAlchemyAdapter
from server.log.log import Log
from utils import Utils
def init_factory():
factory.provide("util", Utils)
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
class VM:
class VM(object):
OS_TYPE_LINUX = 0
OS_TYPE_WINDOWS = 1
class NETWORK:
class NETWORK(object):
IP_TYPE_PUBLIC = 0
IP_TYPE_PRIVATE = 1
class DISK:
class DISK(object):
TYPE_SYSTEM = 0
TYPE_MOUNTED = 1
......@@ -21,7 +19,7 @@ class DISK:
FORMAT_EXT4 = 1
class IMAGE:
class IMAGE(object):
TYPE_DEFAULT = 0 # Router or Monitor
TYPE_PROVIDER = 1 # vm images type
TYPE_CUSTOMIZE = 2 # created by users
......
# -*- coding: utf-8 -*-
__author__ = 'hubian'
class SunnycloudFactory:
def __init__(self, allow_replace=False):
"""Create a new factory
:param allow_replace: whether to replace existing provider with same feature. AssertionException will be raised it's
False and more than one providers with same key(feature) are provided
"""
self.providers = {}
self.allow_replace = allow_replace
def set_allow_replace(self, allow_replace):
"""Set the value of allow_replace"""
self.allow_replace = allow_replace
def provide(self, feature, provider, *args, **kwargs):
"""Add a provider to factory
:type feature: str|unicode
:param feature: key to store and get the object into/from the factory
:type provider: object | callable
:param provider: the object to be added.
:Example:
from *** import VMManager
factory.provide("vm_manager", VMManager)
factory.provide("vm_manager", VMManager, *init_args, **init_kwargs)
# or:
vmm = VMManager
factory.provide("user_manager", vmm)
"""
if not self.allow_replace:
assert not self.providers.has_key(feature), "Duplicate feature: %r" % feature
if callable(provider):
def call():
return provider(*args, **kwargs)
else:
def call():
return provider
self.providers[feature] = call
def __getitem__(self, feature):
try:
provider = self.providers[feature]
except KeyError:
raise KeyError, "Unknown feature named %r" % feature
return provider()
factory = SunnycloudFactory()
def NoAssertion(obj):
return True
class RequiredFeature(object):
def __init__(self, feature, assertion=NoAssertion):
"""Create instance of RequiredFeature.
Will get the actual target from factory upon the first call.
:type feature: str|unicode
:param feature: the key to get object from factory
:Example:
inst = RequiredFeature("user_manager")
inst.some_method() # where user_manager.some_method will be called
:raise:
KeyError if feature doesn't exist in factory.
"""
self.feature = feature
self.assertion = assertion
def __get__(self, obj, T):
return self.result # <-- will request the feature upon first call
def __getattr__(self, name):
self.result = self.request()
if name == "result":
return self.result
else:
return getattr(self.result, name)
def request(self):
obj = factory[self.feature]
assert self.assertion(obj), \
"The value %r of %r does not match the specified criteria" \
% (obj, self.feature)
return obj
# -*- coding: utf-8 -*-
__author__ = 'hubian'
from datetime import datetime
class Utils():
def get_now():
return datetime.now()
def get_now(self):
return datetime.now()
def get_config(self):
return None
def get_config():
return None
def get_safe_config(self):
return None
\ No newline at end of file
def get_safe_config():
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!