A copyright violation detector running on Wikimedia Cloud Services https://tools.wmflabs.org/copyvios/
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 

74 líneas
2.0 KiB

  1. # -*- coding: utf-8 -*-
  2. from os.path import expanduser
  3. from urlparse import parse_qs
  4. from flask import g, request
  5. import oursql
  6. from sqlalchemy.pool import manage
  7. oursql = manage(oursql)
  8. __all__ = ["Query", "get_globals_db", "get_cache_db", "httpsfix", "urlstrip"]
  9. class Query(object):
  10. def __init__(self, method="GET"):
  11. self.query = {}
  12. if method == "GET":
  13. parsed = parse_qs(request.environ["QUERY_STRING"],
  14. keep_blank_values=True)
  15. elif method == "POST":
  16. size = int(request.environ.get("CONTENT_LENGTH", 0))
  17. parsed = parse_qs(request.environ["wsgi.input"].read(size),
  18. keep_blank_values=True)
  19. else:
  20. parsed = {}
  21. for key, value in parsed.iteritems():
  22. try:
  23. self.query[key] = value[-1].decode("utf8")
  24. except UnicodeDecodeError:
  25. pass
  26. def __getattr__(self, key):
  27. return self.query.get(key)
  28. def __setattr__(self, key, value):
  29. if key == "query":
  30. super(Query, self).__setattr__(key, value)
  31. else:
  32. self.query[key] = value
  33. def _connect_db(name):
  34. args = g.bot.config.wiki["_copyviosSQL"][name]
  35. args["read_default_file"] = expanduser("~/.my.cnf")
  36. args["autoping"] = True
  37. args["autoreconnect"] = True
  38. return oursql.connect(**args)
  39. def get_globals_db():
  40. if not g.globals_db:
  41. g.globals_db = _connect_db("globals")
  42. return g.globals_db
  43. def get_cache_db():
  44. if not g.cache_db:
  45. g.cache_db = _connect_db("cache")
  46. return g.cache_db
  47. def httpsfix(context, url):
  48. if url.startswith("http://"):
  49. url = url[len("http:"):]
  50. return url
  51. def urlstrip(context, url):
  52. if url.startswith("http://"):
  53. url = url[7:]
  54. if url.startswith("https://"):
  55. url = url[8:]
  56. if url.startswith("www."):
  57. url = url[4:]
  58. if url.endswith("/"):
  59. url = url[:-1]
  60. return url