def create_reminder(by, date, reminder_choice, registration, step, timezone): offset = get_reminder_minutes_offset(reminder_choice) when = date - dt.timedelta(minutes=offset) reminder, created_at = Reminder.objects.get_or_create( registration=registration) reminder.step = step reminder.by = by reminder.when = when reminder.date = date reminder.timezone = timezone reminder.save() costumer_name = registration.costumer.get_full_name() event = Event.objects.filter(reminder=reminder).first() if not event: event = Event(reminder=reminder) event.user = registration.consultant event.title = u'Ad Astra Reminder - {}'.format(costumer_name) event.description = u'You have one {} with {}'.format( reminder.get_step_display(), costumer_name) event.start = date event.end = date + dt.timedelta(minutes=30) event.save()
def save_event(request): """ Create a new event """ print "In Save Event" if request.method != "POST": print "Save brew received a non post" return HttpResponseRedirect(reverse("events_userhome")) name = request.POST.get('event_name') description = request.POST.get("event_description") # On empty POST request, return to user home. if(name.strip() == "" and description.strip() == ""): print "Empty form received" return HttpResponseRedirect(reverse("events_userhome")) # Create a new event and save it. new_event = Event() new_event.name = name new_event.description = description new_event.save() print "New Event Created ", new_event.ident print type(new_event.ident), str(new_event.ident) # Save the user as the host of the new event user = request.user.get_profile() admin = Host() admin.uid = user admin.eid = new_event admin.save() return HttpResponseRedirect(reverse("events.views.event", args=(new_event.ident,)))
def events_list(request): func_return = _init_facebook_app(request) if(func_return != False): return func_return try: graph, user, sys_user = _get_facebook_app(request) if sys_user is None: return HttpResponseRedirect("/facebook/setup/") except facebook.GraphAPIError: del request.session["access_token"] return HttpResponseRedirect("http://apps.facebook.com/"+ settings.FACEBOOK_APP_ID +"/") if request.method == 'POST': events_ids = request.POST.getlist("object_events") for event_id in events_ids: event = graph.get_object(event_id) image_url = "https://graph.facebook.com/" + event["id"] + "/picture?type=large" img_temp = NamedTemporaryFile(delete=True) img_temp.write(urllib2.urlopen(image_url).read()) img_temp.flush() user_event = Event( title = event["name"], from_date = dateutil.parser.parse(event["start_time"]), to_date = dateutil.parser.parse(event["end_time"]), address = event["location"], user = sys_user.username, add_user = sys_user, category = EventCategory.objects.get(id=1), status = 2, ) if "description" in event: user_event.description = event["description"] user_event.image.save(event["id"] + ".jpg", File(img_temp)); user_event.slug = SlugifyUniquely( event["name"], user_event.__class__) user_event.save() if len(events_ids) > 0: _add_flash_message(request, "Your events has been added") return HttpResponseRedirect( reverse('facebook_events_list') ) events = graph.get_connections(user["id"], "events") for event in events["data"]: event["start_time"] = dateutil.parser.parse(event["start_time"]) event["end_time"] = dateutil.parser.parse(event["end_time"]) event["picture_url"] = "https://graph.facebook.com/" + event["id"] + "/picture?type=normal" return dict( user = user, events = events, message = _get_flash_message(request), )
def handle(self, *args, **options): with open('E:/moviews_scrapy/events.json') as f: events = json.load(f) for event in events: event_object = Event() event_object.title = event['title'] event_object.date = event['date'] event_object.description = event['description'] event_object.category = event['category'] event_object.runtime = event['runtime'] event_object.image_url = event['images'][0]['path'] event_object.save() self.stdout.write(self.style.SUCCESS('Sucessfully Imported Events'))
def add_event(request: HttpRequest, event_form: AddEventForm,creating:bool) -> HttpResponse: if not event_form.is_valid(): messages.add_message(request, messages.ERROR, event_form.non_field_errors()) else: try: if creating: event = Event(name=event_form.cleaned_data['name'],date=event_form.cleaned_data['date'],description=event_form.cleaned_data['description']) event.save() messages.add_message(request, messages.SUCCESS, "Event Created") else: event = event_form.instance event.name = event_form.cleaned_data['name'] event.date = event_form.cleaned_data['date'] event.description = event_form.cleaned_data['description'] event.save() messages.add_message(request, messages.SUCCESS, "Event Updated") return redirect(reverse('console:edit')) except Exception: # logger.exception('Error while creating/updating a user. creating=' + str(creating) + ', req=' + "\n".join(request.readlines())) messages.add_message(request, messages.ERROR, 'Sorry, an error occurred, please alert an admin.') return None
def test_creating_new_event_and_saving_it_to_the_database(self): # Test creating a new event object. user = User.objects.create(username="******") company = Company() event = Event() event.title = "Test Driven Development with Django" event.slug = "test-driven-development-with-django" event.description = "Fantastic way to develop web applications with less bugs and stress" event.where = "Avenida Mella No.444, Plaza Hispaniola, Suite 101" event.company = company event.posted_by = user event.datetime = timezone.now() #check if our event can be safe to the DB event.save() #check if our event is created all_events_in_database = Event.objects.all() self.assertEquals(len(all_events_in_database), 1) only_event_in_database = all_events_in_database[0] self.assertEquals(only_event_in_database, event)
def create_edit(request): request_data = json.loads(request.body) pk = request_data.get('id', '') role = get_role(request.user) send_email = request_data.get('send_email', False) reminder = request_data.get('reminder', None) by = request_data.get('by', None) timezone = request_data.get('timezone', None) start = request_data.get('start', '') end = request_data.get('end', '') title = request_data.get('title', '') user_ids = request_data.get('user_ids', []) market_ids = request_data.get('market_ids', []) description = request_data.get('description', '') color = request_data.get('color', '') ids_to_create = [] if pk: event = Event.objects.get(pk=pk) is_owner = request.user == event.user else: event = Event() event.user = request.user is_owner = True if is_owner: # can delete this property? has_change = False event.all_day = False event.title = title event.description = description if color and role in ['corporate', 'admin', 'finance']: event.color = color if start: new_start = unaware_to_utc( datetime.strptime(start, "%Y-%m-%dT%H:%M:%S.%fZ")) if not new_start == event.start: has_change = True event.start = new_start if end: new_end = unaware_to_utc( datetime.strptime(end, "%Y-%m-%dT%H:%M:%S.%fZ")) if not new_end == event.end: has_change = True event.end = new_end if role in ['coordinator', 'admin', 'corporate', 'finance']: visibility = int(request_data['visibility']) if pk and ((event.visibility == 5 and not visibility == 5) or (visibility == 5 and len(market_ids) == 0)): event.markets.clear() # only request user and should see anywhere if visibility == 2: event.is_private = True if pk and not (event.visibility == visibility): EventUsers.objects.exclude(user=request.user).filter( event=event).delete() # all users elif visibility == 4: event.is_private = False # specify characters and markets elif visibility == 5: if pk: existing_ids = EventUsers.objects.filter( event=event).values_list('user_id', flat=True) ids_to_create = [ i for i in user_ids if i not in existing_ids ] ids_to_delete = [ i for i in existing_ids if i not in user_ids and not i == request.user.pk ] EventUsers.objects.filter( event=event, user_id__in=ids_to_delete).delete() else: ids_to_create = user_ids event.visibility = visibility else: event.visibility = 2 event.save() if event.visibility == 5 and len(market_ids) > 0: event.markets.set(market_ids) if has_change and pk: EventUsers.objects.filter(event=event).update(sent=False) if event.visibility == 5 and len(ids_to_create) > 0: entities_to_create = [] for user_id in ids_to_create: entities_to_create.append( EventUsers(event=event, user_id=user_id)) EventUsers.objects.bulk_create(entities_to_create) event_users, created = EventUsers.objects.get_or_create(user=request.user, event=event) if by and reminder: offset = get_reminder_minutes_offset(reminder) event_users.sending_date = event.start - dt.timedelta(minutes=offset) event_users.timezone = timezone event_users.by = by event_users.reminder = reminder event_users.save() if not pk and event.visibility in [4, 5] and send_email: query_set = User.objects.prefetch_related( 'groups', 'consultantprofile', 'consultantprofile__market', 'consultantprofile__supervisor', 'person').acs_users() if event.visibility == 5: conditions = [] q_objects = Q() if len(market_ids) > 0: conditions.append( Q(consultantprofile__market__pk__in=market_ids)) if len(ids_to_create) > 0: conditions.append(Q(pk__in=ids_to_create)) for condition in conditions: q_objects |= condition if len(conditions) > 0: query_set = query_set.filter(q_objects) mails = query_set.values_list('person__email', flat=True) if len(mails) > 0: event_start_aware = utc_to_timezone_or_default( event.start, timezone) context = { 'by': request.user, 'event': event, 'event_start_date': event_start_aware.strftime('%b %d, %Y'), 'event_start_time': event_start_aware.strftime('%I:%M %p'), 'timezone': timezone } email = EmailMessage('New event invitation in your ACS dashboard', render_to_string( 'events/emails/new_event.html', context), bcc=mails) email.content_subtype = 'html' email.send() # TODO implement serializer response = { 'id': event.id, 'title': event.title, 'start': event.start.isoformat() if event.start else '', 'end': event.end.isoformat() if event.end else '', 'description': event.description, 'url': event.url, 'allDay': event.all_day, 'userId': int(0 if event.user is None else event.user_id), 'visibility': event.visibility, 'imageUrl': (event.image.url if event.image and hasattr(event.image, 'url') else ''), 'reminderId': event.reminder_id if event.reminder_id else '', 'eventuser': { 'by': event_users.by, 'reminder': event_users.reminder } } return JsonResponse(response)
events = r.json() #Vendor.objects.all().delete() #Event.objects.all().delete() #Iterate through the events objects and save it if the object isn't #already in the database. for event in events['data']: if not Event.objects.filter( event_id=event['id'].encode('ascii', 'ignore')): event_obj = Event() event_obj.name = event['name'].encode('ascii', 'ignore') event_obj.event_id = event['id'].encode('ascii', 'ignore') event_obj.date = parser.parse(event['start_time'].encode( 'ascii', 'ignore')) event_obj.description = event['description'].encode('ascii', 'ignore') event_obj.save() #Scrape through the vendor site and gather a list of vendor names vendors_page = requests.get('http://offthegridsf.com/vendors') vendors_file = html.fromstring(vendors_page.text) vendors = vendors_file.xpath('//a[@class="otg-vendor-name-link"]/text()') vendors_list = set() #Parse the vendor list for duplicate items of the form 'x (1)', 'x (20)' #by stripping the values and adding it to a set which will not allow duplicates. for vendor in vendors: if "(" in vendor: index = vendor.index('(') vendor = vendor[0:index] vendors_list.add(vendor)
def save_event(request): print 'Saving event' if not request.is_ajax(): return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Hello, world. Not an AJAX request.'})) else: print 'Is AJAX' import pprint print 'Hér kemur hrátt data:' pprint.pprint(request.POST['data']) print 'Hér kemur JSON útgáfan:' data = json.loads(request.POST['data']) pprint.pprint(data) # Sanitise some of the data and return messages if it fails. ### TITLE ### # The title must be non-zero and no longer than 64 characters (defined in events/models.py). print 'Submitted data:' t = data['title'] if t == "": return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Title missing.', })) elif len(t) > 64: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'The title is currently '+str(len(t))+' characters long but the maximum is 64.', })) import sys print sys.stdout.encoding print type(t) print '--title: {}'.format(t.encode('UTF-8')) ### DESCRIPTION ### # There are no restrictions on the description field other than being cleaned. It may be blank and arbitrarily long. d = data['description'] # The dates must be supplied and the beginning must precede the end. print '--description: {}'.format(d.encode('UTF-8')) ### DATES ### if data['date_time_begin'] == "": return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Beginning date missing.', })) try: dtb = timezone.make_aware(parser.parse(data['date_time_begin']),timezone.get_default_timezone()) except: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Beginning date-time is not a valid datetime.', })) print '--begins: {}'.format(dtb) if data['date_time_end'] == "": return HttpResponse(json.dumps({ 'type': 'error', 'message': 'End date missing.', })) try: dte = timezone.make_aware(parser.parse(data['date_time_end']),timezone.get_default_timezone()) except: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'End date-time is not a valid datetime', })) if dte <= dtb: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'The event start time must precede the end.', })) print '--ends: {}'.format(dte) ### TYPE ### # The event-type must be supplied. et_id = data['event_type'] print '--type ID: {}'.format(et_id) if et_id== "": return HttpResponse(json.dumps({ 'type': 'error', 'message': 'No event type supplied.', })) ### EVENT ID ### print 'All the data has been submitted. Checking whether event_id has been supplied.' try: event_id = data['event_id'] print 'event_id: {}'.format(event_id) except: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'No event_id submitted.', })) if event_id == '': # If no event id has been supplied, we'll create a new event. print 'Creating event...' event = Event(title=t, description=d, date_time_begin=dtb, date_time_end=dte, event_type_id=et_id) else: # else we update the existing one. print 'Updating event...' event = Event.objects.get(pk=event_id) event.title = t event.description = d event.date_time_begin = dtb event.date_time_end = dte event.event_type_id = et_id # Now save the event try: event.clean_fields() event.save() print 'The event is: ------' pprint.pprint(vars(event)) print '--------------------' except: return HttpResponse (json.dumps({ 'type': 'error', 'message': 'Could not save event.'})) # Now that the event has been taken care of, let's sort out the event roles etc. # Flow: # For each role: for role in Role.objects.all(): print 'Role ID %s' % role.id print 'Role is %s' % role try: participants_exist = data['role'][role.id]['participants'] except: participants_exist = False #print participants_exist if participants_exist: # If we want eventroles, check whether these need to be created and otherwise update them. currentparticipants = [] # This will be populated below if the event exists (and currently has any participants). currentgroups = [] # This will be populated below if the event exists (and currently has any participants). currentmembers= [] # This will be populated below if the event exists (and currently has any participants). # The wantedparticipantIDs is a list of invitations compiled from a # drop-down in the interface. the drop-down contains positions, # groups, members and the option to make it an open event (inviting # all members). To differentiate between the primary keys of # positions, groups and members, these are prefixed with the # characters 'p', 'g' and 'm', respectively. wantedparticipantIDs = data['role'][role.id]['participants'] print 'Wanted participantsID: {}'.format(wantedparticipantIDs) wantedpositions = [Position.objects.get(pk=int(positionid[1:])) for positionid in wantedparticipantIDs if positionid[0]=='p'] print 'We want event role {} with positions {}'.format(role, wantedpositions) wantedgroups = [Group.objects.get(pk=int(groupid[1:])) for groupid in wantedparticipantIDs if groupid[0]=='g'] print 'We want event role {} with groups {}'.format(role, wantedgroups) wantedmembers= [Member.objects.get(pk=int(memberid[1:])) for memberid in wantedparticipantIDs if memberid[0]=='m'] print 'We want event role {} with members {}'.format(role, wantedmembers) # Check whether the event is open. is_open = ('a' in wantedparticipantIDs) # Workflow: # 1. Get or create the EventRole. # 2. Remove unwanted invitations. # 3. Update the minimum and maximum number of participants. # 4. Adding wanted invitations try: # check whether the EventRole already exists # 1. Get the EventRole, stored in eventrole. eventrole = EventRole.objects.get(event_id=event.id,role_id=role.id) print 'EventRole "{}" already exists.'.format(eventrole) except: # Since there is no existing EventRole, we need to: # 1. Create an EventRole, and save it as eventrole. # and that's it! Adding participants is done below for both # existing and recently created EventRoles. try: print 'event_id: {}'.format(event.id) print 'role_id: {}'.format(role.id) # TODO: Later feature... #eventrole = EventRole(event_id=event.id,role_id=role.id,minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max'])) eventrole = EventRole(event_id=event.id,role_id=role.id,is_open=is_open) print 'No EventRole exists, creating {}.'.format(eventrole) except: print 'Could not create eventrole.' return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not create eventrole.' })) try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save eventrole.' })) # 2. Remove unwanted invitations. currentpositions = eventrole.invited_positions.all() currentgroups = eventrole.invited_groups.all() currentmembers= eventrole.invited_members.all() print 'currentpositions: {}'.format(currentpositions) print 'currentgroups: {}'.format(currentgroups) print 'currentmembers: {}'.format(currentmembers) print 'EventRole already has these invitations:' for position in currentpositions: print '>>{} ({})'.format(position, position.id) if position not in wantedpositions: print '-- ID is {}: We don\'t want {}.'.format(group.id,group) try: #print 'DEBUG: {}'.format(eventrole.invited_positions) pi = PositionInvitation.objects.get(event_role=eventrole,position=position) pi.delete() except: print 'Could not remove position {} from {}'.format(group,currentgroups) return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not remove position '+str(position)+' from '+currentpositions+'.' })) else: print '++ ID is {}: We keep position {}.'.format(position.id,position) for group in currentgroups: print '>>{} ({})'.format(group, group.id) if group not in wantedgroups: print '-- ID is {}: We don\'t want {}.'.format(group.id,group) try: #print 'DEBUG: {}'.format(eventrole.invited_groups) gi = GroupInvitation.objects.get(event_role=eventrole,group=group) gi.delete() except: print 'Could not remove group {} from {}'.format(group,currentgroups) return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not remove group '+str(group)+' from '+currentgroups+'.' })) else: print '++ ID is {}: We keep group {}.'.format(group.id,group) for member in currentmembers: print '>>{} ({})'.format(member, member.id) if member not in wantedmembers: print '-- ID is {}: We don\'t want {}.'.format(member.id,member) try: #print 'DEBUG: {}'.format(eventrole.invited_members) mi = MemberInvitation.objects.get(event_role=eventrole,member=member) mi.delete() except: print 'Could not remove member {} from {}'.format(member,currentmembers) return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not remove member '+str(member)+' from '+currentmembers+'.' })) else: print '++ ID is {}: We keep member {}.'.format(member.id,member) # Finally set whether the EventRole is open to all members: eventrole.is_open = is_open try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not update whether the EventRole is open numbers.' })) # 3. Update the minimum and maximum number of participants. # TODO: Later feature... #if eventrole.minimum != int(data['role'][role.id]['min']) or eventrole.maximum != int(data['role'][role.id]['max']): # eventrole.minimum = int(data['role'][role.id]['min']) # eventrole.maximum = int(data['role'][role.id]['max']) # try: # eventrole.clean_fields() # eventrole.save() # print 'eventrole saved: {}.'.format(eventrole) # except: # return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not update eventrole max/min numbers.' })) # 4. Adding wanted invitations # Now that we have the eventrole and it has been stripped of its # unwanted participatns, let's add the wanted ones. # Workflow: # For each wanted participant, # if they're not currently invited, # create a {Position,Group,Member}Invitation and attach it to the EventRole # For each participant print 'Adding invitations:' print 'Wanted positions: {}'.format(wantedpositions) print 'Wanted groups: {}'.format(wantedgroups) print 'Wanted members: {}'.format(wantedmembers) for position in wantedpositions: print '>>{} ({})'.format(position, position.id) if position not in currentpositions: print '++ Position {} is not invited: Create PositionInvitation!'.format(position) print eventrole print position pi = PositionInvitation(event_role=eventrole, position=position) print '++ PositionInvitation created: '.format(pi) try: pi.clean_fields() pi.save() print '++ PositionInvitation saved' except: print 'ERROR: Could not save PositionInvitation {}'.format(pi) return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save PositionInvitation '+pi+'.' })) else: print '.. Position {} already invited: nothing to do. :-)'.format(position) print 'Positions done!' for group in wantedgroups: print '>>{} ({})'.format(group, group.id) if group not in currentgroups: print '++ Group {} is not invited: Create GroupInvitation!'.format(group) gi = GroupInvitation(event_role=eventrole, group=group) print '++ GroupInvitation created: '.format(gi) try: gi.clean_fields() gi.save() print '++ GroupInvitation saved' except: print 'ERROR: Could not save GroupInvitation {}'.format(gi) return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save GroupInvitation '+gi+'.' })) else: print '.. Group {} already invited: nothing to do. :-)'.format(group) print 'Groups done!' for member in wantedmembers: print '>>{} ({})'.format(member, member.id) if member not in currentmembers: print '++ Member {} is not invited: Create MemberInvitation!'.format(member) mi = MemberInvitation(event_role=eventrole, member=member) print '++ MemberInvitation created: '.format(mi) try: mi.clean_fields() mi.save() print '++ MemberInvitation saved' except: print 'ERROR: Could not save MemberInvitation {}'.format(mi) return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save MemberInvitation '+mi+'.' })) else: print '.. Member {} already invited: nothing to do. :-)'.format(member) print 'All done!' else: #if we don't want the role: print 'No role wanted.' try: # check if the role exists and must be removed eventrole = EventRole.objects.get(event__id=event.id,role__id=role.id) print 'Removing eventrole: %s' % eventrole eventrole.delete() except: # No role wanted. No role exists. All good. print 'No role exists. All good.' print ' ..... ' # for current tags: # if tag not in submitted data: # delete eventtag(event=event,tag=tag) # for all TagTypes: # for submitted tags: # if tag not currently saved: # create eventtag(event=event,tag=tag) print 'Do tags.' print TagType.objects.all() print 'Iterate over eventtags' for tag in event.tags.all(): try: print 'trying' tagslist=data['tag_type'][tagtype.id] #if tagslist == None: # tagslist=[] #else: # tagslist='hi' print 'tried' except: print 'excepting' tagslist=[] print 'excepted' print 'tagslist: '+str(tagslist) if str(tag.id) not in tagslist: print 'tag id '+str(tag.id)+' is not in '+str(data['tag_type'][tag.tag_type.id]) print 'delete eventtag(event=event,tag='+str(tag)+')' try: et=EventTag.objects.get(event=event,tag=tag) except: print 'Could not get EventTag.' return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not get EventTag.' })) try: et.delete() except: print 'Could not delete EventTag.' return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not delete EventTag '+et+'.' })) else: print 'tag id '+str(tag.id)+' is in '+str(data['tag_type'][tag.tag_type.id]) print 'Do nothing...' print 'Iterate over tagtypes' for tagtype in TagType.objects.all(): if event.event_type in tagtype.event_type.all(): print tagtype print tagtype.id try: print 'I am trying' tagslist=data['tag_type'][tagtype.id] print tagslist if tagslist == None: tagslist=[] print 'I tried' except: print 'I am excepting' tagslist=[] print 'I have excepted' print 'tagslist: '+str(tagslist) for tag_id in tagslist: tag=Tag.objects.get(pk=tag_id) print tag if tag not in event.tags.all(): print 'tag '+str(tag)+' is not in '+str(event.tags.all()) print 'create eventtag(event=event,tag='+str(tag)+')' try: et=EventTag(event=event,tag=tag) except: print 'Could not create EventTag.' return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not create EventTag.' })) try: et.clean_fields() et.save() except: print 'Could not save EventTag.' return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save EventTag '+et+'.' })) else: print 'tag '+str(tag)+' is already in '+str(event.tags.all()) print 'Nothing to do...' else: print 'tagtype '+str(tagtype)+' is not valid for this event' return HttpResponse(json.dumps({ 'type': 'success', 'event_id': event.id }))
def create_event(request): if request.method == 'POST': event_name = request.POST.get('event_name', None) event_image = request.POST.get('event_image', None) start_date = request.POST.get('start_date', None) end_date = request.POST.get('end_date', None) due_date = request.POST.get('due_date', None) goal = request.POST.get('goal', None) progress = request.POST.get('progress', None) event_description = request.POST.get('event_description', None) location_street = request.POST.get('location_street', None) location_number = request.POST.get('location_number', None) location_suburb = request.POST.get('location_suburb', None) location_neighborhood = request.POST.get('location_neighborhood', None) location_zip_code = request.POST.get('location_zip_code', None) location_city = request.POST.get('location_city', None) minimum_attendance = request.POST.get('minimum_attendance', None) maximum_attendance = request.POST.get('maximum_attendance', None) category_name = request.POST.get('category_name', None) restriction_name = request.POST.get('restriction_name', None) restriction_description = request.POST.get('restriction_description', None) tier_name = request.POST.get('tier_name', None) tier_price = request.POST.get('tier_price', None) tier_description = request.POST.get('tier_description', None) if (event_name and event_image and start_date and end_date and due_date and goal and progress and event_description and location_street and location_number and location_suburb and location_neighborhood and location_zip_code and location_city and minimum_attendance and maximum_attendance and category_name and restriction_name and restriction_description and tier_name and tier_price and tier_description): event = Event() event.name = event_name event.event_image = event_image event.start_date = start_date event.end_date = end_date event.due_date = due_date event.goal = goal event.progress = progress event.description = event_description event.location_street = location_street event.location_number = location_number event.location_suburb = location_suburb event.location_neighborhood = location_neighborhood event.location_zip_code = location_zip_code event.location_city = location_city event.minimum_attendance = minimum_attendance event.maximum_attendance = maximum_attendance event.save() category = EventCategory() category.category_name = category_name category.save() restriction = Restriction() restriction.name = restriction_name restriction.description = restriction_description restriction.save() tier = EventTier() tier.event = event tier.name = tier_name tier.price = tier_price tier.description = tier_description tier.save() return redirect('/events') return render(request, 'events/create.html', {})
events_page = 'OffTheGridSF/events' r = requests.get('https://graph.facebook.com/' + events_page + '?access_token=1705064953059017|e3b4439e3577e83f7f6a095a875f3f74') events = r.json() #Vendor.objects.all().delete() #Event.objects.all().delete() #Iterate through the events objects and save it if the object isn't #already in the database. for event in events['data']: if not Event.objects.filter(event_id=event['id'].encode('ascii','ignore')): event_obj = Event() event_obj.name = event['name'].encode('ascii','ignore') event_obj.event_id = event['id'].encode('ascii','ignore') event_obj.date = parser.parse(event['start_time'].encode('ascii','ignore')) event_obj.description = event['description'].encode('ascii','ignore') event_obj.save() #Scrape through the vendor site and gather a list of vendor names vendors_page = requests.get('http://offthegridsf.com/vendors') vendors_file = html.fromstring(vendors_page.text) vendors = vendors_file.xpath('//a[@class="otg-vendor-name-link"]/text()') vendors_list = set() #Parse the vendor list for duplicate items of the form 'x (1)', 'x (20)' #by stripping the values and adding it to a set which will not allow duplicates. for vendor in vendors: if "(" in vendor: index = vendor.index('(') vendor = vendor[0:index] vendors_list.add(vendor)
def save_event(request): if request.is_ajax() or True: print 'Is AJAX' # TODO: Add handler for these below. They are required and must be submitted or else the form will not validate. Or perhaps the clean_fields() exception is enough...? import pprint print 'Hér kemur hrátt data:' pprint.pprint(request.POST['data']) print 'Hér kemur JSON útgáfan:' data = json.loads(request.POST['data']) pprint.pprint(data) t = data['title'] d = data['description'] dtb = timezone.make_aware(parser.parse(data['date_time_begin']), timezone.get_default_timezone()) dte = timezone.make_aware(parser.parse(data['date_time_end']), timezone.get_default_timezone()) et_id = data['event_type'] try: event_id = data['event_id'] if event_id == '': # If no event id has been supplied, we'll create a new event. event = Event(title=t, description=d, date_time_begin=dtb, date_time_end=dte, event_type_id=et_id) else: # else we update the existing one. event = Event.objects.get(pk=event_id) event.title = t event.description = d event.date_time_begin = dtb event.date_time_end = dte event.event_type_id = et_id #return HttpResponse('Event fields updated.') # Now save the event try: event.clean_fields() event.save() print 'The event is: ------' print(vars(event)) print '--------------------' except: return HttpResponse("Hello, world. Could not save event.") # Now that the event has been taken care of, let's sort out the event roles etc. # Flow: # For each role: for role in Role.objects.all(): print 'Role ID %s' % role.id print 'Role is %s' % role try: #if we want the role: currentparticipants = [ ] # This will be populated below if the event exists (and currently has any participants). currentgroups = [ ] # This will be populated below if the event exists (and currently has any participants). currentmembers = [ ] # This will be populated below if the event exists (and currently has any participants). wantedparticipantIDs = data['role'][ role.id]['participants'] print 'Wanted participantsID: {}'.format( wantedparticipantIDs) wantedgroups = [ Group.objects.get(pk=int(groupid[1:])) for groupid in wantedparticipantIDs if groupid[0] == 'g' ] print 'We want event role {} with groups {}'.format( role, wantedgroups) wantedmembers = [ Member.objects.get(pk=int(memberid[1:])) for memberid in wantedparticipantIDs if memberid[0] == 'm' ] print 'We want event role {} with members {}'.format( role, wantedmembers) try: #check whether the EventRole already exists # In the event that an EventRole already exists, we have to: # 1. Get the EventRole, stored in eventrole. # 2. Remove unwanted participants # Adding wanted participants is shared with EventRoles that # need to be created so we're doing that later on. # 3. Update the minimum and maximum number of participants # 1. eventrole = EventRole.objects.get(event_id=event.id, role_id=role.id) print 'EventRole "{}" already exists.'.format( eventrole) # 2. #currentgroups= GroupInvitation.objects.filter(event_role=eventrole) currentgroups = eventrole.invited_groups.all() currentmembers = eventrole.invited_members.all() print 'currentgroups: {}'.format(currentgroups) print 'currentmembers: {}'.format(currentmembers) print 'EventRole already has these invitations:' for group in currentgroups: print '>>{} ({})'.format(group, group.id) #print 'Comare {} with {}'.format(group.id,wantedgroups) if group not in wantedgroups: print '-- ID is {}: We don\'t want {}.'.format( group.id, group) #gi = GroupInvitation(event_role=eventrole,group=group) #print 'Removing group {} from eventrole {}'.format(group,eventrole) #print 'DEBUG' try: print 'DEBUG: {}'.format( eventrole.invited_groups) gi = GroupInvitation.objects.get( event_role=eventrole, group=group) #print gi gi.delete() print 'BINGO' except: print 'Could not remove group {} from {}'.format( group, currentgroups) else: print '++ ID is {}: We keep {}.'.format( group.id, group) for member in currentmembers: print '>>{} ({})'.format(member, member.id) if member not in wantedmembers: print '-- ID is {}: We don\'t want {}.'.format( member.id, member) try: print 'DEBUG: {}'.format( eventrole.invited_members) mi = MemberInvitation.objects.get( event_role=eventrole, member=member) #print mi mi.delete() print 'BINGO' except: print 'Could not remove member {} from {}'.format( member, currentmembers) else: print '++ ID is {}: We keep {}.'.format( member.id, member) # 3. if eventrole.minimum != int(data['role'][ role.id]['min']) or eventrole.maximum != int( data['role'][role.id]['max']): eventrole.minimum = int( data['role'][role.id]['min']) eventrole.maximum = int( data['role'][role.id]['max']) try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse( 'Hello, world. Could not update eventrole max/min numbers.' ) except: #else # Since there is no existing EventRole, we need to: # 1. Create an EventRole, and save it as eventrole. # and that's it! Adding participants is done below for both # existing and recently created EventRoles. eventrole = EventRole( event_id=event.id, role_id=role.id, minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max'])) print 'No EventRole exists, creating {}.'.format( eventrole) try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse( 'Hello, world. Could not save eventrole.') # Now that we have the eventrole and it has been stripped of its # unwanted participatns, let's add the wanted ones. # Workflow: # For each wanted participant, # if they're not currently invited, # create a GroupInvitation and attach it to the EventRole # For each participant print 'Adding invitations:' print 'Wanted groups: {}'.format(wantedgroups) print 'Wanted members: {}'.format(wantedmembers) for group in wantedgroups: print '>>{} ({})'.format(group, group.id) if group not in currentgroups: print '++ Group {} is not invited: Create GroupInvitation!'.format( group) gi = GroupInvitation(event_role=eventrole, group=group) print '++ GroupInvitation created: '.format(gi) try: gi.clean_fields() gi.save() print '++ GroupInvitation saved' except: print 'ERROR: Could not save GroupInvitation {}'.format( gi) else: print '.. Group {} already invited: nothing to do. :-)'.format( group) print 'Groups done!' for member in wantedmembers: print '>>{} ({})'.format(member, member.id) if member not in currentmembers: print '++ Member {} is not invited: Create MemberInvitation!'.format( member) mi = MemberInvitation(event_role=eventrole, member=member) print '++ MemberInvitation created: '.format(mi) try: mi.clean_fields() mi.save() print '++ MemberInvitation saved' except: print 'ERROR: Could not save MemberInvitation {}'.format( mi) else: print '.. Member {} already invited: nothing to do. :-)'.format( member) print 'All done!' except: #if we don't want the role: print 'No role wanted.' try: # check if the role exists and must be removed eventrole = EventRole.objects.get(event__id=event.id, role__id=role.id) print 'Removing eventrole: %s' % eventrole eventrole.delete() except: # No role wanted. No role exists. All good. print 'No role exists. All good.' print ' ..... ' except: return HttpResponse("Hello, world. Could not create event.") return HttpResponse(event.id) else: return HttpResponse("Hello, world. Not AJAX request.")
def create_event(self, event_dict): e = Event(id=event_dict.get('eventId')) e.title = u"{0} {1}".format(event_dict.get('title', '').strip(), event_dict.get('subTitle', '').strip()) e.description = event_dict.get('description', '') start = arrow.get(event_dict.get('startDay')).naive start = timezone.make_aware(start, timezone.get_default_timezone()) end = arrow.get(event_dict.get('endDay')).naive end = timezone.make_aware(end, timezone.get_default_timezone()) time_string = event_dict.get('dateFreeForm', '\n').lower().splitlines() if time_string: time_string = time_string[0] time = time_string.replace('midnight', '12:00').replace( 'close', '4:00').replace('closing', '4:00').replace(';', ':') time = re.sub('[^0-9:]', ' ', time) time = time.split() if time: start_time = time[0] if ":" not in start_time: start_time += ":00" start_time = parse_time(start_time) start = start.replace(hour=start_time.hour, minute=start_time.minute) if start_time.hour < 4: start += timezone.timedelta(days=1) else: start += timezone.timedelta(hours=12) if any(separator in time_string for separator in ['to', 'and', '&']) and len(time) > 1: print time_string print time print e.id end_time = time[1] if ':' not in end_time: end_time += ":00" end_time = parse_time(end_time) end = end.replace(hour=end_time.hour, minute=end_time.minute) if end_time.hour < 6: end += timezone.timedelta(days=1) else: end += timezone.timedelta(hours=12) if 'and' in time_string or '&' in time_string: end += timezone.timedelta(hours=1, minutes=30) else: end = start + timezone.timedelta(hours=1, minutes=30) e.start = start e.end = end if event_dict.get('media'): e.photo = u"images/{0}".format(event_dict.get('media')[0]['fileName']) e.save() leaders = {} for performer in event_dict.get('performers'): if performer.get('personTypeId') == 69: leaders.setdefault(e.id, []).append(performer.get('personId')) else: gig, _ = GigPlayed.objects.get_or_create( artist_id=performer.get('personId'), event_id=e.id, role_id=performer.get('personTypeId'), sort_order=performer.get('sortOrder') or "" ) for event_id, artists in leaders.iteritems(): for artist_id in artists: # In some rare cases, artist is only listed as leader, without an instrument # so we create a new GigPlayed object with that role try: gig = GigPlayed.objects.get(event_id=event_id, artist_id=artist_id) gig.is_leader = True gig.save() except GigPlayed.DoesNotExist: gig = GigPlayed.objects.create( artist_id=artist_id, event_id=event_id, role_id=69, is_leader=True, sort_order=-1 ) return e
def events_list(request): func_return = _init_facebook_app(request) if (func_return != False): return func_return try: graph, user, sys_user = _get_facebook_app(request) if sys_user is None: return HttpResponseRedirect("/facebook/setup/") except facebook.GraphAPIError: del request.session["access_token"] return HttpResponseRedirect("http://apps.facebook.com/" + settings.FACEBOOK_APP_ID + "/") if request.method == 'POST': events_ids = request.POST.getlist("object_events") for event_id in events_ids: event = graph.get_object(event_id) image_url = "https://graph.facebook.com/" + event[ "id"] + "/picture?type=large" img_temp = NamedTemporaryFile(delete=True) img_temp.write(urllib2.urlopen(image_url).read()) img_temp.flush() user_event = Event( title=event["name"], from_date=dateutil.parser.parse(event["start_time"]), to_date=dateutil.parser.parse(event["end_time"]), address=event["location"], user=sys_user.username, add_user=sys_user, category=EventCategory.objects.get(id=1), status=2, ) if "description" in event: user_event.description = event["description"] user_event.image.save(event["id"] + ".jpg", File(img_temp)) user_event.slug = SlugifyUniquely(event["name"], user_event.__class__) user_event.save() if len(events_ids) > 0: _add_flash_message(request, "Your events has been added") return HttpResponseRedirect(reverse('facebook_events_list')) events = graph.get_connections(user["id"], "events") for event in events["data"]: event["start_time"] = dateutil.parser.parse(event["start_time"]) event["end_time"] = dateutil.parser.parse(event["end_time"]) event["picture_url"] = "https://graph.facebook.com/" + event[ "id"] + "/picture?type=normal" return dict( user=user, events=events, message=_get_flash_message(request), )
def save_event(request): print 'Saving event' if not request.is_ajax(): return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Hello, world. Not an AJAX request.' })) else: print 'Is AJAX' import pprint print 'Hér kemur hrátt data:' pprint.pprint(request.POST['data']) print 'Hér kemur JSON útgáfan:' data = json.loads(request.POST['data']) pprint.pprint(data) # Sanitise some of the data and return messages if it fails. ### TITLE ### # The title must be non-zero and no longer than 64 characters (defined in events/models.py). print 'Submitted data:' t = data['title'] if t == "": return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Title missing.', })) elif len(t) > 64: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'The title is currently ' + str(len(t)) + ' characters long but the maximum is 64.', })) import sys print sys.stdout.encoding print type(t) print '--title: {}'.format(t.encode('UTF-8')) ### DESCRIPTION ### # There are no restrictions on the description field other than being cleaned. It may be blank and arbitrarily long. d = data['description'] # The dates must be supplied and the beginning must precede the end. print '--description: {}'.format(d.encode('UTF-8')) ### DATES ### if data['date_time_begin'] == "": return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Beginning date missing.', })) try: dtb = timezone.make_aware(parser.parse(data['date_time_begin']), timezone.get_default_timezone()) except: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Beginning date-time is not a valid datetime.', })) print '--begins: {}'.format(dtb) if data['date_time_end'] == "": return HttpResponse( json.dumps({ 'type': 'error', 'message': 'End date missing.', })) try: dte = timezone.make_aware(parser.parse(data['date_time_end']), timezone.get_default_timezone()) except: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'End date-time is not a valid datetime', })) if dte <= dtb: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'The event start time must precede the end.', })) print '--ends: {}'.format(dte) ### TYPE ### # The event-type must be supplied. et_id = data['event_type'] print '--type ID: {}'.format(et_id) if et_id == "": return HttpResponse( json.dumps({ 'type': 'error', 'message': 'No event type supplied.', })) ### EVENT ID ### print 'All the data has been submitted. Checking whether event_id has been supplied.' try: event_id = data['event_id'] print 'event_id: {}'.format(event_id) except: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'No event_id submitted.', })) if event_id == '': # If no event id has been supplied, we'll create a new event. print 'Creating event...' event = Event(title=t, description=d, date_time_begin=dtb, date_time_end=dte, event_type_id=et_id) else: # else we update the existing one. print 'Updating event...' event = Event.objects.get(pk=event_id) event.title = t event.description = d event.date_time_begin = dtb event.date_time_end = dte event.event_type_id = et_id # Now save the event try: event.clean_fields() event.save() print 'The event is: ------' pprint.pprint(vars(event)) print '--------------------' except: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not save event.' })) # Now that the event has been taken care of, let's sort out the event roles etc. # Flow: # For each role: for role in Role.objects.all(): print 'Role ID %s' % role.id print 'Role is %s' % role try: participants_exist = data['role'][role.id]['participants'] except: participants_exist = False #print participants_exist if participants_exist: # If we want eventroles, check whether these need to be created and otherwise update them. currentparticipants = [ ] # This will be populated below if the event exists (and currently has any participants). currentgroups = [ ] # This will be populated below if the event exists (and currently has any participants). currentmembers = [ ] # This will be populated below if the event exists (and currently has any participants). # The wantedparticipantIDs is a list of invitations compiled from a # drop-down in the interface. the drop-down contains positions, # groups, members and the option to make it an open event (inviting # all members). To differentiate between the primary keys of # positions, groups and members, these are prefixed with the # characters 'p', 'g' and 'm', respectively. wantedparticipantIDs = data['role'][role.id]['participants'] print 'Wanted participantsID: {}'.format(wantedparticipantIDs) wantedpositions = [ Position.objects.get(pk=int(positionid[1:])) for positionid in wantedparticipantIDs if positionid[0] == 'p' ] print 'We want event role {} with positions {}'.format( role, wantedpositions) wantedgroups = [ Group.objects.get(pk=int(groupid[1:])) for groupid in wantedparticipantIDs if groupid[0] == 'g' ] print 'We want event role {} with groups {}'.format( role, wantedgroups) wantedmembers = [ Member.objects.get(pk=int(memberid[1:])) for memberid in wantedparticipantIDs if memberid[0] == 'm' ] print 'We want event role {} with members {}'.format( role, wantedmembers) # Check whether the event is open. is_open = ('a' in wantedparticipantIDs) # Workflow: # 1. Get or create the EventRole. # 2. Remove unwanted invitations. # 3. Update the minimum and maximum number of participants. # 4. Adding wanted invitations try: # check whether the EventRole already exists # 1. Get the EventRole, stored in eventrole. eventrole = EventRole.objects.get(event_id=event.id, role_id=role.id) print 'EventRole "{}" already exists.'.format(eventrole) except: # Since there is no existing EventRole, we need to: # 1. Create an EventRole, and save it as eventrole. # and that's it! Adding participants is done below for both # existing and recently created EventRoles. try: print 'event_id: {}'.format(event.id) print 'role_id: {}'.format(role.id) # TODO: Later feature... #eventrole = EventRole(event_id=event.id,role_id=role.id,minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max'])) eventrole = EventRole(event_id=event.id, role_id=role.id, is_open=is_open) print 'No EventRole exists, creating {}.'.format( eventrole) except: print 'Could not create eventrole.' return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not create eventrole.' })) try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not save eventrole.' })) # 2. Remove unwanted invitations. currentpositions = eventrole.invited_positions.all() currentgroups = eventrole.invited_groups.all() currentmembers = eventrole.invited_members.all() print 'currentpositions: {}'.format(currentpositions) print 'currentgroups: {}'.format(currentgroups) print 'currentmembers: {}'.format(currentmembers) print 'EventRole already has these invitations:' for position in currentpositions: print '>>{} ({})'.format(position, position.id) if position not in wantedpositions: print '-- ID is {}: We don\'t want {}.'.format( group.id, group) try: #print 'DEBUG: {}'.format(eventrole.invited_positions) pi = PositionInvitation.objects.get( event_role=eventrole, position=position) pi.delete() except: print 'Could not remove position {} from {}'.format( group, currentgroups) return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not remove position ' + str(position) + ' from ' + currentpositions + '.' })) else: print '++ ID is {}: We keep position {}.'.format( position.id, position) for group in currentgroups: print '>>{} ({})'.format(group, group.id) if group not in wantedgroups: print '-- ID is {}: We don\'t want {}.'.format( group.id, group) try: #print 'DEBUG: {}'.format(eventrole.invited_groups) gi = GroupInvitation.objects.get( event_role=eventrole, group=group) gi.delete() except: print 'Could not remove group {} from {}'.format( group, currentgroups) return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not remove group ' + str(group) + ' from ' + currentgroups + '.' })) else: print '++ ID is {}: We keep group {}.'.format( group.id, group) for member in currentmembers: print '>>{} ({})'.format(member, member.id) if member not in wantedmembers: print '-- ID is {}: We don\'t want {}.'.format( member.id, member) try: #print 'DEBUG: {}'.format(eventrole.invited_members) mi = MemberInvitation.objects.get( event_role=eventrole, member=member) mi.delete() except: print 'Could not remove member {} from {}'.format( member, currentmembers) return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not remove member ' + str(member) + ' from ' + currentmembers + '.' })) else: print '++ ID is {}: We keep member {}.'.format( member.id, member) # Finally set whether the EventRole is open to all members: eventrole.is_open = is_open try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not update whether the EventRole is open numbers.' })) # 3. Update the minimum and maximum number of participants. # TODO: Later feature... #if eventrole.minimum != int(data['role'][role.id]['min']) or eventrole.maximum != int(data['role'][role.id]['max']): # eventrole.minimum = int(data['role'][role.id]['min']) # eventrole.maximum = int(data['role'][role.id]['max']) # try: # eventrole.clean_fields() # eventrole.save() # print 'eventrole saved: {}.'.format(eventrole) # except: # return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not update eventrole max/min numbers.' })) # 4. Adding wanted invitations # Now that we have the eventrole and it has been stripped of its # unwanted participatns, let's add the wanted ones. # Workflow: # For each wanted participant, # if they're not currently invited, # create a {Position,Group,Member}Invitation and attach it to the EventRole # For each participant print 'Adding invitations:' print 'Wanted positions: {}'.format(wantedpositions) print 'Wanted groups: {}'.format(wantedgroups) print 'Wanted members: {}'.format(wantedmembers) for position in wantedpositions: print '>>{} ({})'.format(position, position.id) if position not in currentpositions: print '++ Position {} is not invited: Create PositionInvitation!'.format( position) print eventrole print position pi = PositionInvitation(event_role=eventrole, position=position) print '++ PositionInvitation created: '.format(pi) try: pi.clean_fields() pi.save() print '++ PositionInvitation saved' except: print 'ERROR: Could not save PositionInvitation {}'.format( pi) return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not save PositionInvitation ' + pi + '.' })) else: print '.. Position {} already invited: nothing to do. :-)'.format( position) print 'Positions done!' for group in wantedgroups: print '>>{} ({})'.format(group, group.id) if group not in currentgroups: print '++ Group {} is not invited: Create GroupInvitation!'.format( group) gi = GroupInvitation(event_role=eventrole, group=group) print '++ GroupInvitation created: '.format(gi) try: gi.clean_fields() gi.save() print '++ GroupInvitation saved' except: print 'ERROR: Could not save GroupInvitation {}'.format( gi) return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not save GroupInvitation ' + gi + '.' })) else: print '.. Group {} already invited: nothing to do. :-)'.format( group) print 'Groups done!' for member in wantedmembers: print '>>{} ({})'.format(member, member.id) if member not in currentmembers: print '++ Member {} is not invited: Create MemberInvitation!'.format( member) mi = MemberInvitation(event_role=eventrole, member=member) print '++ MemberInvitation created: '.format(mi) try: mi.clean_fields() mi.save() print '++ MemberInvitation saved' except: print 'ERROR: Could not save MemberInvitation {}'.format( mi) return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not save MemberInvitation ' + mi + '.' })) else: print '.. Member {} already invited: nothing to do. :-)'.format( member) print 'All done!' else: #if we don't want the role: print 'No role wanted.' try: # check if the role exists and must be removed eventrole = EventRole.objects.get(event__id=event.id, role__id=role.id) print 'Removing eventrole: %s' % eventrole eventrole.delete() except: # No role wanted. No role exists. All good. print 'No role exists. All good.' print ' ..... ' # for current tags: # if tag not in submitted data: # delete eventtag(event=event,tag=tag) # for all TagTypes: # for submitted tags: # if tag not currently saved: # create eventtag(event=event,tag=tag) print 'Do tags.' print TagType.objects.all() print 'Iterate over eventtags' for tag in event.tags.all(): try: print 'trying' tagslist = data['tag_type'][tagtype.id] #if tagslist == None: # tagslist=[] #else: # tagslist='hi' print 'tried' except: print 'excepting' tagslist = [] print 'excepted' print 'tagslist: ' + str(tagslist) if str(tag.id) not in tagslist: print 'tag id ' + str(tag.id) + ' is not in ' + str( data['tag_type'][tag.tag_type.id]) print 'delete eventtag(event=event,tag=' + str(tag) + ')' try: et = EventTag.objects.get(event=event, tag=tag) except: print 'Could not get EventTag.' return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not get EventTag.' })) try: et.delete() except: print 'Could not delete EventTag.' return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not delete EventTag ' + et + '.' })) else: print 'tag id ' + str(tag.id) + ' is in ' + str( data['tag_type'][tag.tag_type.id]) print 'Do nothing...' print 'Iterate over tagtypes' for tagtype in TagType.objects.all(): if event.event_type in tagtype.event_type.all(): print tagtype print tagtype.id try: print 'I am trying' tagslist = data['tag_type'][tagtype.id] print tagslist if tagslist == None: tagslist = [] print 'I tried' except: print 'I am excepting' tagslist = [] print 'I have excepted' print 'tagslist: ' + str(tagslist) for tag_id in tagslist: tag = Tag.objects.get(pk=tag_id) print tag if tag not in event.tags.all(): print 'tag ' + str(tag) + ' is not in ' + str( event.tags.all()) print 'create eventtag(event=event,tag=' + str( tag) + ')' try: et = EventTag(event=event, tag=tag) except: print 'Could not create EventTag.' return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not create EventTag.' })) try: et.clean_fields() et.save() except: print 'Could not save EventTag.' return HttpResponse( json.dumps({ 'type': 'error', 'message': 'Could not save EventTag ' + et + '.' })) else: print 'tag ' + str(tag) + ' is already in ' + str( event.tags.all()) print 'Nothing to do...' else: print 'tagtype ' + str( tagtype) + ' is not valid for this event' return HttpResponse( json.dumps({ 'type': 'success', 'event_id': event.id }))
def create_event(self, event_dict): e = Event(id=event_dict.get('eventId')) e.title = u"{0} {1}".format( event_dict.get('title', '').strip(), event_dict.get('subTitle', '').strip()) e.description = event_dict.get('description', '') start = arrow.get(event_dict.get('startDay')).naive start = timezone.make_aware(start, timezone.get_default_timezone()) end = arrow.get(event_dict.get('endDay')).naive end = timezone.make_aware(end, timezone.get_default_timezone()) time_string = event_dict.get('dateFreeForm', '\n').lower().splitlines() if time_string: time_string = time_string[0] time = time_string.replace('midnight', '12:00').replace( 'close', '4:00').replace('closing', '4:00').replace(';', ':') time = re.sub('[^0-9:]', ' ', time) time = time.split() if time: start_time = time[0] if ":" not in start_time: start_time += ":00" start_time = parse_time(start_time) start = start.replace(hour=start_time.hour, minute=start_time.minute) if start_time.hour < 4: start += timezone.timedelta(days=1) else: start += timezone.timedelta(hours=12) if any(separator in time_string for separator in ['to', 'and', '&']) and len(time) > 1: print time_string print time print e.id end_time = time[1] if ':' not in end_time: end_time += ":00" end_time = parse_time(end_time) end = end.replace(hour=end_time.hour, minute=end_time.minute) if end_time.hour < 6: end += timezone.timedelta(days=1) else: end += timezone.timedelta(hours=12) if 'and' in time_string or '&' in time_string: end += timezone.timedelta(hours=1, minutes=30) else: end = start + timezone.timedelta(hours=1, minutes=30) e.start = start e.end = end if event_dict.get('media'): e.photo = u"images/{0}".format( event_dict.get('media')[0]['fileName']) e.save() leaders = {} for performer in event_dict.get('performers'): if performer.get('personTypeId') == 69: leaders.setdefault(e.id, []).append(performer.get('personId')) else: gig, _ = GigPlayed.objects.get_or_create( artist_id=performer.get('personId'), event_id=e.id, role_id=performer.get('personTypeId'), sort_order=performer.get('sortOrder') or "") for event_id, artists in leaders.iteritems(): for artist_id in artists: # In some rare cases, artist is only listed as leader, without an instrument # so we create a new GigPlayed object with that role try: gig = GigPlayed.objects.get(event_id=event_id, artist_id=artist_id) gig.is_leader = True gig.save() except GigPlayed.DoesNotExist: gig = GigPlayed.objects.create(artist_id=artist_id, event_id=event_id, role_id=69, is_leader=True, sort_order=-1) return e
def save_event(request): if request.is_ajax() or True: print 'Is AJAX' # TODO: Add handler for these below. They are required and must be submitted or else the form will not validate. Or perhaps the clean_fields() exception is enough...? import pprint print 'Hér kemur hrátt data:' pprint.pprint(request.POST['data']) print 'Hér kemur JSON útgáfan:' data = json.loads(request.POST['data']) pprint.pprint(data) t = data['title'] d = data['description'] dtb = timezone.make_aware(parser.parse(data['date_time_begin']),timezone.get_default_timezone()) dte = timezone.make_aware(parser.parse(data['date_time_end']),timezone.get_default_timezone()) et_id = data['event_type'] try: event_id = data['event_id'] if event_id == '': # If no event id has been supplied, we'll create a new event. event = Event(title=t, description=d, date_time_begin=dtb, date_time_end=dte, event_type_id=et_id) else: # else we update the existing one. event = Event.objects.get(pk=event_id) event.title = t event.description = d event.date_time_begin = dtb event.date_time_end = dte event.event_type_id = et_id #return HttpResponse('Event fields updated.') # Now save the event try: event.clean_fields() event.save() print 'The event is: ------' print (vars(event)) print '--------------------' except: return HttpResponse ("Hello, world. Could not save event.") # Now that the event has been taken care of, let's sort out the event roles etc. # Flow: # For each role: for role in Role.objects.all(): print 'Role ID %s' % role.id print 'Role is %s' % role try: #if we want the role: currentparticipants = [] # This will be populated below if the event exists (and currently has any participants). currentgroups = [] # This will be populated below if the event exists (and currently has any participants). currentmembers= [] # This will be populated below if the event exists (and currently has any participants). wantedparticipantIDs = data['role'][role.id]['participants'] print 'Wanted participantsID: {}'.format(wantedparticipantIDs) wantedgroups = [Group.objects.get(pk=int(groupid[1:])) for groupid in wantedparticipantIDs if groupid[0]=='g'] print 'We want event role {} with groups {}'.format(role, wantedgroups) wantedmembers= [Member.objects.get(pk=int(memberid[1:])) for memberid in wantedparticipantIDs if memberid[0]=='m'] print 'We want event role {} with members {}'.format(role, wantedmembers) try: #check whether the EventRole already exists # In the event that an EventRole already exists, we have to: # 1. Get the EventRole, stored in eventrole. # 2. Remove unwanted participants # Adding wanted participants is shared with EventRoles that # need to be created so we're doing that later on. # 3. Update the minimum and maximum number of participants # 1. eventrole = EventRole.objects.get(event_id=event.id,role_id=role.id) print 'EventRole "{}" already exists.'.format(eventrole) # 2. #currentgroups= GroupInvitation.objects.filter(event_role=eventrole) currentgroups = eventrole.invited_groups.all() currentmembers= eventrole.invited_members.all() print 'currentgroups: {}'.format(currentgroups) print 'currentmembers: {}'.format(currentmembers) print 'EventRole already has these invitations:' for group in currentgroups: print '>>{} ({})'.format(group, group.id) #print 'Comare {} with {}'.format(group.id,wantedgroups) if group not in wantedgroups: print '-- ID is {}: We don\'t want {}.'.format(group.id,group) #gi = GroupInvitation(event_role=eventrole,group=group) #print 'Removing group {} from eventrole {}'.format(group,eventrole) #print 'DEBUG' try: print 'DEBUG: {}'.format(eventrole.invited_groups) gi = GroupInvitation.objects.get(event_role=eventrole,group=group) #print gi gi.delete() print 'BINGO' except: print 'Could not remove group {} from {}'.format(group,currentgroups) else: print '++ ID is {}: We keep {}.'.format(group.id,group) for member in currentmembers: print '>>{} ({})'.format(member, member.id) if member not in wantedmembers: print '-- ID is {}: We don\'t want {}.'.format(member.id,member) try: print 'DEBUG: {}'.format(eventrole.invited_members) mi = MemberInvitation.objects.get(event_role=eventrole,member=member) #print mi mi.delete() print 'BINGO' except: print 'Could not remove member {} from {}'.format(member,currentmembers) else: print '++ ID is {}: We keep {}.'.format(member.id,member) # 3. if eventrole.minimum != int(data['role'][role.id]['min']) or eventrole.maximum != int(data['role'][role.id]['max']): eventrole.minimum = int(data['role'][role.id]['min']) eventrole.maximum = int(data['role'][role.id]['max']) try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse('Hello, world. Could not update eventrole max/min numbers.') except: #else # Since there is no existing EventRole, we need to: # 1. Create an EventRole, and save it as eventrole. # and that's it! Adding participants is done below for both # existing and recently created EventRoles. eventrole = EventRole(event_id=event.id,role_id=role.id,minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max'])) print 'No EventRole exists, creating {}.'.format(eventrole) try: eventrole.clean_fields() eventrole.save() print 'eventrole saved: {}.'.format(eventrole) except: return HttpResponse('Hello, world. Could not save eventrole.') # Now that we have the eventrole and it has been stripped of its # unwanted participatns, let's add the wanted ones. # Workflow: # For each wanted participant, # if they're not currently invited, # create a GroupInvitation and attach it to the EventRole # For each participant print 'Adding invitations:' print 'Wanted groups: {}'.format(wantedgroups) print 'Wanted members: {}'.format(wantedmembers) for group in wantedgroups: print '>>{} ({})'.format(group, group.id) if group not in currentgroups: print '++ Group {} is not invited: Create GroupInvitation!'.format(group) gi = GroupInvitation(event_role=eventrole, group=group) print '++ GroupInvitation created: '.format(gi) try: gi.clean_fields() gi.save() print '++ GroupInvitation saved' except: print 'ERROR: Could not save GroupInvitation {}'.format(gi) else: print '.. Group {} already invited: nothing to do. :-)'.format(group) print 'Groups done!' for member in wantedmembers: print '>>{} ({})'.format(member, member.id) if member not in currentmembers: print '++ Member {} is not invited: Create MemberInvitation!'.format(member) mi = MemberInvitation(event_role=eventrole, member=member) print '++ MemberInvitation created: '.format(mi) try: mi.clean_fields() mi.save() print '++ MemberInvitation saved' except: print 'ERROR: Could not save MemberInvitation {}'.format(mi) else: print '.. Member {} already invited: nothing to do. :-)'.format(member) print 'All done!' except: #if we don't want the role: print 'No role wanted.' try: # check if the role exists and must be removed eventrole = EventRole.objects.get(event__id=event.id,role__id=role.id) print 'Removing eventrole: %s' % eventrole eventrole.delete() except: # No role wanted. No role exists. All good. print 'No role exists. All good.' print ' ..... ' except: return HttpResponse("Hello, world. Could not create event.") return HttpResponse(event.id) else: return HttpResponse("Hello, world. Not AJAX request.")
def do(self): logger.debug("cron job starting for: FB") #get the event worker for heltech try: ew = EventWorker.objects.get( page_name="HEL Tech") #assume one worker for hel tech except ObjectDoesNotExist: logger.error("No event workers configured, cannot check events!") return except MultipleObjectsReturned: logger.error( "Multiple workers found, do not know which one to run yet!") return graph = facebook.GraphAPI(access_token=ew.page_token, version="2.1") #get the page events and the database events fb_events = graph.get_connections(id=ew.page_id, connection_name="events") db_events = Event.objects.all() for event in fb_events['data']: try: e = Event.objects.get(eid=event['id']) except ObjectDoesNotExist: e = Event() ep = EventParser(event, ew.parse_speakers) ep.parse() #exists, lets update the participant count ac = graph.get_object(id=event['id'], fields='attending_count') e.attending_count = ac['attending_count'] or 0 # fetch the cover photo cover = graph.get_object(id=event['id'], fields=['cover']) try: e.cover_uri = cover['cover']['source'] except KeyError: e.cover_uri = "" # fill in the data e.eid = ep.eid e.title = ep.title e.start_time = ep.start_time e.end_time = ep.end_time e.programme = ep.programme e.description = ep.description e.punchline = ep.punchline #add the place try: p = Place.objects.get(name=ep.place) except ObjectDoesNotExist: p = Place() p.name = ep.place p.streetaddr = ep.addr p.save() e.place = p e.save() #that's all for now # fill the speakers if ew.parse_speakers: edt = parser.parse(e.start_time) now = datetime.datetime.now(edt.tzinfo) if edt >= now or ( not Speaker.objects.filter(event__eid=e.eid).exists()): (count, thedict) = speakers = Speaker.objects.filter( event__eid=e.eid).delete() logger.debug("deleted: " + str(count) + " speakers, details: " + str(thedict)) for speaker in ep.speakers: org = None sobj = Speaker() if speaker['org']: try: org = Organisation.objects.get( name=speaker['org']) except ObjectDoesNotExist: org = Organisation() org.name = speaker['org'] org.save() speaker = Speaker(full_name=speaker['name'], title=speaker['title'], role=speaker['role'], organisation=org, event=e) speaker.save()