|
- # -*- coding: utf-8 -*-
-
- from os.path import expanduser
- from urlparse import parse_qs
-
- from flask import g, request
- import oursql
- from sqlalchemy.pool import manage
-
- oursql = manage(oursql)
-
- __all__ = ["Query", "get_globals_db", "get_cache_db", "httpsfix", "urlstrip"]
-
- class Query(object):
- def __init__(self, method="GET"):
- self.query = {}
- if method == "GET":
- parsed = parse_qs(request.environ["QUERY_STRING"])
- elif method == "POST":
- size = int(request.environ.get("CONTENT_LENGTH", 0))
- parsed = parse_qs(request.environ["wsgi.input"].read(size))
- else:
- parsed = {}
- for key, value in parsed.iteritems():
- try:
- self.query[key] = value[-1].decode("utf8")
- except UnicodeDecodeError:
- pass
-
- def __getattr__(self, key):
- return self.query.get(key)
-
- def __setattr__(self, key, value):
- if key == "query":
- super(Query, self).__setattr__(key, value)
- else:
- self.query[key] = value
-
-
- def _connect_db(name):
- args = g.bot.config.wiki["_copyviosSQL"][name]
- args["read_default_file"] = expanduser("~/.my.cnf")
- args["autoping"] = True
- args["autoreconnect"] = True
- return oursql.connect(**args)
-
- def get_globals_db():
- if not g.globals_db:
- g.globals_db = _connect_db("globals")
- return g.globals_db
-
- def get_cache_db():
- if not g.cache_db:
- g.cache_db = _connect_db("cache")
- return g.cache_db
-
- def httpsfix(context, url):
- if url.startswith("http://"):
- url = url[len("http:"):]
- return url
-
- def urlstrip(context, url):
- if url.startswith("http://"):
- url = url[7:]
- if url.startswith("https://"):
- url = url[8:]
- if url.startswith("www."):
- url = url[4:]
- if url.endswith("/"):
- url = url[:-1]
- return url
|