]> code.communitydata.science - rises_declines_wikia_code.git/blob - mediawiki_dump_tools/Mediawiki-Utilities/mw/api/collections/collection.py
Initial commit
[rises_declines_wikia_code.git] / mediawiki_dump_tools / Mediawiki-Utilities / mw / api / collections / collection.py
1 import re
2
3
4 class Collection:
5     """
6     Represents a collection of items that can be queried via the API.  This is
7     an abstract base class that should be extended
8     """
9
10     TIMESTAMP = re.compile(r"[0-9]{4}-?[0-9]{2}-?[0-9]{2}T?" +
11                            r"[0-9]{2}:?[0-9]{2}:?[0-9]{2}Z?")
12     """
13     A regular expression for matching the API's timestamp format.
14     """
15
16     DIRECTIONS = {'newer', 'older'}
17     """
18     A set of potential direction names.
19     """
20
21     def __init__(self, session):
22         """
23         :Parameters:
24             session : `mw.api.Session`
25                 An api session to use for post & get.
26         """
27         self.session = session
28     
29     def _check_direction(self, direction):
30         if direction is None:
31             return direction
32         else:
33             direction = str(direction)
34
35             assert direction in {None} | self.DIRECTIONS, \
36                 "Direction must be one of {0}".format(self.DIRECTIONS)
37
38             return direction
39
40     def _check_timestamp(self, timestamp):
41         if timestamp is None:
42             return timestamp
43         else:
44             timestamp = str(timestamp)
45
46             if not self.TIMESTAMP.match(timestamp):
47                 raise TypeError(
48                     "{0} is not formatted like ".format(repr(timestamp)) +
49                     "a MediaWiki timestamp."
50                 )
51
52             return timestamp
53
54     def _items(self, items, none=True, levels=None, type=lambda val: val):
55
56         if none and items is None:
57             return None
58         else:
59             items = {str(type(item)) for item in items}
60
61             if levels is not None:
62                 levels = {str(level) for level in levels}
63
64                 assert len(items - levels) == 0, \
65                     "items {0} not in levels {1}".format(
66                         items - levels, levels)
67
68             return "|".join(items)

Community Data Science Collective || Want to submit a patch?