예제 #1
0
def create():
    # This will deserialize the JSON from insomnia
    schema = AdSchema()

    try:
        # attempt to convert the JSON into a dict
        data = schema.load(request.get_json())
        # Use that to create a ad object
        ad = Ad(**data, createdBy=g.current_user)
        # store it in the database
        db.commit()
    except ValidationError as err:
        # if the validation fails, send back a 422 response
        return jsonify({
            'message': 'Validation failed',
            'errors': err.messages
        }), 422

    # otherwise, send back the ad data as JSON
    return schema.dumps(ad), 201
예제 #2
0
                offset = int(updated_str[-5:][:2])
            except:
                logging.error('unable to extract UTC offset for link=%s: %s' % (link, updated_str))
                offset = 0
            try:
                dt = datetime.strptime(updated_str[:len(updated_str)-6], '%Y-%m-%dT%H:%M:%S')
                updated = dt + timedelta(hours=offset/100)
            except ValueError:
                logging.error('unable to parse the datetime for link=%s: %s' % (link, updated_str))
                updated = now
            if not title:
                logging.warn('Got Ad (%s) with no title from RSS feed' % link)
            elif not desc:
                logging.warn('Got Ad (%s) with no desc from RSS feed' % link)
            else:
                ad = Ad(key=ad_key, feeds=[fhid], title=title, desc=desc, update_dt=updated, url=link)
                ads.append(ad)

        # determine which ads already exist in the datastore
        ads_to_put = []
        keys = [ad.key() for ad in ads]
        existing_ads = db.get(keys)
        for i in xrange(len(keys)):
            ad = ads[i]
            e_ad = existing_ads[i]
            if e_ad is None:
                ads_to_put.append(ad)
            elif ad.feeds[0] not in e_ad.feeds:
                # If the ad is not listed as being in feeds we already know it
                # to be in, then ad the existing feed list to the new ad.  Do
                # it this way so that we store the latest ad info just retrieved.
예제 #3
0
      draw3(Math.floor(Math.random() * 500), 20 + Math.floor(Math.random() * 500), Math.floor(Math.random() * 200), 20)

    }

    drawComics()
""",
        description=
        """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus libero, iaculis sit amet nunc a, varius interdum turpis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam ornare ultrices libero, vitae malesuada erat interdum sit amet. Quisque vel felis dignissim, efficitur felis auctor, consequat magna. Phasellus tortor elit, dignissim ac euismod id, fermentum ut turpis. Nullam ex orci, elementum ac felis quis, interdum consequat eros. Etiam pharetra diam ut tincidunt consectetur. Nunc sit amet bibendum diam, et laoreet sapien. Nam aliquam convallis libero ac maximus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed vitae finibus arcu.\n
        \n
        Vivamus cursus placerat ipsum eget suscipit. Sed malesuada diam nec fermentum rutrum. Pellentesque sagittis hendrerit ligula vel placerat. Suspendisse blandit libero sed sapien lacinia, nec finibus leo feugiat. Duis porta sit amet magna nec interdum. Praesent vitae convallis arcu, vitae interdum erat. Vivamus nisi nulla, tincidunt eu ultricies sit amet, placerat et lectus. Integer at erat volutpat, ultricies sapien luctus, pulvinar mauris. Cras eget luctus elit.""",
        medium=application)

    Ad(name="Looking for an Illustartor",
       createdBy=company,
       created="2018/07/02",
       description=
       """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus libero, iaculis sit amet nunc a, varius interdum turpis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam ornare ultrices libero, vitae malesuada erat interdum sit amet. Quisque vel felis dignissim, efficitur felis auctor, consequat magna. Phasellus tortor elit, dignissim ac euismod id, fermentum ut turpis. Nullam ex orci, elementum ac felis quis, interdum consequat eros. Etiam pharetra diam ut tincidunt consectetur. Nunc sit amet bibendum diam, et laoreet sapien. Nam aliquam convallis libero ac maximus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed vitae finibus arcu.\n
        \n
        Vivamus cursus placerat ipsum eget suscipit. Sed malesuada diam nec fermentum rutrum. Pellentesque sagittis hendrerit ligula vel placerat. Suspendisse blandit libero sed sapien lacinia, nec finibus leo feugiat. Duis porta sit amet magna nec interdum. Praesent vitae convallis arcu, vitae interdum erat. Vivamus nisi nulla, tincidunt eu ultricies sit amet, placerat et lectus. Integer at erat volutpat, ultricies sapien luctus, pulvinar mauris. Cras eget luctus elit.""",
       medium=illustration)

    Ad(name="Need music for a project",
       createdBy=cyberdyne,
       created="2018/07/02",
       description=
       """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus libero, iaculis sit amet nunc a, varius interdum turpis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam ornare ultrices libero, vitae malesuada erat interdum sit amet. Quisque vel felis dignissim, efficitur felis auctor, consequat magna. Phasellus tortor elit, dignissim ac euismod id, fermentum ut turpis. Nullam ex orci, elementum ac felis quis, interdum consequat eros. Etiam pharetra diam ut tincidunt consectetur. Nunc sit amet bibendum diam, et laoreet sapien. Nam aliquam convallis libero ac maximus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed vitae finibus arcu.\n
    \n
    Vivamus cursus placerat ipsum eget suscipit. Sed malesuada diam nec fermentum rutrum. Pellentesque sagittis hendrerit ligula vel placerat. Suspendisse blandit libero sed sapien lacinia, nec finibus leo feugiat. Duis porta sit amet magna nec interdum. Praesent vitae convallis arcu, vitae interdum erat. Vivamus nisi nulla, tincidunt eu ultricies sit amet, placerat et lectus. Integer at erat volutpat, ultricies sapien luctus, pulvinar mauris. Cras eget luctus elit.""",
       medium=music)

    db.commit()
예제 #4
0
    def post(self):
        session = is_logged_in(self)
        if not session:
            return self.redirect(REDIR_URL)

        req = self.request
        errors = {}

        ad_url = validate_string(req, errors, 'ad_url', 'Craigslist Ad URL')
        if ad_url:
            if ad_url[:7] != 'http://':
                ad_url = 'http://' + ad_url
            m = RE_URL_CHECK.match(ad_url)
            if not m:
                errors[
                    'ad_url'] = 'This URL does not appear to be a valid craigslist.org webpage.'
            else:
                m = RE_ID.match(ad_url)
                if not m:
                    errors['ad_url'] = 'Could not extract the ID from Ad URL'
                else:
                    cid = int(m.group(1))
        if len(errors):
            return self.redirect_to_self(GET_PARAMS, errors)

        # efficiency: get Ad and UserCmt at the same time
        to_put = []
        ad_key = db.Key.from_path('Ad', cid)
        cmt_key = db.Key.from_path('UserCmt', '%s%s' % (session['my_id'], cid))
        ad, cmt = db.get([ad_key, cmt_key])

        # download the ad if we don't already have it in our db
        if not ad:
            ret = self.fetch_and_parse_page(ad_url)
            if not ret:
                errors['ad_url'] = 'Unable to download the webpage'
                return self.redirect_to_self(GET_PARAMS, errors)
            title, desc, dt = ret
            ad = Ad(key=ad_key,
                    feeds=['manual'],
                    title=title,
                    desc=desc,
                    update_dt=dt,
                    url=ad_url)
            to_put = [ad]
        elif 'manual' not in ad.feeds:
            ad.feeds.insert(0, 'manual')
            to_put = [ad]

        # create UserCmt
        if not cmt:
            cmt = UserCmt(key=cmt_key, feeds=ad.feeds)
            to_put.append(cmt)
        elif 'manual' in cmt.feeds:
            return self.redirect(
                '/tracker?info=You%20are%20already%20manually%20tracking%20that%20ad.'
            )
        elif cmt.feeds != ad.feeds:
            cmt.feeds = ad.feeds
            to_put.append(cmt)

        # save the new entities
        if to_put:
            db.put(to_put)

        # redirect the user to the feed page
        self.redirect('/tracker?info=Added%20Ad%20%23' + str(cid) +
                      '%20to%20your%20manually%20specified%20list.')