FlaskMan and TornadoMan both working with defaults and filters

master
Douglas Blank 2018-07-25 14:01:47 -04:00
rodzic 1dd0eb3e97
commit 4f46f616a1
3 zmienionych plików z 114 dodań i 40 usunięć

Wyświetl plik

@ -2,6 +2,13 @@ import binascii
import os
import uuid
def wrap_method(manager, f):
def function(*args, **kwargs):
print(f.__name__, "called with:", args, kwargs)
return f(manager, *args, **kwargs)
function.__name__ = f.__name__
return function
class Data():
routes = []
filters = []
@ -91,6 +98,19 @@ class Manager():
for class_ in ActivityPubBase.CLASSES:
setattr(self, class_, make_wrapper(self, class_))
def render_template(self, template_name, **kwargs):
pass
def redirect(self, url):
pass
def url_for(self, name):
pass
@property
def request(self):
return None
def setup_css(self, folder="."):
import sass
THEME_STYLE = "light"
@ -309,6 +329,12 @@ class Manager():
return function
return decorator
def get_template_folder(self):
return "/home/dblank/activitypub/apps/blog/templates/"
def get_static_folder(self):
return "/home/dblank/activitypub/apps/blog/static"
## Singleton for the Application
## Allows it to be in scope for decorating the app's
## methods and functions

Wyświetl plik

@ -9,23 +9,28 @@ except:
import inspect
from .base import Manager, app
def wrap_method(self, f):
def function(*args, **kwargs):
print(f.__name__, "called with:", args, kwargs)
return f(self, *args, **kwargs)
function.__name__ = f.__name__
return function
from .base import Manager, app, wrap_method
class FlaskManager(Manager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
"""
"""
def render_template(self, template_name, **kwargs):
return render_template(template_name, **kwargs)
def redirect(self, url):
return redirect(url)
def url_for(self, name):
return url_for(name)
@property
def request(self):
return request
def run(self):
self.app = Flask(__name__,
template_folder="/home/dblank/activitypub/apps/blog/templates/",
static_folder="/home/dblank/activitypub/apps/blog/static")
template_folder=self.get_template_folder(),
static_folder=self.get_static_folder())
self.app.config.update(WTF_CSRF_CHECK_DEFAULT=False)
self.csrf = CSRFProtect(self.app)

Wyświetl plik

@ -4,41 +4,84 @@ try:
except:
pass # tornado not available
from .base import Manager
import inspect
import jinja2
class TornadoRoutes():
routes = []
def __init__(self, manager):
self.manager = manager
from .base import Manager, app, wrap_method
def __call__(self, path, methods=["GET"]):
def decorator(function):
for method in methods:
if method == "GET":
class TempHandler(RequestHandler):
def get(self, manager, *args, **kwargs):
function(manager, *args, **kwargs)
elif method == "POST":
class TempHandler(RequestHandler):
def post(self, manager, *args, **kwargs):
function(manager, *args, **kwargs)
TornadoRoutes.routes.append((path, TempHandler))
return decorator
def make_handler(f, manager):
class Handler(RequestHandler):
def get(self):
return f(self)
def render_template(self, name, **kwargs):
self.write(manager.render_template(name, **kwargs))
## redirect is here
return Handler
class TornadoManager(Manager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.route = TornadoRoutes()
self.template_env = jinja2.Environment(
loader=jinja2.FileSystemLoader(self.get_template_folder()))
def login_required():
tornado.web.authenticated
def get_filters(self):
filters = []
for f in app._data.filters:
params = [x.name for x in inspect.signature(f).parameters.values()]
if len(params) > 0 and params[0] == "self":
filters.append(wrap_method(self, f))
else:
filters.append(f)
filters = {f.__name__: f for f in filters}
return filters
def render_template(self, name, **kwargs):
filters = self.get_filters()
config = {}
config["ME"] = {"url": "https://example.com",
"icon": {"url": "https://example.com"},
"icon_url": 'https://cs.brynmawr.edu/~dblank/images/doug-sm-orig.jpg',
"summary": "I'm just me."}
config["CSS"] = self.CSS
config["NAME"] = "ActivityPub Blog"
config["ID"] = "http://localhost:5000"
request = {"args": {}}
session = {"logged_in": True}
tornado.log.logging.warning("%s" % filters.keys())
self.template_env.filters.update(filters)
template = self.template_env.get_template(name)
return template.render(config=config,
request=request,
session=session,
**kwargs)
## TODO: move to app.Data
#def login_required():
# tornado.web.authenticated
#def render_template(self, template_name, **kwargs):
# return render_template(template_name, **kwargs)
#def redirect(self, url):
# return redirect(url)
def url_for(self, name):
return url_for(name)
@property
def request(self):
return request
def run(self):
self.app = Application()
#super().__init__([url(handler[0],
# handler[1],
# handler[3],
# name=handler[2])
# for handler in handlers], **settings)
self.app.listen(5005)
routes = []
for route, methods, f in app._data.routes:
params = [x.name for x in inspect.signature(f).parameters.values()]
routes.append((route, make_handler(f, self)))
self.app = Application(routes)
self.app.listen(5000)
tornado.ioloop.IOLoop.current().start()