From 5759bb0ad8c4dbb1a6636fb7ea265a863a01cba6 Mon Sep 17 00:00:00 2001 From: ryanjarvinen Date: Thu, 8 Sep 2011 16:19:32 -0700 Subject: [PATCH] adding a eventList function for easy mapping of event list responses to a callback function (or a widget renderer) --- eventbrite/client.py | 73 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/eventbrite/client.py b/eventbrite/client.py index 728340e..5a4fa14 100644 --- a/eventbrite/client.py +++ b/eventbrite/client.py @@ -1,6 +1,7 @@ """Simple Eventbrite client for the HTTP-based API """ import datetime +import time import httplib import logging import urllib @@ -8,10 +9,10 @@ # Input transformations def _datetime_to_string(incoming_datetime): - return incoming_datetime.strftime(eventbrite.EventbriteClient.eb_date_string) + return time.strftime("%Y-%m-%d %H:%M:%S", incoming_datetime ) def _string_to_datetime(incoming_string): - return datetime.strptime(incoming_string, eventbrite.EventbriteClient.eb_date_string) + return time.strptime(incoming_string, "%Y-%m-%d %H:%M:%S") def _boolean_one_or_zero(is_true): return (is_true and '1') or '0' @@ -108,7 +109,7 @@ def _request(self, method='', params=dict()): # construct our request url request_url = self.eventbrite_request_template % dict(host=self.eventbrite_api_endpoint, method=method, arguments=encoded_params) - self.logger.debug("REQ - %s", request_url) + #self.logger.debug("REQ - %s", request_url) # Send a GET request to Eventbrite # if using OAuth2.0 for authentication, set additional headers @@ -119,7 +120,7 @@ def _request(self, method='', params=dict()): # Read the JSON response response_data = self._https_connection.getresponse().read() - self.logger.debug("RES - %s", response_data) + #self.logger.debug("RES - %s", response_data) # decode our response response = json_lib.loads(response_data) @@ -128,27 +129,79 @@ def _request(self, method='', params=dict()): return response class EventbriteWidgets: + @staticmethod + def eventList( evnts, callback, options=None ): + # a loop for iterating over a collection of events, applying a callback to each element + #create our default response envelope + html = ['
'] + #unpack our events list based on the default response format provided by the event_search, user_list_events, or organizer_list_events API methods + if( type(evnts) == type(dict()) and 'events' in evnts \ + and type([]) == type(evnts['events']) and callable(callback)): + if options: + for evnt in evnts['events']: + html.append(callback( evnt['event'], options)) + else: + for evnt in evnts['events']: + html.append(callback( evnt['event'] )) + else: + html.append('No events were found at this time.') + html.append('
') + return '\n'.join(html) + + @staticmethod + def eventListRow( evnt ): + #decode the timestamp for start_date + start_date = _string_to_datetime( evnt['start_date'] ) + #find venue name, default to "online" + if( 'venue' in evnt and 'name' in evnt['venue'] ): + venue_name = evnt['venue']['name'] + else: + venue_name = 'online' + #generate and return the HTML for this list item + html = u'
%(start_date_str)s%(start_time_str)s%(event_title)s%(venue_label)s
' % \ + {"event_id": evnt['id'] + ,"start_date_str": time.strftime('%a, %B %e', start_date) + ,"event_title": evnt['title'] + ,"start_time_str": time.strftime('%l:%M %P', start_date) + ,"event_url": evnt['url'] + ,"venue_label": venue_name} + return html.encode('utf-8') + @staticmethod def ticketWidget(evnt): - return '
Online Ticketing for ' + str(evnt['title']) + ' powered by Eventbrite
' + html = u'
Online Ticketing for %(event_title)s powered by Eventbrite
' % \ + {'event_id': evnt['id'], 'event_title': evnt['title']} + return html.encode('utf-8') @staticmethod def registrationWidget(evnt): - return '
Online Ticketing for ' + str(evnt['title']) + ' powered by Eventbrite
' + html = u'
Online Ticketing for %(event_title)s powered by Eventbrite
' % \ + {'event_id': evnt['id'], 'event_title': evnt['title']} + return html.encode('utf-8') @staticmethod def calendarWidget(evnt): - return '
Online event registration powered by Eventbrite
' + html = u'
Online event registration powered by Eventbrite
' % \ + {'event_id': evnt['id']} + return html.encode('utf-8') @staticmethod def countdownWidget(evnt): - return '
Online event registration for ' + str(evnt['title']) + '
' + html = u'
Online event registration for %(event_title)s
' % \ + {'event_id': evnt['id'], 'event_title': evnt['title']} + return html.encode('utf-8') @staticmethod def buttonWidget(evnt): - return 'Register for ' + str(evnt['title']) + ' on Eventbrite' + html = u'Register for %(event_title)s on Eventbrite' % \ + {'event_id': evnt['id'], 'event_title': evnt['title']} + return html.encode('utf-8') @staticmethod def linkWidget(evnt, text=False, color='#000000'): text = text if text else evnt['title'] - return '' + text + '' + html = u'%(link_text)s' % \ + {'event_id': evnt['id'] + ,'link_color': color + ,'link_text': text} + return html.encode('utf-8')