def getActModel(self): aid, = self.urlcfg.analyze(self.request.path) if (aid): id = int(aid) return Activity.get_by_id(id) else: return None
def update_activity(): id = new_activity.get('id') if not id: self.error('Scrape error: post missing id') activity = Activity.get_by_id(id) if activity: # we already have this activity! merge in any new comments and likes merged_activity = copy.deepcopy(new_activity) merged_obj = merged_activity.setdefault('object', {}) existing_activity = json_loads(activity.activity_json) existing_obj = existing_activity.get('object', {}) replies = merged_obj.setdefault('replies', {}) gr_source.merge_by_id( replies, 'items', existing_obj.get('replies', {}).get('items', [])) replies['totalItems'] = len(replies.get('items', [])) gr_source.merge_by_id(merged_obj, 'tags', existing_obj.get('tags', [])) activity.activity_json = json_dumps(merged_activity) else: activity = Activity(id=id, source=source.key, html=request.get_data(as_text=True), activity_json=json_dumps(new_activity)) # store and return the activity activity.put() logger.info(f"Stored activity {id}")
def getActModel(self, id): try: iid = int(id) except: return None actobj = Activity.get_by_id(iid) return actobj
def dispatch_request(self, *args): source = self.auth() gr_src = self.gr_source() id = request.values['id'] # validate request parsed_id = util.parse_tag_uri(id) if not parsed_id: self.error(f'Scrape error: expected id to be tag URI; got {id}') activity = Activity.get_by_id(id) if not activity: self.error(f'No {gr_src.NAME} post found for id {id}', 404) elif activity.source != source.key: self.error( f'Activity {id} is owned by {activity.source}, not {source.key}', 403) activity_data = json_loads(activity.activity_json) # convert new extras to AS, merge into existing activity try: new_extras = getattr(gr_src, self.MERGE_METHOD)( request.get_data(as_text=True), activity_data) except ValueError as e: self.error(f"Scrape error: couldn't parse extras: {e}") activity.activity_json = json_dumps(activity_data) activity.put() extra_ids = ' '.join(c['id'] for c in new_extras) logger.info(f"Stored extras for activity {id}: {extra_ids}") return jsonify(new_extras)
def update_activity(): id = new_activity.get('id') if not id: self.abort(400, 'Scraped post missing id') activity = Activity.get_by_id(id) if activity: # we already have this activity! merge in any new comments. merged_activity = copy.deepcopy(new_activity) existing_activity = json_loads(activity.activity_json) # TODO: extract out merging replies replies = merged_activity.setdefault('object', {}).setdefault( 'replies', {}) gr_source.merge_by_id( replies, 'items', existing_activity.get('object', {}).get('replies', {}).get('items', [])) replies['totalItems'] = len(replies.get('items', [])) # TODO: merge tags too activity.activity_json = json_dumps(merged_activity) else: activity = Activity(id=id, source=source.key, html=self.request.text, activity_json=json_dumps(new_activity)) # store and return the activity activity.put() logging.info(f"Stored activity {id}") self.output(new_activity)
def get_session_id_by_activity(activity_id): """ Get the session ID that this activity_id is a part of. :param activity_id: ID of the activity_id. :type activity_id: Integer :returns: The project ID. :rtype: Integer """ activity = Activity.get_by_id(activity_id) return activity.session_id if activity else 0
def delete_activity(id): activity_to_delete = Activity.get_by_id(id) if current_user.id == activity_to_delete.creator.id: activity_to_delete.delete_instance() return jsonify( data={}, message= f'Successfully deleted activity with id {activity_to_delete.creator.id}', status=200), 200 else: return jsonify(data={'Error: Forbidden'}, message='Penguin can only delete their own activities.', status=403), 403
def get_activities_response(self, *args, **kwargs): """Uses Activity entities stored in the datastore.""" activities = [] activity_id = kwargs.get('activity_id') if activity_id: activity = Activity.get_by_id(self.gr_source.tag_uri(activity_id)) if activity: activities = [activity] else: activities = Activity.query(Activity.source == self.key)\ .order(-Activity.updated).fetch(50) return self.gr_source.make_activities_base_response( [json_loads(a.activity_json) for a in activities])
def get_project_id_by_activity(activity_id): """ Get the project ID that this activity_id is a part of. :param activity_id: ID of the activity_id. :type activity_id: Integer :returns: The project ID. :rtype: Integer """ try: activity = Activity.get_by_id(activity_id) except NoResultFound: return 0 return activity.project_id if activity else 0
def update_actvity(id): payload = request.get_json() activity = Activity.get_by_id(id) if current_user.id == activity.creator.id: activity.name = payload['name'] if 'name' in payload else None activity.description = payload[ 'description'] if 'description' in payload else None activity.save() activity_dict = model_to_dict(activity) return jsonify( data=activity_dict, message=f'Successfully updated activity with id {activity.id}.', status=200), 200 else: return jsonify(data='Error: Forbidden', message='Penguins can only update their own activity.', status=403), 403
def update_activity_details(aid): logger.info('update_activity_details aid:%s' % str(aid)) activity = Activity.get_by_id(aid) suggester_id = activity['suggester_id'] keens = activity['keens'] suggester = User.get_by_id(suggester_id) keeners = User.get_by_ids_type(ids = [keen['user_id'] for keen in keens], extra_fields=['device_gcm_token', 'device_pns_token']) message_store = [ '@' + suggester['first_name'] + ' ' + suggester['last_name'], ' has chucked a curve ball at ', activity['keyword'] ] logger.info('update_activity_details aid:%s message:%s' % (str(aid), ''.join(message_store))) title = 'Details of #' + activity.get('keyword') + ' with ' + suggester['first_name'] + ' ' + suggester['last_name'] message = 'was updated :' if activity.get('when'): message = message + ' ' + activity.get('when').strftime('%I:%M%p %b %d') message = message + ' ' + activity.get('where') pic_url = get_fb_profile_pic_link(suggester_id) store_data = { 'uid' : suggester_id, 'aid' : str(aid), 'pic': pic_url } android_ids = [] apple_ids = [] badge_nums = [] for user in keeners: #Don't send to suggester if user['_id'] == suggester_id: continue android_ids.append(user.get('device_gcm_token')) apple_ids.append(user.get('device_pns_token')) badge_num = add_notification(user['_id'], settings.NOTIF_ACTIVITY_UPDATE, message_store, pic_url, store_data) badge_nums.append(badge_num) data = { 'type' : settings.NOTIF_ACTIVITY_UPDATE, 'title' : title, 'msg' : message, 'ticker' : '#' + activity.get('keyword') + ' details updated', 'aid' : aid, } logger.info('update_activity_details aid:%s keeners:%s' % (str(aid), str(keeners))) if activity.get('keyword', '').lower() != settings.ACTIVITY_TEST_KEYWORD: send(data, android_ids, apple_ids, badge_nums)
def get_activities_response(self, *args, **kwargs): """Uses Activity entities stored in the datastore.""" activities = [] activity_id = kwargs.get('activity_id') if activity_id: activity = Activity.get_by_id(self.gr_source.tag_uri(activity_id)) if activity: activities = [activity] else: activities = Activity.query(Activity.source == self.key)\ .order(-Activity.updated).fetch(50) activities = [json_loads(a.activity_json) for a in activities] for a in activities: microformats2.prefix_image_urls(a, IMAGE_PROXY_URL_BASE) return self.gr_source.make_activities_base_response(activities)
def activity_invite(aid, uids): activity = Activity.get_by_id(aid) suggester_id = activity['suggester_id'] suggester = User.get_by_id(suggester_id, extra_fields=['gender']) himher = 'him' if suggester.get('gender') == 'male' else 'female' message = [ "@" + suggester.get('first_name') + ' ' + suggester.get('last_name'), " is invited you to join " + himher + " for #" + activity.get('keyword') + ". Keen?" ] pic_url = get_fb_profile_pic_link(suggester.get('_id')) store_data = { 'uid' : suggester.get('_id'), 'firstName' : suggester.get('first_name'), 'lastName' : suggester.get('last_name'), 'network' : suggester.get('network'), 'pic' : pic_url } android_ids = [] apple_ids = [] badge_nums = [] for user_id in uids: user = User.get_by_id(user_id, extra_fields=['device_gcm_token', 'device_pns_token', 'type']) if user.get('type') == User.ACTIVE: android_ids.append(user.get('device_gcm_token')) apple_ids.append(user.get('device_pns_token')) badge_num = add_notification(user.get('_id'), settings.NOTIF_ACTIVITY_INVITE, message, pic_url, store_data) badge_nums.append(badge_num) data = { 'type' : settings.NOTIF_ACTIVITY_INVITE, 'title' : suggester.get('first_name') + ' ' + suggester.get('last_name') + ' is wondering if', 'msg' : "you'd be keen for #" + activity.get('keyword'), 'ticker' : 'Activity invite', 'aid' : aid, 'uid' : suggester_id, } send(data, android_ids, apple_ids, badge_nums)
def activities(request): # Function to get all activities and handle POST request to add or edit # an activity response_params = {} response_params['activities'] = models.Activity.all() response_params['activity_form'] = ActivityForm() # If the form is submitted if request.method == "POST": tags = request.POST['tags'].split(',') tag_ids = [] for tag in tags: if tag.strip() != '': t = models.Tag.get_or_insert(key_name=tag) tag_ids.append(t.key()) name = request.POST['name'] price = int(request.POST['price']) duration_min = timedelta(seconds=floatToSeconds(float(request.POST['duration_min']))) duration_max = timedelta(seconds=floatToSeconds(float(request.POST['duration_max']))) # If we got an activity id from the request, we do an update instead of an add if 'activity-id' in request.POST: logging.info('edit an existing activity') activity = Activity.get_by_id(int(request.POST['activity-id'])) activity.name = name activity.price = price activity.duration_min = duration_min activity.duration_max = duration_max activity.tags = tag_ids activity.put() else: activity = Activity(name=name,price=price,duration_min=duration_min,duration_max=duration_max,tags=tag_ids) activity.put() return render_to_response('activities.html', response_params)
def add_or_update_activity(project_id, pgm_group, session_id=0, activity_id=0): """ Add activity to database or update it if it exists already. :param project_id: ID of the project Activity is associated with. :type project_id: Integer :param pgm_group: The PGM Group number. :type pgm_group: Integer :param session_id: ID of the session Activity is associated with. :type session_id: Integer :param activity_id: ID of the activity. :type activity_id: Integer :returns: Activity ID of the added activity. :rtype: Integer """ project = Project.get_by_id(project_id) session = Session.get_by_id(session_id) if session_id > 0 else None _logger().debug('ADD OR UPDATE. Session {0}: {1!r}'.\ format(session_id, session)) if activity_id > 0: try: activity = Activity.get_by_id(activity_id) activity.project_id = project_id activity.session_id = session_id except NoResultFound: activity = Activity(project, session) else: activity = Activity(project, session) activity.active = pgm_group activity.update() _logger().debug('ACTIVITY ID : {0} (session_id {1})'.\ format(activity.id, activity.session_id)) return activity.id
def post(self, *args): source = self.auth() gr_src = self.gr_source() id = util.get_required_param(self, 'id') # validate request parsed_id = util.parse_tag_uri(id) if not parsed_id: self.abort(400, f'Expected id to be tag URI; got {id}') activity = Activity.get_by_id(id) if not activity: self.abort(404, f'No {gr_src.NAME} post found for id {id}') elif activity.source != source.key: self.abort( 403, f'Activity {id} is owned by {activity.source}, not {source.key}' ) activity_data = json_loads(activity.activity_json) # convert new reactions to AS, merge into existing activity try: new_reactions = gr_src.merge_scraped_reactions( self.request.text, activity_data) except ValueError as e: msg = "Couldn't parse scraped reactions: %s" % e logging.error(msg, stack_info=True) self.abort(400, msg) activity.activity_json = json_dumps(activity_data) activity.put() reaction_ids = ' '.join(r['id'] for r in new_reactions) logging.info(f"Stored reactions for activity {id}: {reaction_ids}") self.output(new_reactions)
def intercom_event_nah_activity(user_id, card_id): logger.warning("intercom_event_nah_activity user_id:%s card_id:%s" % (user_id, card_id)) activity = Activity.get_by_id(card_id) intercom.event_nah_activity(user_id, card_id, activity.get('text'))
def activity_edit(request, activity_id): response_params = {} response_params['activity'] = Activity.get_by_id(int(activity_id)) return render_to_response('activity-edit.html', response_params)