1
2
3 __author__ = "Abhinav Sarkar <abhinav@abhinavsarkar.net>"
4 __version__ = "0.2"
5 __license__ = "GNU Lesser General Public License"
6
7 from lastfm.base import LastfmBase
8 from lastfm.mixins import Cacheable, Sharable, Shoutable
9
10 -class Event(LastfmBase, Cacheable, Sharable, Shoutable):
11 """A class representing an event."""
12 STATUS_ATTENDING = 0
13 STATUS_MAYBE = 1
14 STATUS_NOT = 2
15
16 - def init(self,
17 api,
18 id = None,
19 title = None,
20 artists = None,
21 headliner = None,
22 venue = None,
23 start_date = None,
24 description = None,
25 image = None,
26 url = None,
27 stats = None,
28 tag = None):
50
51 @property
53 """id of the event"""
54 return self._id
55
56 @property
58 """title of the event"""
59 return self._title
60
61 @property
63 """artists performing in the event"""
64 return self._artists
65
66 @property
68 """headliner artist of the event"""
69 return self._headliner
70
71 @property
73 """venue of the event"""
74 return self._venue
75
76 @property
78 """start date of the event"""
79 return self._start_date
80
81 @property
83 """description of the event"""
84 return self._description
85
86 @property
88 """poster of the event"""
89 return self._image
90
91 @property
93 """url of the event's page"""
94 return self._url
95
96 @property
98 """stats of the event"""
99 return self._stats
100
101 @property
103 """tags for the event"""
104 return self._tag
105
111
112 @staticmethod
117
118 @staticmethod
120 start_date = None
121
122 if data.findtext('startTime') is not None:
123 start_date = datetime(*(
124 time.strptime(
125 "%s %s" % (
126 data.findtext('startDate').strip(),
127 data.findtext('startTime').strip()
128 ),
129 '%a, %d %b %Y %H:%M'
130 )[0:6])
131 )
132 else:
133 try:
134 start_date = datetime(*(
135 time.strptime(
136 data.findtext('startDate').strip(),
137 '%a, %d %b %Y %H:%M:%S'
138 )[0:6])
139 )
140 except ValueError:
141 try:
142 start_date = datetime(*(
143 time.strptime(
144 data.findtext('startDate').strip(),
145 '%a, %d %b %Y'
146 )[0:6])
147 )
148 except ValueError:
149 pass
150
151
152 return Event(
153 api,
154 id = int(data.findtext('id')),
155 title = data.findtext('title'),
156 artists = [Artist(api, name = a.text) for a in data.findall('artists/artist')],
157 headliner = Artist(api, name = data.findtext('artists/headliner')),
158 venue = Venue(
159 api,
160 name = data.findtext('venue/name'),
161 location = Location(
162 api,
163 city = data.findtext('venue/location/city'),
164 country = Country(
165 api,
166 name = data.findtext('venue/location/country')
167 ),
168 street = data.findtext('venue/location/street'),
169 postal_code = data.findtext('venue/location/postalcode'),
170 latitude = float(data.findtext(
171 'venue/location/{%s}point/{%s}lat' % ((Location.XMLNS,)*2)
172 )),
173 longitude = float(data.findtext(
174 'venue/location/{%s}point/{%s}long' % ((Location.XMLNS,)*2)
175 )),
176
177 ),
178 url = data.findtext('venue/url')
179 ),
180 start_date = start_date,
181 description = data.findtext('description'),
182 image = dict([(i.get('size'), i.text) for i in data.findall('image')]),
183 url = data.findtext('url'),
184 stats = Stats(
185 subject = int(data.findtext('id')),
186 attendance = int(data.findtext('attendance')),
187 reviews = int(data.findtext('reviews')),
188 ),
189 tag = data.findtext('tag')
190 )
191
193 if not self.id:
194 raise InvalidParametersError("id has to be provided.")
195 params = {'event': self.id}
196 params.update(extra_params)
197 return params
198
199 @staticmethod
201 try:
202 return hash(kwds['id'])
203 except KeyError:
204 raise InvalidParametersError("id has to be provided for hashing")
205
208
210 return self.id == other.id
211
214
217
218 from datetime import datetime
219 import time
220
221 from lastfm.api import Api
222 from lastfm.artist import Artist
223 from lastfm.error import InvalidParametersError
224 from lastfm.geo import Location, Country
225 from lastfm.stats import Stats
226 from lastfm.venue import Venue
227