示例#1
0
 def getActModel(self):
     aid, = self.urlcfg.analyze(self.request.path)
     if (aid):
         id = int(aid)
         return Activity.get_by_id(id)
     else:
         return None
示例#2
0
        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}")
示例#3
0
 def getActModel(self, id):
     try:
         iid = int(id)
     except:
         return None
     actobj = Activity.get_by_id(iid)
     return actobj
示例#4
0
	def getActModel(self):
		aid, = self.urlcfg.analyze(self.request.path)
		if (aid):
			id = int(aid)
			return Activity.get_by_id(id)
		else:
			return None
示例#5
0
    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)
示例#6
0
        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)
示例#7
0
	def getActModel(self, id):
		try:
			iid = int(id)
		except:
			return None
		actobj = Activity.get_by_id(iid)	
		return actobj
示例#8
0
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
示例#9
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
示例#10
0
    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])
示例#11
0
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
示例#12
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
示例#13
0
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)
示例#14
0
    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)
示例#15
0
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)
示例#16
0
文件: views.py 项目: noio/Plan-a-Date
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)
示例#17
0
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
示例#18
0
    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)
示例#19
0
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'))
示例#20
0
文件: views.py 项目: noio/Plan-a-Date
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)