A copyright violation detector running on Wikimedia Cloud Services https://tools.wmflabs.org/copyvios/
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 

81 рядки
2.0 KiB

  1. # -*- coding: utf-8 -*-
  2. import datetime
  3. from os.path import expanduser
  4. from flask import g, request
  5. import oursql
  6. from sqlalchemy.pool import manage
  7. oursql = manage(oursql)
  8. __all__ = ["Query", "cache", "get_db", "get_notice", "httpsfix", "urlstrip"]
  9. class Query(object):
  10. def __init__(self, method="GET"):
  11. self.query = {}
  12. data = request.form if method == "POST" else request.args
  13. for key in data:
  14. self.query[key] = data.getlist(key)[-1]
  15. def __getattr__(self, key):
  16. return self.query.get(key)
  17. def __setattr__(self, key, value):
  18. if key == "query":
  19. super(Query, self).__setattr__(key, value)
  20. else:
  21. self.query[key] = value
  22. class _AppCache(object):
  23. def __init__(self):
  24. super(_AppCache, self).__setattr__("_data", {})
  25. def __getattr__(self, key):
  26. return self._data[key]
  27. def __setattr__(self, key, value):
  28. self._data[key] = value
  29. cache = _AppCache()
  30. def get_db():
  31. if not g._db:
  32. args = cache.bot.config.wiki["_copyviosSQL"]
  33. args["read_default_file"] = expanduser("~/.my.cnf")
  34. args["autoping"] = True
  35. args["autoreconnect"] = True
  36. g._db = oursql.connect(**args)
  37. return g._db
  38. def get_notice():
  39. try:
  40. with open(expanduser("~/copyvios_notice.html")) as fp:
  41. lines = fp.read().decode("utf8").strip().splitlines()
  42. if lines[0] == "<!-- active -->":
  43. return "\n".join(lines[1:])
  44. return None
  45. except IOError:
  46. return None
  47. def httpsfix(context, url):
  48. if url.startswith("http://"):
  49. url = url[len("http:"):]
  50. return url
  51. def parse_wiki_timestamp(timestamp):
  52. return datetime.datetime.strptime(timestamp, '%Y%m%d%H%M%S')
  53. def urlstrip(context, url):
  54. if url.startswith("http://"):
  55. url = url[7:]
  56. if url.startswith("https://"):
  57. url = url[8:]
  58. if url.startswith("www."):
  59. url = url[4:]
  60. if url.endswith("/"):
  61. url = url[:-1]
  62. return url