Skip to content

Commit 2b87429

Browse files
committed
* Added photos to past events
* Bumped version to 0.0.4
1 parent b9fd630 commit 2b87429

File tree

6 files changed

+88
-44
lines changed

6 files changed

+88
-44
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ Example Usage
3434
u'Steven Cummings'
3535
>>> an_attendee.photo.thumb_url
3636
u'http://photos1.meetupstatic.com/photos/member/2/e/f/5/thumb_16212021.jpeg'
37+
>>> last_meetup.photos[0].url

docs/changelog.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ Changelog
44
Releases
55
--------
66

7+
* `Release 0.0.4 - August 21, 2011`_
78
* `Release 0.0.3 - August 13, 2011`_
89
* `Release 0.0.2 - August 13, 2011`_
910
* `Release 0.0.1 - August 7, 2011`_
1011

12+
Release 0.0.4 - August 21, 2011
13+
-------------------------------
14+
15+
* Added photos to past events.
16+
1117
Release 0.0.3 - August 13, 2011
1218
-------------------------------
1319

pythonkc_meetups/client.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pythonkc_meetups.exceptions import PythonKCMeetupsRateLimitExceeded
1313
from pythonkc_meetups.parsers import parse_event
1414
from pythonkc_meetups.parsers import parse_member_from_rsvp
15+
from pythonkc_meetups.parsers import parse_photo
1516
import httplib2
1617
import json
1718
import mimeparse
@@ -21,6 +22,7 @@
2122
MEETUP_API_HOST = 'https://api.meetup.com'
2223
EVENTS_URL = MEETUP_API_HOST + '/2/events.json'
2324
RSVPS_URL = MEETUP_API_HOST + '/2/rsvps.json'
25+
PHOTOS_URL = MEETUP_API_HOST + '/2/photos.json'
2426
GROUP_URLNAME = 'pythonkc'
2527

2628

@@ -99,14 +101,19 @@ def get_attendees(event):
99101
return (self.get_event_attendees(event['id'])
100102
if 'id' in event else None)
101103

104+
def get_photos(event):
105+
return (self.get_event_photos(event['id'])
106+
if 'id' in event else None)
107+
102108
query = urllib.urlencode({'key': self._api_key,
103109
'group_urlname': GROUP_URLNAME,
104110
'status': 'past',
105111
'desc': 'true'})
106112
url = '{0}?{1}'.format(EVENTS_URL, query)
107113
data = self._http_get_json(url)
108114
events = data['results']
109-
return [parse_event(event, get_attendees(event)) for event in events]
115+
return [parse_event(event, get_attendees(event), get_photos(event))
116+
for event in events]
110117

111118
def get_event_attendees(self, event_id):
112119
"""
@@ -137,6 +144,35 @@ def get_event_attendees(self, event_id):
137144
rsvps = data['results']
138145
return [parse_member_from_rsvp(rsvp) for rsvp in rsvps]
139146

147+
def get_event_photos(self, event_id):
148+
"""
149+
Get photos for the identified event.
150+
151+
Parameters
152+
----------
153+
event_id
154+
ID of the event to get photos for.
155+
156+
Returns
157+
-------
158+
List of ``pythonkc_meetups.types.MeetupPhoto``.
159+
160+
Exceptions
161+
----------
162+
* PythonKCMeetupsBadJson
163+
* PythonKCMeetupsBadResponse
164+
* PythonKCMeetupsMeetupDown
165+
* PythonKCMeetupsNotJson
166+
* PythonKCMeetupsRateLimitExceeded
167+
168+
"""
169+
query = urllib.urlencode({'key': self._api_key,
170+
'event_id': event_id})
171+
url = '{0}?{1}'.format(PHOTOS_URL, query)
172+
data = self._http_get_json(url)
173+
photos = data['results']
174+
return [parse_photo(photo) for photo in photos]
175+
140176
def _http_get_json(self, url):
141177
"""
142178
Make an HTTP GET request to the specified URL, check that it returned a

pythonkc_meetups/parsers.py

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
from dateutil.tz import tzutc
1111
from pythonkc_meetups.types import MeetupEvent
1212
from pythonkc_meetups.types import MeetupMember
13-
from pythonkc_meetups.types import MeetupMemberPhoto
13+
from pythonkc_meetups.types import MeetupPhoto
1414
from pythonkc_meetups.types import MeetupVenue
1515
import datetime
1616

1717

18-
def parse_event(data, attendees=None):
18+
def parse_event(data, attendees=None, photos=None):
1919
"""
2020
Parse a ``MeetupEvent`` from the given response data.
2121
@@ -35,8 +35,9 @@ def parse_event(data, attendees=None):
3535
maybe_rsvp_count=data.get('maybe_rsvp_count', None),
3636
event_url=data.get('event_url', None),
3737
photo_url=data.get('photo_url', None),
38-
venue=parse_venue(data.get('venue', None)),
39-
attendees=attendees
38+
venue=parse_venue(data['venue']) if 'venue' in data else None,
39+
attendees=attendees,
40+
photos=photos
4041
)
4142

4243

@@ -46,24 +47,22 @@ def parse_venue(data):
4647
4748
Returns
4849
-------
49-
A `pythonkc_meetups.types.`MeetupVenue`` if non-empty data is given,
50-
otherwise ``None``.
50+
A `pythonkc_meetups.types.`MeetupVenue``.
5151
5252
"""
53-
if data:
54-
return MeetupVenue(
55-
id=data.get('id', None),
56-
name=data.get('name', None),
57-
address_1=data.get('address_1', None),
58-
address_2=data.get('address_2', None),
59-
address_3=data.get('address_3', None),
60-
city=data.get('city', None),
61-
state=data.get('state', None),
62-
zip=data.get('zip', None),
63-
country=data.get('country', None),
64-
lat=data.get('lat', None),
65-
lon=data.get('lon', None)
66-
)
53+
return MeetupVenue(
54+
id=data.get('id', None),
55+
name=data.get('name', None),
56+
address_1=data.get('address_1', None),
57+
address_2=data.get('address_2', None),
58+
address_3=data.get('address_3', None),
59+
city=data.get('city', None),
60+
state=data.get('state', None),
61+
zip=data.get('zip', None),
62+
country=data.get('country', None),
63+
lat=data.get('lat', None),
64+
lon=data.get('lon', None)
65+
)
6766

6867

6968
def parse_member_from_rsvp(data):
@@ -78,33 +77,33 @@ def parse_member_from_rsvp(data):
7877
return MeetupMember(
7978
id=data['member'].get('member_id', None),
8079
name=data['member'].get('name', None),
81-
photo=parse_member_photo(data.get('member_photo', None))
80+
photo=(parse_photo(data['member_photo'])
81+
if 'member_photo' in data else None)
8282
)
8383

8484

85-
def parse_member_photo(data):
85+
def parse_photo(data):
8686
"""
87-
Parse a ``MeetupMemberPhoto`` from the given response data.
87+
Parse a ``MeetupPhoto`` from the given response data.
8888
8989
Returns
9090
-------
91-
A `pythonkc_meetups.types.`MeetupMemberPhoto`` if non-empty data is given,
92-
otherwise ``None``.
91+
A `pythonkc_meetups.types.`MeetupPhoto``.
9392
9493
"""
95-
if data:
96-
return MeetupMemberPhoto(
97-
id=data.get('id', None),
98-
url=data.get('photo_link', None),
99-
highres_url=data.get('highres_link', None),
100-
thumb_url=data.get('thumb_link', None)
101-
)
94+
return MeetupPhoto(
95+
id=data.get('photo_id', data.get('id', None)),
96+
url=data.get('photo_link', None),
97+
highres_url=data.get('highres_link', None),
98+
thumb_url=data.get('thumb_link', None)
99+
)
102100

103101

104102
def parse_datetime(utc_timestamp_ms, utc_offset_ms):
105103
"""
106104
Create a timezone-aware ``datetime.datetime`` from the given UTC timestamp
107-
(in milliseconds), if provided. Also, the offset is applied, if given.
105+
(in milliseconds), if provided. If an offest it given, it is applied to the
106+
datetime returned.
108107
109108
Parameters
110109
----------

pythonkc_meetups/types.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
URL of the event photo.
3333
attendees
3434
List of ``MeetupMember`` that attended this event if it was in the past.
35+
photos
36+
List of ``MeetupPhoto`` from the event if it was in the past.
3537
3638
MeetupVenue
3739
-----------
@@ -65,18 +67,18 @@
6567
name
6668
Full name (first & last) of the member.
6769
photo
68-
A ``MeetupMemberPhoto`` containing URLs to this member's photo resources.
70+
A ``MeetupPhoto`` containing URLs to this member's photo resources.
6971
70-
MeetupMemberPhoto
71-
-----------------
72+
MeetupPhoto
73+
-----------
7274
id
73-
Meetup.com ID for the member photo.
75+
Meetup.com ID for the photo.
7476
url
75-
URL of the member photo resource.
77+
URL of the photo resource.
7678
highres_url
77-
URL of the high-resolution version of the member photo.
79+
URL of the high-resolution version of the photo.
7880
thumb_url
79-
URL of the thumbnail version of the member photo.
81+
URL of the thumbnail version of the photo.
8082
8183
"""
8284

@@ -87,13 +89,13 @@
8789
MeetupEvent = namedtuple('MeetupEvent',
8890
['id', 'name', 'description', 'time', 'status', 'venue',
8991
'yes_rsvp_count', 'maybe_rsvp_count', 'event_url', 'photo_url',
90-
'attendees'])
92+
'attendees', 'photos'])
9193

9294
MeetupVenue = namedtuple('MeetupVenue',
9395
['id', 'name', 'address_1', 'address_2', 'address_3', 'city', 'state',
9496
'zip', 'country', 'lat', 'lon'])
9597

9698
MeetupMember = namedtuple('MeetupMember', ['id', 'name', 'photo'])
9799

98-
MeetupMemberPhoto = namedtuple('MeetupMemberPhoto',
100+
MeetupPhoto = namedtuple('MeetupPhoto',
99101
['id', 'url', 'highres_url', 'thumb_url'])

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
setup(
99
name='pythonkc-meetups',
10-
version='0.0.3',
10+
version='0.0.4',
1111
description='Provides PythonKC Meetup.com events.',
1212
license='MIT',
1313
url='https://github.com/pythonkc/pythonkc-meetups',

0 commit comments

Comments
 (0)