summaryrefslogtreecommitdiff
path: root/banapedia/Ban.py
diff options
context:
space:
mode:
Diffstat (limited to 'banapedia/Ban.py')
-rw-r--r--banapedia/Ban.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/banapedia/Ban.py b/banapedia/Ban.py
new file mode 100644
index 0000000..d8666b4
--- /dev/null
+++ b/banapedia/Ban.py
@@ -0,0 +1,76 @@
1from banapedia.wapi.WikipediaQuery import BlockQuery
2from datetime import datetime
3import pygeoip
4
5__author__ = 'pacien'
6
7
8GEOIP_FILE = "/usr/share/GeoIP/GeoIP.dat"
9geoip = pygeoip.GeoIP(GEOIP_FILE)
10
11ISO_TIMESTAMP = "%Y-%m-%dT%H:%M:%SZ"
12
13
14class Ban:
15 def __init__(self, ip, start, end):
16 self.ip = ip
17 self.start = start
18 self.end = end
19 self.country_code = None
20
21 def get_duration(self):
22 return (self.end - self.start).days
23
24 def get_country_code(self):
25 if self.country_code is not None:
26 return self.country_code
27
28 country_code = ""
29
30 try:
31 country_code = geoip.country_code_by_addr(self.ip).lower()
32 except pygeoip.GeoIPError:
33 print("[ERROR]", "Could not determine country for ip", self.ip)
34
35 self.country_code = country_code
36 return country_code
37
38
39def map_ban(ban_dict):
40 return Ban(
41 ban_dict["user"],
42 datetime.strptime(ban_dict["timestamp"], ISO_TIMESTAMP),
43 datetime.strptime(ban_dict["expiry"], ISO_TIMESTAMP),
44 )
45
46
47def map_bans(ban_dict_list):
48 ban_list = []
49 for ban_dict in ban_dict_list:
50 ban_list.append(map_ban(ban_dict))
51
52 return ban_list
53
54
55def fetch_multipart_ban_dict(n, query_limit):
56 ban_dict_list = []
57 n_fetched = 0
58 continue_token = None
59
60 print("[INFO]", "Fetching %d bans" % n)
61 while n_fetched < n:
62 to_fetch = min(query_limit, n - n_fetched)
63 query = BlockQuery(
64 bkprop=["user", "timestamp", "expiry"],
65 bkshow=["temp", "ip"],
66 limit=to_fetch,
67 continue_token=continue_token,
68 )
69 results = query.fetch_result()
70 ban_dict_list.extend(results["query"]["blocks"])
71 continue_token = results["query-continue"]["blocks"]["bkcontinue"]
72 n_fetched += to_fetch
73 print("[INFO]", "Fetched %d over %d bans" % (n_fetched, n))
74
75 print("[INFO]", "Bans fetching complete")
76 return ban_dict_list