diff --git a/demo/app.py b/demo/app.py deleted file mode 100644 index 2f44926..0000000 --- a/demo/app.py +++ /dev/null @@ -1,8 +0,0 @@ -# py-scopes/demo/app.py - -def demo_app(environ, start_response): - status = '200 OK' - headers = [("Content-type", "text/plain; charset=utf-8")] - start_response(status, headers) - return ['Hello World'.encode()] - diff --git a/demo/config.py b/demo/config.py index c4f2668..464dff2 100644 --- a/demo/config.py +++ b/demo/config.py @@ -2,8 +2,10 @@ from dotenv import load_dotenv from os import getenv +from scopes.server.app import demo_app, zope_app load_dotenv() server_port = getenv('SERVER_PORT', '8999') +app = zope_app diff --git a/demo/server.py b/demo/demo_server.py similarity index 74% rename from demo/server.py rename to demo/demo_server.py index aabed33..219d9bb 100644 --- a/demo/server.py +++ b/demo/demo_server.py @@ -1,4 +1,4 @@ -# py-scopes/demo/server.py +# py-scopes/demo/demo_server.py from wsgiref.simple_server import make_server @@ -10,3 +10,9 @@ def run(app, config): httpd.serve_forever() except KeyboardInterrupt: print('Shutting down.') + + +if __name__ == '__main__': + import config + run(config.app, config) + diff --git a/demo/main.py b/demo/main.py deleted file mode 100644 index 4eef565..0000000 --- a/demo/main.py +++ /dev/null @@ -1,9 +0,0 @@ -# py-scopes/demo/main.py - -import config - -from app import demo_app -import server - -server.run(demo_app, config) - diff --git a/pyproject.toml b/pyproject.toml index 02a3fe6..405c74e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ dependencies = [ ] [project.optional-dependencies] -demo = ["python-dotenv"] +demo = ["python-dotenv", "zope.publisher"] test = ["pytest"] [tool.setuptools] diff --git a/scopes/server/__init__.py b/scopes/server/__init__.py new file mode 100644 index 0000000..cf54a0c --- /dev/null +++ b/scopes/server/__init__.py @@ -0,0 +1 @@ +"""package scopes.server""" diff --git a/scopes/server/app.py b/scopes/server/app.py new file mode 100644 index 0000000..675a789 --- /dev/null +++ b/scopes/server/app.py @@ -0,0 +1,43 @@ +# scopes.server.app + +from zope.publisher.base import DefaultPublication +from zope.publisher.browser import BrowserRequest +from zope.publisher.publish import publish + + +def demo_app(environ, start_response): + print(f'*** environ {environ}.') + status = '200 OK' + headers = [("Content-type", "text/plain; charset=utf-8")] + start_response(status, headers) + return ['Hello World'.encode()] + + +def zope_app(environ, start_response): + request = BrowserRequest(environ['wsgi.input'], environ) + request.setPublication(DefaultPublication(AppRoot())) + request = publish(request, False) + response = request.response + start_response(response.getStatusString(), response.getHeaders()) + return response.consumeBodyIter() + + +class AppRoot: + """Zope Demo AppRoot""" + + def __call__(self): + """calling AppRoot""" + return 'At root' + + def __getitem__(self, key): + def child(): + """get child""" + print(f'--- getitem {key}') + return 'getitem' + return child + + def hello(self): + """method hello""" + return 'Hello AppRoot' + +