From: philipp Date: Thu, 27 Jul 2017 21:59:06 +0000 (+0000) Subject: Start to use flask instead of pylons. X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wradmin.git/commitdiff_plain/c2d2b07d134a64271aede4886b8c1d0f6960cb4d Start to use flask instead of pylons. git-svn-id: http://www.winterrodeln.org/svn/wradmin/trunk@2667 7aebc617-e5e2-0310-91dc-80fb5f6d2477 --- diff --git a/README.txt b/README.txt deleted file mode 100644 index 82c87a7..0000000 --- a/README.txt +++ /dev/null @@ -1,19 +0,0 @@ -This file is for you to describe the wradmin application. Typically -you would include information such as the information below: - -Installation and Setup -====================== - -Install ``wradmin`` using easy_install:: - - easy_install wradmin - -Make a config file as follows:: - - paster make-config wradmin config.ini - -Tweak the config file as appropriate and then setup the application:: - - paster setup-app config.ini - -Then you are ready to go. diff --git a/development.ini b/development.ini deleted file mode 100644 index ce35508..0000000 --- a/development.ini +++ /dev/null @@ -1,93 +0,0 @@ -# -# wradmin - Pylons development environment configuration -# -# The %(here)s variable will be replaced with the parent directory of this file -# -[DEFAULT] -debug = true -# address which should receive any error reports -email_to = philipp.spitzer@winterrodeln.org -smtp_server = localhost -error_email_from = philipp.spitzer@winterrodeln.org - -[server:main] -use = egg:Paste#http -host = 127.0.0.1 -port = 5000 - -[app:main] -use = egg:wradmin -full_stack = true -static_files = true - -cache_dir = %(here)s/data -beaker.session.key = wradmin -beaker.session.secret = uZ7ttRbv4eWd9qMdiio - -authkit.setup.method = basic -authkit.basic.realm = Winterrodeln Admin -authkit.basic.authenticate.user.type = wradmin.lib.mediawiki:MediaWikiUsers -authkit.basic.authenticate.user.data = - -# If you'd like to fine-tune the individual locations of the cache data dirs -# for the Cache data, or the Session saves, un-comment the desired settings -# here: -#beaker.cache.data_dir = %(here)s/data/cache -#beaker.session.data_dir = %(here)s/data/sessions - -# SQLAlchemy database URL -sqlalchemy.url = mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=0 -# If we would use "use_unicode=1" or omit the parameter (because its the default), sqlalchemy requests unicode strings from the MySQLdb backend (and does not do the conversion itself), however, since the tables are defined as 'varchar(x) binary' only binary strings are returned and not converted to unicode. - -# necessary for mySQL databases -sqlalchemy.pool_recycle = 3600 -# sqlalchemy.echo_pool = 1 -# sqlalchemy.echo=true - -# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* -# Debug mode will enable the interactive debugging tool, allowing ANYONE to -# execute malicious code after an exception is raised. -#set debug = false - - -# Logging configuration -[loggers] -keys = root, routes, wradmin - -[handlers] -keys = console, file - -[formatters] -keys = generic - -[logger_root] -level = INFO -# handlers = file -handlers = console - -[logger_routes] -level = INFO -handlers = -qualname = routes.middleware -# "level = DEBUG" logs the route matched and routing variables. - -[logger_wradmin] -level = DEBUG -handlers = -qualname = wradmin - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[handler_file] -class = FileHandler -args = ('/tmp/pylons_application.log', 'a') -level = INFO -formatter = generic - -[formatter_generic] -format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/docs/index.txt b/docs/index.txt deleted file mode 100644 index 84e0369..0000000 --- a/docs/index.txt +++ /dev/null @@ -1,19 +0,0 @@ -wradmin -+++++++ - -This is the main index page of your documentation. It should be written in -`reStructuredText format `_. - -You can generate your documentation in HTML format by running this command:: - - setup.py pudge - -For this to work you will need to download and install `buildutils`_, -`pudge`_, and `pygments`_. The ``pudge`` command is disabled by -default; to ativate it in your project, run:: - - setup.py addcommand -p buildutils.pudge_command - -.. _buildutils: http://pypi.python.org/pypi/buildutils -.. _pudge: http://pudge.lesscode.org/ -.. _pygments: http://pygments.org/ diff --git a/ez_setup.py b/ez_setup.py deleted file mode 100644 index d24e845..0000000 --- a/ez_setup.py +++ /dev/null @@ -1,276 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c9" -DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', - 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', - 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', - 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', - 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', - 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', - 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', - 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', - 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', - 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', - 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', - 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', - 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', - 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', -} - -import sys, os -try: from hashlib import md5 -except ImportError: from md5 import md5 - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules - def do_download(): - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - try: - import pkg_resources - except ImportError: - return do_download() - try: - pkg_resources.require("setuptools>="+version); return - except pkg_resources.VersionConflict, e: - if was_imported: - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first, using 'easy_install -U setuptools'." - "\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - else: - del pkg_resources, sys.modules['pkg_resources'] # reload ok - return do_download() - except pkg_resources.DistributionNotFound: - return do_download() - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - - diff --git a/setup.cfg b/setup.cfg index 06bc108..cd3b572 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,12 +2,6 @@ tag_build = dev tag_svn_revision = true -[easy_install] -find_links = http://www.pylonshq.com/download/ - -[nosetests] -with-pylons = test.ini - # Babel configuration [compile_catalog] domain = wradmin diff --git a/setup.py b/setup.py index 9d4576d..faedb13 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,4 @@ -try: - from setuptools import setup, find_packages -except ImportError: - from ez_setup import use_setuptools - use_setuptools() - from setuptools import setup, find_packages +from setuptools import setup, find_packages setup( name='wradmin', @@ -13,33 +8,12 @@ setup( author_email='philipp.spitzer@winterrodeln.org', url='http://www.winterrodeln.org/', install_requires=[ - "Pylons>=1.0.2", "SQLAlchemy>=0.5", "Genshi>=0.4", - # "MySQL-python>=1.2", - # "AuthKit>=0.4.3,<=0.4.99", "lxml>=2.2", - # "matplotlib>=0.9", - # "mapnik", "Babel>=0.9", "wrpylib>=0.6.0", - "webob", ], - setup_requires=["PasteScript>=1.6.3"], - packages=find_packages(exclude=['ez_setup']), - include_package_data=True, - test_suite='nose.collector', package_data={'wradmin': ['i18n/*/LC_MESSAGES/*.mo']}, - #message_extractors={'wradmin': [ - # ('**.py', 'python', None), - # ('public/**', 'ignore', None)]}, zip_safe=False, - paster_plugins=['PasteScript', 'Pylons'], - entry_points=""" - [paste.app_factory] - main = wradmin.config.middleware:make_app - - [paste.app_install] - main = pylons.util:PylonsInstaller - """, ) diff --git a/test.ini b/test.ini deleted file mode 100644 index ee27b6a..0000000 --- a/test.ini +++ /dev/null @@ -1,21 +0,0 @@ -# -# wradmin - Pylons testing environment configuration -# -# The %(here)s variable will be replaced with the parent directory of this file -# -[DEFAULT] -debug = true -# Uncomment and replace with the address which should receive any error reports -#email_to = you@yourdomain.com -smtp_server = localhost -error_email_from = paste@localhost - -[server:main] -use = egg:Paste#http -host = 127.0.0.1 -port = 5000 - -[app:main] -use = config:development.ini - -# Add additional test specific configuration options as necessary. diff --git a/wradmin/__init__.py b/wradmin/__init__.py index e69de29..8fa96e2 100644 --- a/wradmin/__init__.py +++ b/wradmin/__init__.py @@ -0,0 +1,41 @@ +# http://flask.pocoo.org/ +# FLASK_APP=wradmin FLASK_DEBUG=1 WRADMIN_SETTINGS=development.cfg python3 -m flask run +# FLASK_APP=wradmin WRADMIN_SETTINGS=production.cfg python3 -m flask run +from flask import Flask, send_from_directory, abort, g +from sqlalchemy.engine import create_engine + + +app = Flask(__name__) +app.config.from_envvar('WRADMIN_SETTINGS') + + +def get_db(): + """Opens a new database connection if there is none yet for the + current application context. + """ + if not hasattr(g, 'db'): + g.db_engine = create_engine(app.config['DATABASE_URI']) + g.db = g.db_engine.connect() + return g.db + + +@app.teardown_appcontext +def close_db(error): + """Closes the database again at the end of the request.""" + if hasattr(g, 'db'): + g.db.close() + + +@app.route("/") +def hello(): + return send_from_directory('templates', 'index.html') + + +@app.route("/rodelbahn/") +def rodelbahn_list(): + pass + + +@app.route("/bericht/") +def bericht_list(): + pass diff --git a/wradmin/templates/__init__.py b/wradmin/templates/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/wradmin/test.cfg b/wradmin/test.cfg new file mode 100644 index 0000000..840b74b --- /dev/null +++ b/wradmin/test.cfg @@ -0,0 +1,3 @@ +DEBUG = False +SECRET_KEY = b'.\xe2{\xa4ns\xb7\xbb\x0cHR\xdf@}\xfa\x05;.K\x9bQ\xbc!=' +DATABASE_URI = 'mysql://philipp@localhost:3306/philipp_winterrodeln_wiki_wradmin_test?charset=utf8&use_unicode=1' diff --git a/wradmin/websetup.py b/wradmin/websetup.py deleted file mode 100644 index 4ccf624..0000000 --- a/wradmin/websetup.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Setup the wradmin application""" -import logging -import pylons.test - -from wradmin.config.environment import load_environment -from wradmin.model import meta - -log = logging.getLogger(__name__) - -def setup_app(command, conf, vars): - """Place any commands to setup wradmin here""" - if not pylons.test.pylonsapp: - load_environment(conf.global_conf, conf.local_conf) - - ## Create the tables if they don't already exist - # meta.metadata.create_all(bind=meta.engine)