예제 #1
0
    def test_clears_all_subscriptions(self):
        user3 = User(name="user3",
                     email="*****@*****.**",
                     email_confirmed=1)
        user3.set_password('asdfasdf')
        user3.save()

        Subscription(user_id=self.sender.id, shake_id=2).save()
        Subscription(user_id=user3.id, shake_id=2).save()

        Notification.new_subscriber(self.sender, self.receiver, 1)
        Notification.new_subscriber(user3, self.receiver, 2)

        request = HTTPRequest(
            self.get_url('/account/clear-notification'), 'POST',
            {'Cookie': '_xsrf=%s;sid=%s' % (self.xsrf, self.receiver_sid)},
            '_xsrf=%s&type=subscriber' % (self.xsrf))
        self.http_client.fetch(request, self.stop)
        response = self.wait()

        j = json_decode(response.body)
        self.assertEqual(j['response'], "You have 0 new followers")
        ns = Notification.where('receiver_id=%s' % (self.receiver.id))
        for n in ns:
            self.assertTrue(n.deleted)
예제 #2
0
def subscribe(request):
    classNumber = request.REQUEST['classNumber']
    theclass = Class.objects.get(number=classNumber)
    try:
        # Subscribe email
        email = request.user.username + "@princeton.edu"
        log.log("subscribeEmail %s %s" % (classNumber, email))
        subscription = Subscription(address=email,
                                    theclass=theclass,
                                    type="EMAIL")
        subscription.save()
        subscription.sendConfirmation()

        # Subscribe text, if appropriate
        if 'phoneNumber' in request.REQUEST:
            phoneNumber = request.REQUEST['phoneNumber']
            log.log("subscribeText %s %s" % (classNumber, phoneNumber))
            theclass = Class.objects.get(number=classNumber)
            subscription = Subscription(address=phoneNumber,
                                        theclass=theclass,
                                        type="TEXT")
            subscription.save()
            subscription.sendConfirmation()
        return HttpResponse(
            "+<b>Success!</b> You will soon receive an email and/or text verifying your subscription for <strong>%s</strong>."
            % str(theclass))
    except:
        log.log("subscribe ERROR")
        return HttpResponse(traceback.format_exc())
        return HttpResponse(
            "-<b>Something went wrong.</b> You are not subscribed for <strong>%s</strong>. If this problem persists, please <a href='mailto:[email protected]'>contact the developers</a>."
            % str(theclass))
예제 #3
0
    def post(self):
        """
			New Subscription
			@param username: str
			@param subreddit: str
			#return {}
		"""
        a = parser.parse_args()
        s_username, s_subreddit = \
         a['username'], a['subreddit']
        if not s_username \
         or not s_subreddit:
            return {'message': 'all fields required'}, 400, cors

        try:
            s_user = User.objects(username=s_username).get()
        except DoesNotExist:
            return {'message': 'user does not exist'}, 400, cors

        try:
            s_subreddit = Subreddit.objects(name=s_subreddit).get()
        except DoesNotExist:
            return {'message': 'user does not exist'}, 400, cors

        try:
            Subscription.objects(Q(user=s_user)
                                 & Q(subreddit=s_subreddit)).get()
        except DoesNotExist:
            pass
        else:
            return {'message': 'already subscribed'}, 400, cors

        Subscription(user=s_user, subreddit=s_subreddit).save()

        return {}, 200, cors
예제 #4
0
def process_add_subscription():
    form_add_sub = SubscriptionAddForm()

    if form_add_sub.validate():
        # add source if it doesn't exist
        source = Source.query.filter_by(rss_url=form_add_sub.rss_url.data).first()
        if not source:
            source = get_source_from_rss(form_add_sub.rss_url.data)
            db.session.add(source)
            db.session.commit()

        # Find the user and source for subscription
        sub_user = User.query.filter_by(id=current_user.id).first()
        if not sub_user:
            raise Exception('Current user not found in database. The account may have been deleted.')

        # add subscription for current user
        sub = Subscription(user=sub_user, source=source,
                           daily_amount=form_add_sub.daily_amount.data)
        db.session.add(sub)
        db.session.commit()
        cache_subscription(sub)
        return redirect(url_for('subscriptions'))

    flash('Error: could not subscribe. Please check your url and daily amount.')
    return redirect(url_for('subscriptions'))
예제 #5
0
파일: twittr.py 프로젝트: bmahlbrand/twitt
def subscribe():
    error = None
    if request.method == 'POST':
        username = session.get('user')
        subscribee = request.form['subscribee']

        s = Subscription(username, subscribee)

        db_session().add(s)
        db_session().commit()

        flash('You subscribed!')
        return redirect(url_for('manage_account'))
    elif request.method == 'GET':

        subscribed_users = [
            result.subscribed_user for result in Subscription.query.filter_by(
                email_id=session.get('user')).all()
        ]
        rv = db_session().query(User).filter(
            User.email != session.get('user')).all()

        results = []
        for row in rv:
            if row.email not in subscribed_users:
                results.append(row)

        users = [
            dict(email=row.email,
                 first_name=row.first_name,
                 last_name=row.last_name,
                 profilepic=row.profilepic) for row in results
        ]
        return render_template('subscribe.html', entries=users)
예제 #6
0
    def post(self):
        data = json.loads(request.data)
        print(data)
        email = data.get("email")

        if Subscription.query.filter_by(email=email).first():
            print("already subscribed.")
            return jsonify(status="ok", data="Already subscribed", error=True)

        subscription_instance = Subscription(email=email)
        subscription = subscription_instance.save_to_db()
        if subscription:
            # sending sms
            # sms_message = "Thank you for registering for the event. We will send you a reminder on the day, so you don't miss out. Love Hive"
            # sms_res = send_sms(phone, sms_message, network, STATUS_URL)
            # print("sms response to user", sms_res)
            # print("successfully saved")

            # sending email
            print("sending email...")
            destination = "*****@*****.**"
            email_message = f"Email: {email}"
            subject = "SUBSCRIPTION"
            send_email(subject, destination, email_message)

            return jsonify(status="ok", data=data, error=False)
        else:
            print("an error occured....")
            return jsonify(status="ok", data=data, error=True)
예제 #7
0
def signup_verify(request):
    email = request.GET.get('email', '')
    skey = request.GET.get('skey', '')
    old = datetime.now() - timedelta(days=10)
    blists = []
    try:
        optin = Optin.objects.get(skey=skey, email=email, created__gte=old)
        for l in optin.bulk_lists.all():
            if Subscription.subscribed.filter(email__iexact=optin.email,
                                              bulk_list=l).count() == 0:
                s = Subscription(email=optin.email,
                                 signup_location=optin.signup_location,
                                 bulk_list=l)
                s.save()

            blists.append(l)

        optin.verify(request)
    except Optin.DoesNotExist:
        #they've already subscribed; let's show them that instead of a 404
        #this prevents emails like "my link isn't working" after they've already clicked it once
        subs = Subscription.objects.filter(email=email)
        if len(subs):
            for sub in subs:
                blists.append(sub.bulk_list)
        else:
            raise Http404

    c = {'lists': blists}
    return TemplateResponse(request, 'signup_verified.html', c)
예제 #8
0
def get_subscriptions():
    with sqlite3.connect("./rare.db") as conn:

        conn.row_factory = sqlite3.Row
        db_cursor = conn.cursor()

        db_cursor.execute("""
        SELECT
           s.id,
           s.user_id,
           s.subscribe_id,
           s.begin,
           s.end
        FROM Subscription s
        """)

        subscriptions = []

        dataset = db_cursor.fetchall()

        for row in dataset:

            subscription = Subscription(row['id'], row['user_id'],
                                        row['subscribe_id'], row['begin'],
                                        row['end'])
            subscriptions.append(subscription.__dict__)

    return json.dumps(subscriptions)
예제 #9
0
def subscribe(request):
    options = ""
    text = ""
    for catg in Categories.objects.all():  #fetch all the categories from DB
        options += "<option value=\"" + catg.category + "\">" + catg.category + "</option>"
    if options == "":
        text = "No Categories in the list..Come back later"

    if request.method == 'POST':
        name = request.POST['name']
        email = request.POST['email']
        phnNo = request.POST['phnNo']
        category = request.POST['category']
        user = User(name=name, email=email, phnno=phnNo)
        user.save()  #save user details in the DB
        subscription = Subscription(
            user=User.objects.get(email=email),
            category=Categories.objects.get(category=category))
        subscription.save()  #save users subscription details in the DB
        mailgun.send_mail(
            email, category + " News",
            "Congratulations You have been subscribed to" + category +
            "news\n\nThank you for subscribing to our news service"
        )  #Send subscription mail to the client
        text = "Subscribed successfully"
    return render(request, "CRM/subscribe.html", {
        'options': options,
        'message': text
    })
예제 #10
0
def populate_tables():
    logger.info("Started populating tables")

    tracks = get_tracks()
    vehicle_classes = get_vehicle_classes()
    vehicles = get_vehicles()

    populate_table(Track, tracks)
    populate_table(TrackDetails, get_track_details())
    populate_table(VehicleClass, vehicle_classes)
    populate_table(Vehicle, vehicles)
    populate_table(VehicleDetails, get_vehicle_details())
    populate_table(Controller, get_controllers())

    logger.info(
        f"Adding {len(tracks) * len(vehicles)} rows to table 'subscriptions'")
    ignored_classes = list(
        vehicle_classes[vehicle_classes["ignored"] == True]["id"])
    for _, track in tracks.iterrows():
        for _, vehicle in vehicles.iterrows():
            new_subscription = Subscription(track_id=track["id"],
                                            vehicle_id=vehicle["id"])
            if not (track["ignored"] or vehicle["ignored"]
                    or vehicle["class_id"] in ignored_classes):
                new_subscription.update_interval_hours = MID_UPDATE_INTERVAL
            db.session.merge(new_subscription)
        db.session.commit()
    logger.info(f"Finished populating table 'subscriptions'")

    logger.info("Finished populating tables")
    return True
예제 #11
0
def accountPage():
    error = None
    user = User.query.filter_by(username=g.user.username).first()
    if request.method == 'POST':
        if not request.form['subscription']:
            error = 'You have to enter a streaming subscription'
        else:
            service = request.form['subscription']
            if Subscription.query.filter_by(user_id=user.user_id,
                                            subscription=service).first():
                error = "You already added that streaming service to your subscriptions."
            else:
                db.session.add(
                    Subscription(user_id=user.user_id, subscription=service))
                db.session.commit()
    favorites = Favorite.query.filter_by(user_id=user.user_id).all()
    subscriptions = Subscription.query.filter_by(user_id=user.user_id).all()
    favorites = sorted(favorites, key=lambda favorite: favorite.movie)
    subscriptions = sorted(subscriptions,
                           key=lambda subscription: subscription.subscription)
    onAccount = True
    return render_template('accountPage.html',
                           favorites=favorites,
                           subscriptions=subscriptions,
                           error=error)
예제 #12
0
def subscribe(request_id, method, address):
    '''
    Create a new subscription the request identified by request_id.
    @param request_id: The request to subscribe to
    @param method:     The type of subscription (e.g. 'email' or 'sms')
    @param address:    The adress to send updates to (e.g. '*****@*****.**' or '63055512345')
    '''

    # TODO: validate the subscription by seeing if the request_id exists via Open311?
    with db() as session:
        subscription = get_subscription(request_id, method, address)
        if subscription:
            return subscription.key

        else:
            subscription = Subscription(sr_id=request_id,
                                        method=method,
                                        contact=address)
            session.add(subscription)

            # If we haven't ever updated, set the last update date
            last_update_info = session.query(UpdateInfoItem).filter(
                UpdateInfoItem.key == 'date').first()
            if not last_update_info:
                # TODO: get the SR's updated_datetime and use that
                session.add(
                    UpdateInfoItem(key='date', value=datetime.datetime.now()))

            return subscription.key

    return False
def update_subscription(subscription_id, params):
    original_subscription = db_session_users.query(Subscription).filter_by(
        id=subscription_id).first()
    new_subscription_dict = original_subscription.__dict__
    today = datetime.datetime.utcnow()
    new_subscription_dict['latest'] = True
    new_subscription_dict['notes'] = None

    if 'expiration_date' in params:
        new_exiration_date = params['expiration_date']
        new_exiration_date_obj = datetime.datetime.strptime(
            new_exiration_date, "%Y-%m-%d")
        new_subscription_dict['expiration_date'] = new_exiration_date_obj
        # update status of subscription depending on new expiration date
        if new_exiration_date_obj < today or new_exiration_date_obj.date(
        ) == today.date():
            new_subscription_dict[
                'status_reason'] = Subscription.EXPIRED_STATUS_REASON
            new_subscription_dict['status'] = Subscription.INACTIVE_STATUS
        elif new_subscription_dict['status'] != Subscription.ACTIVE_STATUS:
            new_subscription_dict[
                'status_reason'] = Subscription.REACTIVATED_STATUS_REASON
            new_subscription_dict['status'] = Subscription.ACTIVE_STATUS

    if 'plan_id' in params:
        new_plan_id = params['plan_id']
        plan = db_session_users().query(Plan).filter_by(id=new_plan_id).first()
        if plan:
            new_subscription_dict['plan_id'] = new_plan_id
            new_subscription_dict['stripe_id'] = plan.stripe_id
            new_subscription_dict['start_date'] = datetime.datetime.utcnow()
            new_subscription_dict[
                'status_reason'] = Subscription.REACTIVATED_STATUS_REASON
            new_subscription_dict['status'] = Subscription.ACTIVE_STATUS
            if plan.recurring:
                new_subscription_dict['expiration_date'] = None
            else:
                new_subscription_dict[
                    'expiration_date'] = get_default_expiration_date(plan)
        else:
            return {'errors': "Plan is not found"}

    if 'payment_type' in params:
        new_subscription_dict['payment_type'] = params['payment_type']
    if 'notes' in params:
        new_subscription_dict['notes'] = params['notes']

    new_subscription_dict['modified_by_user_id'] = g.user_id

    new_subscription = Subscription(new_subscription_dict)
    db_session_users.add(new_subscription)

    # deactivate old subscription
    deactivate_subscriptions(new_subscription_dict['user_id'])

    db_session_users.commit()
    db_session_users.refresh(new_subscription)

    return {'new_subscription': new_subscription.to_dict()}
예제 #14
0
    def _handle(self, url, tags, latlon, radius, period):
        self._set_response_headers()

        user = users.get_current_user()

        if not user:
            response = {'success': False, 'login': self._loginURL()}
        else:
            try:
                period = int(period)
            except:
                period = 86400
            try:
                radius = int(radius)
            except:
                radius = None

            if tags is not None:
                tags = tags.split(',')
            else:
                tags = []

            tags = [x for x in tags if len(x) > 0]

            src = NotificationSource.query(
                NotificationSource.url == url).fetch(1)
            if len(src) == 1:
                src = src[0]
            else:
                src = NotificationSource(url=url)
                ndb.put_multi([src])

            conditions = [
                Subscription.user == user, Subscription.source == src.key,
                Subscription.latlon == latlon, Subscription.radius == radius
            ]
            if len(tags) > 0:
                conditions.append(
                    ndb.AND(*[Subscription.tags == tag for tag in tags]))

            subscription = Subscription.query(*conditions).fetch(1)
            if len(subscription) == 1:
                subscription = subscription[0]
                subscription.period = period
            else:
                subscription = Subscription(user=user,
                                            source=src.key,
                                            tags=tags,
                                            latlon=latlon,
                                            radius=radius,
                                            period=period,
                                            next_poll=datetime.datetime.now(),
                                            last_read=datetime.datetime.now() -
                                            datetime.timedelta(hours=3))
            ndb.put_multi([subscription])
            response = {'success': True, 'id': subscription.key.urlsafe()}

        return json.dumps(response)
예제 #15
0
def subscribe_set_number(set_number):
    if request.method == 'POST':
        email = request.form.get('email')
        price_treshold = request.form.get('price_treshold')
        s = Subscription(set_number = set_number, email = email, price_treshold = price_treshold)
        db.session.add(s)
        db.session.commit()
        return {'data' : {'set_number' : set_number, 'email' : email, 'price_treshold' : price_treshold }}
    return {'error' : 'no_data'}
예제 #16
0
def create_subscription(pigeon_id, name):
    pigeon_key = ndb.Key(Pigeon, pigeon_id)
    stream_list = Stream.query(Stream.name == name).fetch()
    stream_key = stream_list[0].key
    sub = Subscription()
    sub.Pigeon_key = pigeon_key
    sub.Stream_key = stream_key
    sub.put()
    return
예제 #17
0
 def __init__(self,
              session,
              user_id,
              subscription_type=SubscriptionType.hifi):
     self._session = session
     self.id = user_id
     self._base_url = 'users/%s' % user_id
     self.favorites = Favorites(session, user_id)
     self.subscription = Subscription(
         subscription={'type': subscription_type})
예제 #18
0
    def test_quick_notifications(self):
        """
        /account/quick-notifications should return without error when populated with
        all possible  notification types.

        Page should also not be accessible if you're not signed in.
        """
        self.user2 = User(name='example2',email='*****@*****.**', \
            verify_email_token = 'created', password='******', email_confirmed=1,
            is_paid=1)
        self.user2.save()
        self.sourcefile = Sourcefile(width=20,height=20,file_key="asdf", \
            thumb_key="asdf_t")
        self.sourcefile.save()
        self.sharedfile = Sharedfile(source_id=self.sourcefile.id, name="my shared file", \
            user_id=self.user.id, content_type="image/png", share_key="ok")
        self.sharedfile.save()
        self.shake = Shake(user_id=self.user2.id,
                           name='asdf',
                           type='group',
                           title='My Test Shake',
                           description='Testing this shake test.')
        self.shake.save()

        # new subscription
        new_sub = Subscription(user_id=self.user2.id, shake_id=1)
        new_sub.save()
        new_subscriber = Notification.new_subscriber(sender=self.user2,
                                                     receiver=self.user,
                                                     action_id=new_sub.id)
        # new favorite
        new_favorite = Notification.new_favorite(sender=self.user2,
                                                 sharedfile=self.sharedfile)
        # new save
        new_save = Notification.new_save(sender=self.user2,
                                         sharedfile=self.sharedfile)
        # new comment
        new_comment = Comment(user_id=self.user2.id,
                              sharedfile_id=self.sharedfile.id,
                              body="Testing comment")
        new_comment.save()
        # new mention
        new_mention = Notification.new_mention(receiver=self.user,
                                               comment=new_comment)
        # new invitation
        new_mention = Notification.new_invitation(sender=self.user2,
                                                  receiver=self.user,
                                                  action_id=self.shake.id)

        response = self.fetch_url('/account/quick-notifications')
        self.assertEqual(200, response.code)
        self.sign_out()
        response = self.fetch_url('/account/quick-notifications',
                                  follow_redirects=False)
        self.assertEqual(302, response.code)
예제 #19
0
def process():
    form_add_sub = SubscriptionAddForm()
    user_id = current_user.id
    rss_url = form_add_sub.rss_url.data
    daily_amount = form_add_sub.daily_amount.data
    if form_add_sub.validate_on_submit():
        new_sub = Subscription(user_id=user_id, rss_url=rss_url, daily_amount=daily_amount)
        db.session.add(new_sub)
        db.session.commit()
        return jsonify({'rss_url': rss_url})
    return jsonify({'error': f'Error! {form_add_sub.errors}'})
예제 #20
0
파일: views.py 프로젝트: tariq786/Peerapps
def subscribe(request):
    """
        Subscribe to the blog posts of a given address.
    """
    address = request.POST.get('address')

    new_sub = Subscription(**{"address": address})
    new_sub.save()

    return HttpResponse(json.dumps({"status": "success"},
                                   default=helpers.json_custom_parser),
                        content_type='application/json')
예제 #21
0
def subscriptions_db_add_sub(chat_id, streamer_id):
    subs = Subscription.query.filter(
        Subscription.user_id == chat_id,
        Subscription.streamer_id == streamer_id).first()
    if not subs:
        print(subs)
        sub_new = Subscription()
        sub_new.streamer_id = streamer_id
        sub_new.user_id = chat_id
        db_session.add(sub_new)
        # db_session.add(Subscription.user_id == chat_id, Subscription.streamer_id == streamer_id)
        db_session.commit()
예제 #22
0
def create():
    existing = Subscription.query.filter(
        Subscription.email == request.form["email"]).first()
    if existing is not None:
        abort(409)

    subscription = Subscription()
    subscription.email = request.form["email"]

    db.session.add(subscription)
    db.session.commit()

    return jsonify({"Subscription": "success"})
    def post(self):

        with db_session:

            email = self.get_argument("email")
            subscription = Subscription.get(email=email)
            if subscription:
                self.set_status(409)
                self.finish()
                return
            Subscription(email=email)
            self.set_status(201)
            self.finish()
            return
예제 #24
0
    def __call__(self, chat_id, args):
        args.reverse()
        if args:
            arg = args.pop().lower()
            node_type = _parse_node_type(arg)
            if node_type is not None:
                node_id = node_type
            else:
                node_id = _parse_node_id(arg)
            if node_id is None:
                return MSG_INCORRECT_COMMAND
        else:
            return MSG_INCORRECT_COMMAND

        exception = False
        no_comments = False
        no_replies = False
        if 'no-replies' in args:
            no_replies = True
            args.remove('no-replies')
        if 'no-comments' in args:
            no_comments = True
            no_replies = False
            args.remove('no-comments')
        if 'except' in args:
            exception = True
            no_comments = False
            no_replies = False
            args.remove('except')
        if args:
            return MSG_INCORRECT_COMMAND

        node = self.bot.session.query(Node).filter_by(id=node_id).first()
        if not node:
            node = Node(id=node_id)

        subscription = self.bot.session.query(Subscription).filter_by(
            node_id=node_id, chat_id=chat_id).first()
        if not subscription:
            subscription = Subscription(node=node, chat_id=chat_id)

        subscription.exception = exception
        subscription.no_comments = no_comments
        subscription.no_replies = no_replies

        self.bot.session.add(subscription)
        self.bot.session.commit()

        return MSG_OK
예제 #25
0
def subscription_post(client, service):
    exists = Subscription.query.filter_by(device=client).filter_by(
        service=service).first() is not None
    if exists:
        return jsonify(Error.DUPLICATE_LISTEN)

    subscription_new = Subscription(client, service)
    db.session.add(subscription_new)
    db.session.commit()

    if zeromq_relay_uri:
        queue_zmq_message(
            json_encode({'subscription': subscription_new.as_dict()}))

    return jsonify({'service': service.as_dict()})
예제 #26
0
    def test_new_subscriber_notification(self):
        #generate a notification
        new_sub = Subscription(user_id=self.user2.id, shake_id=1)
        new_sub.save()

        notification = Notification.new_subscriber(sender=self.user2,
                                                   receiver=self.user,
                                                   action_id=new_sub.id)

        sent_notification = Notification.get("id=%s", notification.id)
        self.assertEqual(sent_notification.id, notification.id)
        self.assertEqual(sent_notification.sender_id, self.user2.id)
        self.assertEqual(sent_notification.receiver_id, self.user.id)
        self.assertEqual(sent_notification.action_id, new_sub.id)
        self.assertEqual(sent_notification.type, 'subscriber')
예제 #27
0
def _format_user_data(user_data):

    user = None
    subscription_list = []

    #  Loop through all users and subs
    for item in user_data:
        # print(item)

        # If Dynamo item is user metadata, create User class
        if 'Email address' in item:
            print('user', item['Email address'])
            user = User(
                email_address=item['Email address'],
                user_id=item['PK'][5:],
                character_set_preference=item['Character set preference'],
                date_created=item['Date created'],
                user_alias=item['User alias'],
                user_alias_pinyin=item['User alias pinyin'],
                user_alias_emoji=item['User alias emoji'],
                subscriptions=[])

        # If Dynamo item is a list subscription, add the list to the user's lists dict
        if 'List name' in item:
            print('list', item['List name'])
            # Shortening list id from unique id (ex, LIST#1ebcad40-bb9e-6ece-a366-acde48001122#SIMPLIFIED)
            if 'SIMPLIFIED' in item['SK']:
                list_id = item['SK'][5:-11]
            if 'TRADITIONAL' in item['SK']:
                list_id = item['SK'][5:-12]

            sub = Subscription(list_name=item['List name'],
                               unique_list_id=item['SK'][5:],
                               list_id=list_id,
                               character_set=item['Character set'],
                               status=item['Status'],
                               date_subscribed=item['Date subscribed'])
            subscription_list.append(sub)

        # Sort lists by list id to appear in order (Level 1, Level 2, etc.)
        subscription_list = sorted(subscription_list,
                                   key=lambda k: k.list_id,
                                   reverse=False)

    user.subscriptions = subscription_list

    print('formatted user ', user)
    return user
예제 #28
0
    def subscription(jwt):
        data = request.get_json()
        method = request.method

        if method == 'POST':
            nutritionist_id = data.get('nutritionist_id')
            client_id = data.get('client_id')
            subscription_status = True

            check_nutritionist = Nutritionist.query.get(nutritionist_id)
            check_client = Client.query.get(client_id)

            subscription_check = Subscription.query.filter(
                Subscription.client_id == client_id,
                Subscription.nutritionist_id == nutritionist_id).all()

            if not check_nutritionist or not check_client or not subscription_status:
                abort(412)
                return jsonify({
                    'success':
                    False,
                    'message':
                    'provide accurate data for required fields'
                }), 412
            elif subscription_check:
                abort(422)
                return jsonify({
                    'success':
                    False,
                    'message':
                    'Client already subscribed to this nutritionist'
                }), 422
            else:
                try:
                    subscription = Subscription(
                        nutritionist_id=nutritionist_id,
                        client_id=client_id,
                        subscription_status=subscription_status)
                    subscription.insert()

                    return jsonify({
                        'success': True,
                        'message': 'Client subscription added'
                    })

                except:
                    abort(422)
예제 #29
0
def create_subscription(pigeon_id, house_name):
    pigeon_key = ndb.Key(Pigeon, pigeon_id)
    house_list = House.query(House.name == house_name).fetch()
    house_key = house_list[0].key
    subscription = Subscription(pigeon_key=pigeon_key,
                                house_key=house_key,
                                num_per_day=0)
    subscription.put()

    card_list = Card.query(ancestor=house_key).fetch()
    for card in card_list:
        _initailize_progress(pigeon_key, card.key)

    house = house_list[0]
    house.num_of_subed = house.num_of_subed + 1
    house.put()
    return
예제 #30
0
def create_stream(pigeon_id, name, cover_url, sub_list, tag_list):
    pigeon_key = ndb.Key(Pigeon, pigeon_id)
    stream = Stream()
    stream.key = ndb.Key(Stream, name, parent=pigeon_key)
    stream.name = name
    stream.cover_url = cover_url
    stream.tags = tag_list
    stream.put()
    for pid in sub_list:
        if pid != pigeon_id:
            if not pigeon_exists(pid):
                create_pigeon(pid)
            suber_key = ndb.Key(Pigeon, pid)
            sub = Subscription()
            sub.Pigeon_key = suber_key
            sub.Stream_key = stream.key
            sub.put()
    return