From 812ec627e83d4e0c562b23895af246783ce53582 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Jun 2019 17:57:20 +0200 Subject: [PATCH 1/7] Una possibile idea che sto per eliminare --- royalnet/web/__init__.py | 0 royalnet/web/blueprints/__init__.py | 0 royalnet/web/flaskserver.py | 15 +++++++++++++++ 3 files changed, 15 insertions(+) create mode 100644 royalnet/web/__init__.py create mode 100644 royalnet/web/blueprints/__init__.py create mode 100644 royalnet/web/flaskserver.py diff --git a/royalnet/web/__init__.py b/royalnet/web/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/royalnet/web/blueprints/__init__.py b/royalnet/web/blueprints/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/royalnet/web/flaskserver.py b/royalnet/web/flaskserver.py new file mode 100644 index 00000000..d1db0033 --- /dev/null +++ b/royalnet/web/flaskserver.py @@ -0,0 +1,15 @@ +import typing +import flask as f +from ..database import Alchemy + + +class RoyalFlask: + def __init__(self, config_obj: typing.Type): + self.app = f.Flask(__name__) + self.app.config.from_object(config_obj) + self.alchemy = Alchemy(self.app.config["RF_DATABASE_URI"], self.app.config["RF_REQUIRED_TABLES"]) + for blueprint in self.app.config["RF_BLUEPRINTS"]: + self.app.register_blueprint(blueprint) + + def debug(self): + self.app.run(host="127.0.0.1", port=1234, debug=True) From 08993451e0b40ce82ec2c58865ca1c47f2121fc8 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Jun 2019 18:18:51 +0200 Subject: [PATCH 2/7] Woah, this is progress --- requirements.txt | 2 ++ royalnet/web/alchemyhandler.py | 18 ++++++++++++++++++ royalnet/web/flaskserver.py | 24 ++++++++++++++---------- 3 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 royalnet/web/alchemyhandler.py diff --git a/requirements.txt b/requirements.txt index 6c4fba73..c1993ac5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,5 @@ ffmpeg-python>=0.1.17 Sphinx>=2.0.1 sphinx_rtd_theme>=0.4.3 PyNaCl>=1.3.0 +werkzeug>=0.15.4 +flask>=1.0.3 diff --git a/royalnet/web/alchemyhandler.py b/royalnet/web/alchemyhandler.py new file mode 100644 index 00000000..6a6a757b --- /dev/null +++ b/royalnet/web/alchemyhandler.py @@ -0,0 +1,18 @@ +import flask as f +import werkzeug.local + + +def get_alchemy_session(): + if "alchemy_session" not in f.g: + f.g.alchemy_session = f.current_app.config["RN_ALCHEMY"].Session() + return f.g.alchemy_session + + +@f.current_app.teardown_appcontext +def teardown_alchemy_session(*args, **kwargs): + _alchemy_session = f.g.pop("alchemy_session", None) + if _alchemy_session is not None: + _alchemy_session.close() + + +alchemy_session = werkzeug.local.LocalProxy(get_alchemy_session) diff --git a/royalnet/web/flaskserver.py b/royalnet/web/flaskserver.py index d1db0033..8bb0f1e8 100644 --- a/royalnet/web/flaskserver.py +++ b/royalnet/web/flaskserver.py @@ -1,15 +1,19 @@ -import typing import flask as f +import os from ..database import Alchemy -class RoyalFlask: - def __init__(self, config_obj: typing.Type): - self.app = f.Flask(__name__) - self.app.config.from_object(config_obj) - self.alchemy = Alchemy(self.app.config["RF_DATABASE_URI"], self.app.config["RF_REQUIRED_TABLES"]) - for blueprint in self.app.config["RF_BLUEPRINTS"]: - self.app.register_blueprint(blueprint) +app = f.Flask(__name__) +app.config["RN_ALCHEMY"] = Alchemy(os.environ["DB_PATH"], set()) +with app.app_context(): + from .alchemyhandler import alchemy_session as db_session - def debug(self): - self.app.run(host="127.0.0.1", port=1234, debug=True) + +@app.route("/") +def test(): + ... + return repr(db_session) + + +if __name__ == "__main__": + app.run() From 860172916ed36dab4445db93fcffbe02bca5602a Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Jun 2019 18:42:44 +0200 Subject: [PATCH 3/7] Well, this works --- royalnet/royalgamesweb.py | 12 ++++++++++++ royalnet/web/__init__.py | 3 +++ royalnet/web/alchemyhandler.py | 4 ++-- royalnet/web/blueprints/helloworld.py | 9 +++++++++ royalnet/web/flaskserver.py | 24 +++++++++--------------- 5 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 royalnet/royalgamesweb.py create mode 100644 royalnet/web/blueprints/helloworld.py diff --git a/royalnet/royalgamesweb.py b/royalnet/royalgamesweb.py new file mode 100644 index 00000000..2a010031 --- /dev/null +++ b/royalnet/royalgamesweb.py @@ -0,0 +1,12 @@ +import os +from .web import create_app +from .web.blueprints import helloworld + + +class TestConfig: + DB_PATH = os.environ["DB_PATH"] + REQUIRED_TABLES = set() + + +app = create_app(TestConfig, [helloworld.bp]) +app.run() diff --git a/royalnet/web/__init__.py b/royalnet/web/__init__.py index e69de29b..3501800d 100644 --- a/royalnet/web/__init__.py +++ b/royalnet/web/__init__.py @@ -0,0 +1,3 @@ +from .flaskserver import create_app + +__all__ = ["create_app"] diff --git a/royalnet/web/alchemyhandler.py b/royalnet/web/alchemyhandler.py index 6a6a757b..46d850a8 100644 --- a/royalnet/web/alchemyhandler.py +++ b/royalnet/web/alchemyhandler.py @@ -4,12 +4,12 @@ import werkzeug.local def get_alchemy_session(): if "alchemy_session" not in f.g: - f.g.alchemy_session = f.current_app.config["RN_ALCHEMY"].Session() + f.g.alchemy_session = f.g.alchemy.Session() return f.g.alchemy_session @f.current_app.teardown_appcontext -def teardown_alchemy_session(*args, **kwargs): +def teardown_alchemy_session(*_, **__): _alchemy_session = f.g.pop("alchemy_session", None) if _alchemy_session is not None: _alchemy_session.close() diff --git a/royalnet/web/blueprints/helloworld.py b/royalnet/web/blueprints/helloworld.py new file mode 100644 index 00000000..13cb720a --- /dev/null +++ b/royalnet/web/blueprints/helloworld.py @@ -0,0 +1,9 @@ +import flask as f + + +bp = f.Blueprint("helloworld", __name__, url_prefix="/helloworld") + + +@bp.route("/") +def helloworld(): + return "Hello world!" diff --git a/royalnet/web/flaskserver.py b/royalnet/web/flaskserver.py index 8bb0f1e8..4cac9ca2 100644 --- a/royalnet/web/flaskserver.py +++ b/royalnet/web/flaskserver.py @@ -1,19 +1,13 @@ +import typing import flask as f -import os from ..database import Alchemy -app = f.Flask(__name__) -app.config["RN_ALCHEMY"] = Alchemy(os.environ["DB_PATH"], set()) -with app.app_context(): - from .alchemyhandler import alchemy_session as db_session - - -@app.route("/") -def test(): - ... - return repr(db_session) - - -if __name__ == "__main__": - app.run() +def create_app(config_obj: typing.Type, blueprints: typing.List[f.Blueprint]): + app = f.Flask(__name__) + app.config.from_object(config_obj) + with app.app_context(): + f.g.alchemy = Alchemy(app.config["DB_PATH"], app.config["REQUIRED_TABLES"]) + for blueprint in blueprints: + app.register_blueprint(blueprint) + return app From 6eb2e35f45fb58e8debcf9dffc9ff647b1e64000 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Jun 2019 19:14:13 +0200 Subject: [PATCH 4/7] im lost --- royalnet/royalgamesweb.py | 5 ++++- royalnet/web/__init__.py | 3 ++- royalnet/web/alchemyhandler.py | 18 ------------------ royalnet/web/blueprints/helloworld.py | 19 +++++++++++++++++-- royalnet/web/flaskserver.py | 9 ++++++--- royalnet/web/royalprint.py | 16 ++++++++++++++++ 6 files changed, 45 insertions(+), 25 deletions(-) delete mode 100644 royalnet/web/alchemyhandler.py create mode 100644 royalnet/web/royalprint.py diff --git a/royalnet/royalgamesweb.py b/royalnet/royalgamesweb.py index 2a010031..23aebb00 100644 --- a/royalnet/royalgamesweb.py +++ b/royalnet/royalgamesweb.py @@ -9,4 +9,7 @@ class TestConfig: app = create_app(TestConfig, [helloworld.bp]) -app.run() + + +if __name__ == "__main__": + app.run() diff --git a/royalnet/web/__init__.py b/royalnet/web/__init__.py index 3501800d..d3899afd 100644 --- a/royalnet/web/__init__.py +++ b/royalnet/web/__init__.py @@ -1,3 +1,4 @@ from .flaskserver import create_app +from .royalprint import Royalprint -__all__ = ["create_app"] +__all__ = ["create_app", "Royalprint"] diff --git a/royalnet/web/alchemyhandler.py b/royalnet/web/alchemyhandler.py deleted file mode 100644 index 46d850a8..00000000 --- a/royalnet/web/alchemyhandler.py +++ /dev/null @@ -1,18 +0,0 @@ -import flask as f -import werkzeug.local - - -def get_alchemy_session(): - if "alchemy_session" not in f.g: - f.g.alchemy_session = f.g.alchemy.Session() - return f.g.alchemy_session - - -@f.current_app.teardown_appcontext -def teardown_alchemy_session(*_, **__): - _alchemy_session = f.g.pop("alchemy_session", None) - if _alchemy_session is not None: - _alchemy_session.close() - - -alchemy_session = werkzeug.local.LocalProxy(get_alchemy_session) diff --git a/royalnet/web/blueprints/helloworld.py b/royalnet/web/blueprints/helloworld.py index 13cb720a..fa5e6607 100644 --- a/royalnet/web/blueprints/helloworld.py +++ b/royalnet/web/blueprints/helloworld.py @@ -1,9 +1,24 @@ import flask as f +from .. import Royalprint +from ...database.tables import Royal -bp = f.Blueprint("helloworld", __name__, url_prefix="/helloworld") +bp = Royalprint("helloworld", __name__, url_prefix="/helloworld", required_tables={Royal}) @bp.route("/") def helloworld(): - return "Hello world!" + royals = f.g.alchemy_session.query(f.g.alchemy.Royal).all() + return repr(royals) + + +@bp.before_request +def before_request(): + f.g.alchemy_session = f.g.alchemy.Session() + + +@bp.after_request +def after_request(): + alchemy_session = f.g.pop("alchemy_session", None) + if alchemy_session is not None: + alchemy_session.close() diff --git a/royalnet/web/flaskserver.py b/royalnet/web/flaskserver.py index 4cac9ca2..2f9cbc4a 100644 --- a/royalnet/web/flaskserver.py +++ b/royalnet/web/flaskserver.py @@ -1,13 +1,16 @@ import typing import flask as f from ..database import Alchemy +from .royalprint import Royalprint -def create_app(config_obj: typing.Type, blueprints: typing.List[f.Blueprint]): +def create_app(config_obj: typing.Type, blueprints: typing.List[Royalprint]): app = f.Flask(__name__) app.config.from_object(config_obj) - with app.app_context(): - f.g.alchemy = Alchemy(app.config["DB_PATH"], app.config["REQUIRED_TABLES"]) + required_tables = set() for blueprint in blueprints: + required_tables.union(blueprint.required_tables) app.register_blueprint(blueprint) + with app.app_context(): + f.g.alchemy = Alchemy(app.config["DB_PATH"], required_tables) return app diff --git a/royalnet/web/royalprint.py b/royalnet/web/royalprint.py new file mode 100644 index 00000000..d4b1fb14 --- /dev/null +++ b/royalnet/web/royalprint.py @@ -0,0 +1,16 @@ +import typing +import flask as f + + +class Royalprint(f.Blueprint): + def __init__(self, name, import_name, static_folder=None, + static_url_path=None, template_folder=None, + url_prefix=None, subdomain=None, url_defaults=None, + root_path=None, required_tables: typing.Optional[set] = None): + super().__init__(name, import_name, static_folder=static_folder, + static_url_path=static_url_path, template_folder=template_folder, + url_prefix=url_prefix, subdomain=subdomain, url_defaults=url_defaults, + root_path=root_path) + self.required_tables = required_tables + if self.required_tables is None: + self.required_tables = set() From f8af192fc11ecd7749ea37a4209366849b26f7a5 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Jun 2019 20:59:50 +0200 Subject: [PATCH 5/7] OMFG IT WORKS --- royalnet/royalgamesweb.py | 4 ++-- royalnet/web/__init__.py | 3 ++- royalnet/web/alchemyhandler.py | 21 +++++++++++++++++++++ royalnet/web/blueprints/__init__.py | 4 ++++ royalnet/web/blueprints/helloworld.py | 17 ++--------------- royalnet/web/blueprints/testing.py | 13 +++++++++++++ royalnet/web/flaskserver.py | 5 ++--- 7 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 royalnet/web/alchemyhandler.py create mode 100644 royalnet/web/blueprints/testing.py diff --git a/royalnet/royalgamesweb.py b/royalnet/royalgamesweb.py index 23aebb00..3600844f 100644 --- a/royalnet/royalgamesweb.py +++ b/royalnet/royalgamesweb.py @@ -1,6 +1,6 @@ import os from .web import create_app -from .web.blueprints import helloworld +from .web.blueprints import helloworld, testing class TestConfig: @@ -8,7 +8,7 @@ class TestConfig: REQUIRED_TABLES = set() -app = create_app(TestConfig, [helloworld.bp]) +app = create_app(TestConfig, [helloworld, testing]) if __name__ == "__main__": diff --git a/royalnet/web/__init__.py b/royalnet/web/__init__.py index d3899afd..35cb06a7 100644 --- a/royalnet/web/__init__.py +++ b/royalnet/web/__init__.py @@ -1,4 +1,5 @@ from .flaskserver import create_app from .royalprint import Royalprint +from . import blueprints -__all__ = ["create_app", "Royalprint"] +__all__ = ["create_app", "Royalprint", "blueprints"] diff --git a/royalnet/web/alchemyhandler.py b/royalnet/web/alchemyhandler.py new file mode 100644 index 00000000..6cf2aa8e --- /dev/null +++ b/royalnet/web/alchemyhandler.py @@ -0,0 +1,21 @@ +import flask as f +from werkzeug.local import LocalProxy + + +alchemy = f.current_app.config["ALCHEMY"] + + +def get_alchemy_session(): + if "alchemy_session" not in f.g: + f.g.alchemy_session = alchemy.Session() + return f.g.alchemy_session + + +@f.current_app.teardown_appcontext +def teardown_alchemy_session(*_, **__): + _alchemy_session = f.g.pop("alchemy_session", None) + if _alchemy_session is not None: + _alchemy_session.close() + + +alchemy_session = LocalProxy(get_alchemy_session) diff --git a/royalnet/web/blueprints/__init__.py b/royalnet/web/blueprints/__init__.py index e69de29b..24f425d8 100644 --- a/royalnet/web/blueprints/__init__.py +++ b/royalnet/web/blueprints/__init__.py @@ -0,0 +1,4 @@ +from .helloworld import bp as helloworld +from .testing import bp as testing + +__all__ = ["helloworld", "testing"] diff --git a/royalnet/web/blueprints/helloworld.py b/royalnet/web/blueprints/helloworld.py index fa5e6607..cd8e77aa 100644 --- a/royalnet/web/blueprints/helloworld.py +++ b/royalnet/web/blueprints/helloworld.py @@ -1,24 +1,11 @@ import flask as f from .. import Royalprint -from ...database.tables import Royal -bp = Royalprint("helloworld", __name__, url_prefix="/helloworld", required_tables={Royal}) +bp = Royalprint("helloworld", __name__, url_prefix="/helloworld") @bp.route("/") def helloworld(): - royals = f.g.alchemy_session.query(f.g.alchemy.Royal).all() - return repr(royals) + return "Hello world!" - -@bp.before_request -def before_request(): - f.g.alchemy_session = f.g.alchemy.Session() - - -@bp.after_request -def after_request(): - alchemy_session = f.g.pop("alchemy_session", None) - if alchemy_session is not None: - alchemy_session.close() diff --git a/royalnet/web/blueprints/testing.py b/royalnet/web/blueprints/testing.py new file mode 100644 index 00000000..989b95af --- /dev/null +++ b/royalnet/web/blueprints/testing.py @@ -0,0 +1,13 @@ +import flask as f +from .. import Royalprint +from ...database.tables import Royal + + +bp = Royalprint("testing", __name__, url_prefix="/testing", required_tables={Royal}) + + +@bp.route("/listroyals") +def listroyals(): + from ..alchemyhandler import alchemy, alchemy_session + royals = alchemy_session.query(alchemy.Royal).all() + return f'' diff --git a/royalnet/web/flaskserver.py b/royalnet/web/flaskserver.py index 2f9cbc4a..ed22c245 100644 --- a/royalnet/web/flaskserver.py +++ b/royalnet/web/flaskserver.py @@ -9,8 +9,7 @@ def create_app(config_obj: typing.Type, blueprints: typing.List[Royalprint]): app.config.from_object(config_obj) required_tables = set() for blueprint in blueprints: - required_tables.union(blueprint.required_tables) + required_tables = required_tables.union(blueprint.required_tables) app.register_blueprint(blueprint) - with app.app_context(): - f.g.alchemy = Alchemy(app.config["DB_PATH"], required_tables) + app.config["ALCHEMY"] = Alchemy(app.config["DB_PATH"], required_tables) return app From bf0d6da143b557aff09964b6fdd4a5af32dfc533 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Jun 2019 23:52:19 +0200 Subject: [PATCH 6/7] Move blueprints into components --- .../web/blueprints/{helloworld.py => helloworld/__init__.py} | 3 +-- royalnet/web/blueprints/{testing.py => testing/__init__.py} | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) rename royalnet/web/blueprints/{helloworld.py => helloworld/__init__.py} (84%) rename royalnet/web/blueprints/{testing.py => testing/__init__.py} (84%) diff --git a/royalnet/web/blueprints/helloworld.py b/royalnet/web/blueprints/helloworld/__init__.py similarity index 84% rename from royalnet/web/blueprints/helloworld.py rename to royalnet/web/blueprints/helloworld/__init__.py index cd8e77aa..ada6eed5 100644 --- a/royalnet/web/blueprints/helloworld.py +++ b/royalnet/web/blueprints/helloworld/__init__.py @@ -1,5 +1,5 @@ import flask as f -from .. import Royalprint +from ... import Royalprint bp = Royalprint("helloworld", __name__, url_prefix="/helloworld") @@ -8,4 +8,3 @@ bp = Royalprint("helloworld", __name__, url_prefix="/helloworld") @bp.route("/") def helloworld(): return "Hello world!" - diff --git a/royalnet/web/blueprints/testing.py b/royalnet/web/blueprints/testing/__init__.py similarity index 84% rename from royalnet/web/blueprints/testing.py rename to royalnet/web/blueprints/testing/__init__.py index 989b95af..abd645e2 100644 --- a/royalnet/web/blueprints/testing.py +++ b/royalnet/web/blueprints/testing/__init__.py @@ -1,6 +1,6 @@ import flask as f -from .. import Royalprint -from ...database.tables import Royal +from ... import Royalprint +from ....database.tables import Royal bp = Royalprint("testing", __name__, url_prefix="/testing", required_tables={Royal}) From e9c9673e6e1c8732148f5c0e8e64508a149cb8e3 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 2 Jun 2019 00:56:03 +0200 Subject: [PATCH 7/7] Create test home page? --- royalnet/royalgamesweb.py | 4 +-- royalnet/web/blueprints/__init__.py | 3 +- .../web/blueprints/helloworld/__init__.py | 2 +- royalnet/web/blueprints/home/__init__.py | 10 +++++++ .../web/blueprints/home/templates/home.html | 16 ++++++++++ royalnet/web/blueprints/testing/__init__.py | 4 +-- royalnet/web/templates/base.html | 30 +++++++++++++++++++ 7 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 royalnet/web/blueprints/home/__init__.py create mode 100644 royalnet/web/blueprints/home/templates/home.html create mode 100644 royalnet/web/templates/base.html diff --git a/royalnet/royalgamesweb.py b/royalnet/royalgamesweb.py index 3600844f..9411ac95 100644 --- a/royalnet/royalgamesweb.py +++ b/royalnet/royalgamesweb.py @@ -1,6 +1,6 @@ import os from .web import create_app -from .web.blueprints import helloworld, testing +from .web.blueprints import home class TestConfig: @@ -8,7 +8,7 @@ class TestConfig: REQUIRED_TABLES = set() -app = create_app(TestConfig, [helloworld, testing]) +app = create_app(TestConfig, [home]) if __name__ == "__main__": diff --git a/royalnet/web/blueprints/__init__.py b/royalnet/web/blueprints/__init__.py index 24f425d8..aa8d16bd 100644 --- a/royalnet/web/blueprints/__init__.py +++ b/royalnet/web/blueprints/__init__.py @@ -1,4 +1,5 @@ from .helloworld import bp as helloworld from .testing import bp as testing +from .home import bp as home -__all__ = ["helloworld", "testing"] +__all__ = ["helloworld", "testing", "home"] diff --git a/royalnet/web/blueprints/helloworld/__init__.py b/royalnet/web/blueprints/helloworld/__init__.py index ada6eed5..21228d40 100644 --- a/royalnet/web/blueprints/helloworld/__init__.py +++ b/royalnet/web/blueprints/helloworld/__init__.py @@ -6,5 +6,5 @@ bp = Royalprint("helloworld", __name__, url_prefix="/helloworld") @bp.route("/") -def helloworld(): +def helloworld_index(): return "Hello world!" diff --git a/royalnet/web/blueprints/home/__init__.py b/royalnet/web/blueprints/home/__init__.py new file mode 100644 index 00000000..d37e547e --- /dev/null +++ b/royalnet/web/blueprints/home/__init__.py @@ -0,0 +1,10 @@ +import flask as f +from ... import Royalprint + + +bp = Royalprint("home", __name__, template_folder="templates") + + +@bp.route("/") +def home_index(): + return f.render_template("home.html") diff --git a/royalnet/web/blueprints/home/templates/home.html b/royalnet/web/blueprints/home/templates/home.html new file mode 100644 index 00000000..d6fb2d08 --- /dev/null +++ b/royalnet/web/blueprints/home/templates/home.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %} + Home +{% endblock %} + +{% block content %} +
+
+ Ciao! +
+
+ Ciao! +
+
+{% endblock %} \ No newline at end of file diff --git a/royalnet/web/blueprints/testing/__init__.py b/royalnet/web/blueprints/testing/__init__.py index abd645e2..5f3fd3a5 100644 --- a/royalnet/web/blueprints/testing/__init__.py +++ b/royalnet/web/blueprints/testing/__init__.py @@ -7,7 +7,7 @@ bp = Royalprint("testing", __name__, url_prefix="/testing", required_tables={Roy @bp.route("/listroyals") -def listroyals(): - from ..alchemyhandler import alchemy, alchemy_session +def testing_listroyals(): + from ...alchemyhandler import alchemy, alchemy_session royals = alchemy_session.query(alchemy.Royal).all() return f'' diff --git a/royalnet/web/templates/base.html b/royalnet/web/templates/base.html new file mode 100644 index 00000000..4445b56d --- /dev/null +++ b/royalnet/web/templates/base.html @@ -0,0 +1,30 @@ + + + + + + + + + + + {% block title %}{% endblock %} + + + + + + +
+ + Royal Games + +
+
+ {% block content %}{% endblock %} +
+
+ {% block footscripts %}{% endblock %} +
+ + \ No newline at end of file