kopia lustrzana https://github.com/dsblank/activitypub
FlaskMan and TornadoMan both working with defaults and filters
rodzic
1dd0eb3e97
commit
4f46f616a1
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
Ładowanie…
Reference in New Issue