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,
29 subject = None):
52
53 @property
55 """id of the event"""
56 return self._id
57
58 @property
60 """title of the event"""
61 return self._title
62
63 @property
65 """artists performing in the event"""
66 return self._artists
67
68 @property
70 """headliner artist of the event"""
71 return self._headliner
72
73 @property
75 """venue of the event"""
76 return self._venue
77
78 @property
80 """start date of the event"""
81 return self._start_date
82
83 @property
85 """description of the event"""
86 return self._description
87
88 @property
90 """poster of the event"""
91 return self._image
92
93 @property
95 """url of the event's page"""
96 return self._url
97
98 @property
100 """stats of the event"""
101 return self._stats
102
103 @property
105 """tags for the event"""
106 return self._tag
107
113
114 @staticmethod
119
120 @staticmethod
122 start_date = None
123
124 if data.findtext('startTime') is not None:
125 start_date = datetime(*(
126 time.strptime(
127 "%s %s" % (
128 data.findtext('startDate').strip(),
129 data.findtext('startTime').strip()
130 ),
131 '%a, %d %b %Y %H:%M'
132 )[0:6])
133 )
134 else:
135 try:
136 start_date = datetime(*(
137 time.strptime(
138 data.findtext('startDate').strip(),
139 '%a, %d %b %Y %H:%M:%S'
140 )[0:6])
141 )
142 except ValueError:
143 try:
144 start_date = datetime(*(
145 time.strptime(
146 data.findtext('startDate').strip(),
147 '%a, %d %b %Y'
148 )[0:6])
149 )
150 except ValueError:
151 pass
152
153
154 return Event(
155 api,
156 id = int(data.findtext('id')),
157 title = data.findtext('title'),
158 artists = [Artist(api, name = a.text) for a in data.findall('artists/artist')],
159 headliner = Artist(api, name = data.findtext('artists/headliner')),
160 venue = Venue(
161 api,
162 name = data.findtext('venue/name'),
163 location = Location(
164 api,
165 city = data.findtext('venue/location/city'),
166 country = Country(
167 api,
168 name = data.findtext('venue/location/country')
169 ),
170 street = data.findtext('venue/location/street'),
171 postal_code = data.findtext('venue/location/postalcode'),
172 latitude = float(data.findtext(
173 'venue/location/{%s}point/{%s}lat' % ((Location.XMLNS,)*2)
174 )),
175 longitude = float(data.findtext(
176 'venue/location/{%s}point/{%s}long' % ((Location.XMLNS,)*2)
177 )),
178
179 ),
180 url = data.findtext('venue/url')
181 ),
182 start_date = start_date,
183 description = data.findtext('description'),
184 image = dict([(i.get('size'), i.text) for i in data.findall('image')]),
185 url = data.findtext('url'),
186 stats = Stats(
187 subject = int(data.findtext('id')),
188 attendance = int(data.findtext('attendance')),
189 reviews = int(data.findtext('reviews')),
190 ),
191 tag = data.findtext('tag')
192 )
193
195 if not self.id:
196 raise InvalidParametersError("id has to be provided.")
197 params = {'event': self.id}
198 params.update(extra_params)
199 return params
200
201 @staticmethod
203 try:
204 return hash(kwds['id'])
205 except KeyError:
206 raise InvalidParametersError("id has to be provided for hashing")
207
210
212 return self.id == other.id
213
216
219
220 from datetime import datetime
221 import time
222
223 from lastfm.api import Api
224 from lastfm.artist import Artist
225 from lastfm.error import InvalidParametersError
226 from lastfm.geo import Location, Country
227 from lastfm.stats import Stats
228 from lastfm.venue import Venue
229