rabin 7 年 前
コミット
07f68156cf

+ 3 - 1
demeter/admin/page/__init__.py

@@ -1,3 +1,5 @@
 # -*- coding: utf-8 -*-
+"""
 from demeter.web import *
-Web.init(__file__, globals())
+Web.init(__file__)
+"""

+ 11 - 0
demeter/core.py

@@ -150,6 +150,17 @@ class Demeter(object):
 		return self.modelObj[table]
 		"""
 
+	@classmethod
+	def getMethod(self, module):
+		import inspect
+		return inspect.getmembers(module, callable)
+
+	@classmethod
+	def getPackage(self, package):
+		import pkgutil
+		for importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__, prefix=package.__name__ + '.', onerror=lambda x: None):
+			yield modname
+
 	@classmethod
 	def getClass(self, name, path=''):
 		obj = self.getObject(name, path)

+ 15 - 11
demeter/web.py

@@ -219,20 +219,23 @@ class Web(object):
 		return callback
 
 	@classmethod
-	def init(self, file, gbs):
+	def init(self, application):
+		for v in application:
+			self.load(v)
+
+	@classmethod
+	def load(self, package):
+		"""
 		path = os.path.split(os.path.realpath(file))[0] + '/'
 		sys.path.append(path)
 		files = self.file(path)
+		"""
 		url = []
-		for key in files:
-			module = __import__(key, gbs)
+		for key in Demeter.getPackage(package):
+			module = __import__(key)
 			url = self.url(module, key, url)
 		Demeter.route = Demeter.route + url
 
-	@classmethod
-	def load(self):
-		pass
-
 	@staticmethod
 	def file(path):
 		files = os.listdir(path)
@@ -244,8 +247,8 @@ class Web(object):
 		return result
 	@staticmethod
 	def url(module, key, url):
-		str = dir(module)
-		for i in str:
+		str = Demeter.getMethod(module)
+		for i,j in str:
 			act = ''
 			if '_path' in i:
 				act = i.replace('_path', '')
@@ -259,8 +262,9 @@ class Web(object):
 					url.append((r'/'+key, attr))
 				url.append((r'/'+key+'/'+act, attr))
 		return url
-	@staticmethod
-	def start():
+	@classmethod
+	def start(self, application=[]):
+		self.init(application)
 		if 'route' in Demeter.config['setting']:
 			Demeter.echo(Demeter.route)
 		config = Demeter.config[Demeter.web]

+ 3 - 3
demos/helloworld/admin/main.py

@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 from demeter.web import *
-from demeter.admin.page import *
-from .page import *
-Web.start()
+import demeter.admin.page as admin_page
+import page
+Web.start(application=[page,admin_page])

+ 1 - 3
demos/helloworld/admin/page/__init__.py

@@ -1,3 +1 @@
-# -*- coding: utf-8 -*-
-from demeter.web import *
-Web.init(__file__, globals())
+# -*- coding: utf-8 -*-

+ 2 - 2
demos/helloworld/front/main.py

@@ -1,4 +1,4 @@
 # -*- coding: utf-8 -*-
 from demeter.web import *
-from .page import *
-Web.start()
+import page
+Web.start(application=[page,])

+ 1 - 3
demos/helloworld/front/page/__init__.py

@@ -1,3 +1 @@
-# -*- coding: utf-8 -*-
-from demeter.web import *
-Web.init(__file__, globals())
+# -*- coding: utf-8 -*-

+ 0 - 1
demos/helloworld/front/page/main.py

@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page