def test_get_or_create(self): user1, created1 = get_or_create(User, name='foo', social_id='bar') db.session.add(user1) db.session.commit() user2, created2 = get_or_create(User, name='foo', social_id='bar') self.assertTrue(created1) self.assertFalse(created2) self.assertEquals(user1, user2)
def login(): # get app_access_token if we haven't already if not fb_app_access_token: generate_fb_app_access_token() data = request.get_json() fb_user_access_token = data.get('user_access_token') if valid_fb_user_access_token(fb_user_access_token): fb_id = data.get('fb_id') first_name = data.get('first_name') last_name = data.get('last_name') email = data.get('email') user, is_new_user = get_or_create(db.session, User, fb_id=fb_id) if is_new_user: user = User(fb_id, first_name, last_name, email) db.session.add(user) db.session.commit() login_user(user) return 'Logged In' return 'Error Logging In', 500
def post(self, record_id): """在一条记录下创建一个标签""" name = request.form.get('name', '') if name: record = get_or_raise(RecordM, id=record_id) tag = get_or_create(TagM, name=name) tag.records.append(record) db.session.add(tag) db.session.commit() return {'status': 201, 'message': 'Created', 'data': tag}, 201 else: raise MissingFormData()
def create_word(word_class): form = word_class.form() if form.validate_on_submit(): word, created = get_or_create(word_class, dictionary=current_user.dictionary, **{key: value for key, value in form.data.items() if key != 'next'}) if created: word.save() flash('Successfully created word!', 'success') return redirect(url_for('main.index')) else: flash('An identical word already exists.', 'error') return render_template('form.html', title='New Word', form=form)
def import_data(csvfile, image_basedir): print("importing data") counter = Counter() with open(csvfile, "r") as f: reader = csv.DictReader(f) for row in reader: product, product_created = get_or_create(models.Product, db.session, name=row["name"], price=row["price"]) product.description = row["description"] brand, brand_created = get_or_create(models.Brand, db.session, name=row["brand"]) product.brand = brand counter["brands"] += 1 if brand_created: counter["brands_created"] += 1 for import_tag in row["tags"].split("|"): tag, tag_created = get_or_create(models.ProductTag, db.session, name=import_tag) product.tags.append(tag) counter["tags"] += 1 if tag_created: counter["tags_created"] += 1 secured_filename_with_ext = secure_filename(row["image_filename"]) with open(os.path.join(image_basedir, row["image_filename"]), "rb") as f: image_url = os.path.join(app.config["UPLOAD_FOLDER"], secured_filename_with_ext) thumbnail_url = os.path.join( app.config["UPLOAD_FOLDER"], form.thumbgen_filename(secured_filename_with_ext), ) full_image = Image.open(f) full_image = full_image.convert("RGB") full_image.save(os.path.abspath(image_url)) thumbnail_image = Image.open(f) thumbnail_image = thumbnail_image.convert("RGB") thumbnail_image.thumbnail(app.config["THUMBNAIL_SIZE"], Image.ANTIALIAS) thumbnail_image.save(os.path.abspath(thumbnail_url)) image = models.ProductImage(image_url=image_url, thumbnail_url=thumbnail_url) image.product = product db.session.add(image) db.session.commit() counter["images"] += 1 db.session.add(product) db.session.commit() counter["products"] += 1 if product_created: counter["products_created"] += 1 print("Products processed=%d (created=%d)" % (counter["products"], counter["products_created"])) print("Brands processed=%d (created=%d)" % (counter["brands"], counter["brands_created"])) print("Tags processed=%d (created=%d)" % (counter["tags"], counter["tags_created"])) print("Images processed=%d" % counter["images"])
def admin_get_spider(): result1 = requests.get( url=(current_app.config['SCRAPYD_URL'] + '/listversions.json'), params={"project": current_app.config["SCRAPY_PROJECT_NAME"]}) if result1.status_code != 200: return forbidden("请求失败") result2 = requests.get( url=(current_app.config['SCRAPYD_URL'] + '/listspiders.json'), params={"project": current_app.config["SCRAPY_PROJECT_NAME"]}) if result2.status_code != 200: return forbidden("请求失败") spiders = [] # 删除不在spiders的task result = Task.query.filter(Task.name.notin_( result2.json()['spiders'])).all() if len(result) > 0: for u in result: remove_job(u.name) db.session.delete(u) db.session.commit() # 获取task状态 if len(result2.json()['spiders']) > 0: for item in result2.json()['spiders']: task = get_or_create(Task, name=item) spiders.append({ "spider_name": task.name, "interval": task.interval, "status": 1 if (current_app.scheduler.get_job(task.name) and current_app.scheduler.get_job(task.name).next_run_time) else 0, "project_name": current_app.config["SCRAPY_PROJECT_NAME"], "current_version": datetime.fromtimestamp(int( result1.json()['versions'][-1])).strftime( "%Y-%m-%d %H:%M:%S"), "history_version": datetime.fromtimestamp(int(result1.json()['versions'] [-2])).strftime("%Y-%m-%d %H:%M:%S") }) return jsonify({ "success": True, "data": { "data": spiders, "project_name": current_app.config["SCRAPY_PROJECT_NAME"], "current_version": datetime.fromtimestamp(int( result1.json()['versions'][-1])).strftime("%Y-%m-%d %H:%M:%S"), "history_version": datetime.fromtimestamp(int( result1.json()['versions'][-2])).strftime("%Y-%m-%d %H:%M:%S"), } })