Mercurial > daily-edition
annotate whoisi_cache.py @ 23:8b501dfe7d85
changed names of cmd line options to make a bit more sense
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sun, 03 Jan 2010 05:01:38 -0800 |
parents | 428d45a1ef44 |
children |
rev | line source |
---|---|
7
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
1 import logging |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
2 import urllib |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
3 import urllib2 |
11
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
4 from copy import deepcopy |
7
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
5 |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
6 try: |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
7 import json |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
8 except ImportError: |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
9 import simplejson as json |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
10 |
2 | 11 MAX_PEOPLE_REQ_SIZE = 100 |
7
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
12 DEFAULT_URL = "http://whoisi.com/" |
11
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
13 EMPTY_PERSON = {'aliases': [], |
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
14 'sites': {}, |
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
15 'name': ''} |
2 | 16 |
17 def split_seq(seq, size): | |
18 """ | |
19 Split up the given sequence into pieces of the given size. | |
20 | |
21 Taken from http://code.activestate.com/recipes/425044/. | |
22 """ | |
23 | |
24 return [seq[i:i+size] for i in range(0, len(seq), size)] | |
25 | |
7
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
26 class WhoisiServer(object): |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
27 def __init__(self, url=DEFAULT_URL, urlopen=urllib2.urlopen): |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
28 self._urlopen = urlopen |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
29 self.url = url |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
30 |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
31 def _call_api_method(self, name, query_args): |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
32 full_url = "%sapi/%s?%s" % (self.url, name, |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
33 urllib.urlencode(query_args)) |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
34 logging.debug('retrieving %s' % full_url) |
8
7b6bec689805
forgot to use a file-like object as urlopen's return value
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
35 return json.loads(self._urlopen(full_url).read()) |
7
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
36 |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
37 def get_person(self, app, person): |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
38 return self._call_api_method('getPerson', |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
39 [('app', app), |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
40 ('person', str(person))]) |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
41 |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
42 def get_people(self, app, first, last): |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
43 return self._call_api_method('getPeople', |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
44 [('app', app), |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
45 ('first', str(first)), |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
46 ('last', str(last))]) |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
47 |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
48 def get_max_person_id(self, app): |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
49 return self._call_api_method('getMaxPersonID', |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
50 [('app', app)]) |
98f1da3b585c
added WhoisiServer class and tests
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
51 |
2 | 52 class WhoisiCache(object): |
53 APP_NAME = "whoisi-cache" | |
54 | |
3 | 55 def __init__(self, server, storage, batch_size=MAX_PEOPLE_REQ_SIZE): |
2 | 56 self.server = server |
57 self.batch_size = batch_size | |
3 | 58 self.people = storage |
2 | 59 |
5
47990d4e6df7
added cache.refresh_people()
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
60 def refresh_people(self, people_ids): |
47990d4e6df7
added cache.refresh_people()
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
61 for person_id in people_ids: |
6
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
62 result = self.server.get_person(self.APP_NAME, person_id + 1) |
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
63 self.people[person_id] = result['person'] |
5
47990d4e6df7
added cache.refresh_people()
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
64 |
2 | 65 def update(self): |
10 | 66 pid = self.server.get_max_person_id(app=self.APP_NAME)['person_id'] |
2 | 67 interval = range(len(self.people) + 1, pid + 1) |
4 | 68 subintervals = split_seq(interval, self.batch_size) |
69 for subinterval in subintervals: | |
6
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
70 first = subinterval[0] |
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
71 last = subinterval[-1] |
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
72 result = self.server.get_people(app=self.APP_NAME, |
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
73 first=first, |
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
74 last=last) |
5a9e578c80fa
changed around protocol a bit
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
75 for person_id in range(first, last + 1): |
11
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
76 if str(person_id) in result['people']: |
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
77 person = result['people'][str(person_id)] |
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
78 else: |
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
79 person = deepcopy(EMPTY_PERSON) |
428d45a1ef44
dealt with case in which whoisi doesn't include deleted folks
Atul Varma <varmaa@toolness.com>
parents:
10
diff
changeset
|
80 self.people.append(person) |