def receipts(user_id): user = User.query.filter_by(id=user_id).first() if not user: return make_response("User " + str(user_id) + " doesn't exist", 404) if request.method == "POST": if validate_request_receipt(): receipt_date = date_string_to_datetime(request.json["date_time"]) receipt = Receipt(request.json["store_name"], request.json["category"], request.json["total_transaction"], receipt_date) user.receipts.append(receipt) for item in request.json["items"]: if validate_item(item): item = PurchasedItem(item["name"], request.json["category"], item["price_per_item"], item["quantity"]) receipt.purchased_items.append(item) db.add(user) db.commit() return json.dumps({"receipt": receipt.serialize()}) else: #request is a get and return the receipts of the user return get_user_receipts(user)
def add_receipt(num_receipts=1): user = User.query.first() days_ago_to_start = num_receipts/2 date = datetime.now() - timedelta(days=days_ago_to_start) even_receipt = True for x in range(num_receipts): SHOP_NAME = "Countdown Birkenhead" SHOP_CATEGORY = "Groceries" TOTAL = 123.81 r = Receipt(SHOP_NAME, SHOP_CATEGORY, TOTAL, date) r.purchased_items = [ PurchasedItem("Chocolate Milk", SHOP_CATEGORY, 3.99, 2), PurchasedItem("Garlic Pita Breads", SHOP_CATEGORY, 4.50, 1), PurchasedItem("Old Spice Deoderant", SHOP_CATEGORY, 6.21, 4), PurchasedItem("Eye Fillet Steak", SHOP_CATEGORY, 21.4, 1), PurchasedItem("Obikwa Wine 750mL", SHOP_CATEGORY, 6.99, 4), PurchasedItem("North Shore Rubbish Sack", SHOP_CATEGORY, 4.99, 5), PurchasedItem("Nutri-Grain 700g", SHOP_CATEGORY, 6.23, 1), PurchasedItem("Olivio Butter", SHOP_CATEGORY, 5.95, 1) ] user.receipts.append(r) even_receipt = not even_receipt if even_receipt: date = date + timedelta(days=1) print len(user.receipts) db.add(user) db.commit()
def rand_receipt(): store = choice(store_names) # print store store_name = store.split("-")[0].strip() category = store.split("-")[1].strip() # tax_rate = randint(100, 150)/1000.0 items = rand_items(store_name, category, randint(1, 7)) total_transaction = 0.0 for item in items: total_transaction += item.price_per_item * item.quantity total_transaction = round(total_transaction, 2) days = randint(0, 21) hours = randint(0,23) minutes = randint(0, 59) time_ago = timedelta(days=days, hours=hours, minutes=minutes) receipt = Receipt(store_name, category, total_transaction, datetime.now()-time_ago) receipt.purchased_items = items return receipt
def create_cocktail_mary_post(): user = Session.query(User).filter(User.username == 'Fat Larry').first() category = (Session.query(Category).filter( Category.name == 'Коктейли').one_or_none()) receipt_text = '''Налить водку и томатный сок в охлаждённый высокий стакан. Добавить лимонный сок. После по вкусу насыпать перец и соль. Всё тщательно перемешать и украсить веточкой сельдерея, можно долькой лимона. ''' receipt = Receipt( user_id=user.id, category_id=category.id, title='Коктейль Кровавая Мэри', text=receipt_text, is_published=True, category=category, picture='mary.jpg', picture_min='mary-small.jpg', ) ingredients = [ ('водка', 'охлаждённая', 75, 'мл'), ('томатный сок', '', 100, 'мл'), ] for item in ingredients: ingredient = Session.query(Ingredient).filter( Ingredient.name == item[0]).first() a = IngredientsAssociation(correction=item[1], quantity=item[2], measure=item[3]) a.ingredient = ingredient receipt.ingredients.append(a) Session.flush() Session.add(receipt) Session.commit()
def get(self): user = users.get_current_user() if user: list_receipt = Receipt.listReceiptByUsr(user) self.response.write(JINJA_ENVIRONMENT.get_template('templates/list_new.html').render({'receipts' : list_receipt})) else: self.redirect(users.create_login_url(self.request.uri))
def monitor_receipt_and_contract(): """ 监听 kafka 交易数据,出现新数据时,从 web3 获取 receipt :return: """ if not config.get('kafka', 'transaction_topic', fallback=None): logger_err.error( 'config.ini 中没有 transaction_topic 参数,退出 monitor_receipt_and_contract 任务' ) return elif not config.get('kafka', 'receipt_topic', fallback=None): logger_err.error( 'config.ini 中没有 receipt_topic 参数,退出 monitor_receipt_and_contract 任务' ) return elif not config.get('kafka', 'contract_topic', fallback=None): logger_err.error( 'config.ini 中没有 contract_topic 参数,退出 monitor_receipt_and_contract 任务' ) return consumer = kafka_consumer(config.get('kafka', 'transaction_topic'), group_id='monitor_receipt') last_block_height = None tx_cnt = 0 # 已处理的交易数 for msg in consumer: tx = msg.value current_block_height = tx["block_number"] if last_block_height != current_block_height: logger.info(f'区块 {last_block_height} 共处理交易 {tx_cnt} 笔') logger.info(f'开始处理区块高度 {current_block_height} 下各交易的 receipt') last_block_height = current_block_height tx_cnt = 1 else: tx_cnt += 1 try: receipt = w3.eth.getTransactionReceipt(tx['hash']) except TransactionNotFound: logger_err.error( f'在区块高度 {current_block_height} 中找不到交易 {tx["hash"]}') continue Receipt(data=receipt).save() if receipt.get('contractAddress'): logger.info(f'在区块高度为 {current_block_height} 的交易 {tx["hash"]} 中' f'发现新创建合约 {receipt.get("contractAddress")}') Contract(data=receipt, block_number=receipt.get('blockNumber')).save()
def get(self): user = users.get_current_user() if user: list_receipt = Receipt.listReceiptByUsr(user, self.request.get('keyword')) search self.response.headers['Content-Type'] = 'applicaton/json' result = search.Index('api-tags').search("ii") obj = { 'list' : {"a":"a"} } self.response.out.write(json.dumps(obj)) else: self.redirect(users.create_login_url(self.request.uri))
def create_omelet_post(): user = (Session.query(User).filter( User.username == 'Fat Larry').one_or_none()) category = (Session.query(Category).filter( Category.name == 'Завтраки').one_or_none()) receipt_text = '''Нагрейте оливковое масло в маленькой сковороде на среднем огне. Добавьте лук и бекон, жарьте 2-3 минуты, постоянно помешивая компоненты. Взбейте два яйца, разбавьте небольшим количеством холодной воды. Приправьте специями, тщательно перемешайте. Постепенно выливайте яичную смесь на сковороду с луком и беконом. Жарьте яичницу с беконом на протяжении 3-4 минут, подавайте с французским багетом. Декорируйте листьями салата, пряными веточками душистых трав (укропом, петрушкой). ''' receipt = Receipt( user_id=user.id, category_id=category.id, title='Омлет с беконом', text=receipt_text, is_published=True, category=category, picture='omelette.jpeg', picture_min='omelette-small.jpeg', ) ingredients = [ ('яйцо', 'куриное', 3, 'шт'), ('бекон', 'тонкий', 125, 'гр'), ('масло оливковое', '', 1, 'ст. ложка'), ('сыр', 'тёртый', 85, 'гр'), ('лук', 'красный', 1, 'шт'), ('соль', 'по вкусу', 1, 'щепотка'), ('перец', 'по вкусу', 1, 'щепотка'), ('специи', 'по вкусу', 1, 'щепотка'), ] for item in ingredients: ingredient = Session.query(Ingredient).filter( Ingredient.name == item[0]).first() a = IngredientsAssociation(correction=item[1], quantity=item[2], measure=item[3]) a.ingredient = ingredient receipt.ingredients.append(a) Session.flush() Session.add(receipt) Session.commit()
def create_chicken_post(): user = (Session.query(User).filter( User.username == 'Child of spices').first()) category = (Session.query(Category).filter( Category.name == 'Вторые блюда').one_or_none()) receipt_text = '''Голени посолить, поперчить и обжарить до румяной корочки. Уложить в форму, смазанную маслом. Помидоры и один сладкий перец нарезать кубиками, другой перец — средними полосками, лук — полукольцами, чеснок измельчить. Там же, где жарилась курица, обжарить лук, затем добавить помидоры и перец кубиком, готовить на большом огне 5 минут. Под конец добавить чеснок и листики 1 веточки розмарина (я добавляла сушёный), посолить, поперчить. Выложить соус на курицу. Сверху положить полоски перца, целые помидорки черри и 2 веточки розмарина. Печь около 25 минут при 200 градусах. ''' receipt = Receipt( user_id=user.id, category_id=category.id, title='Курица с овощами', text=receipt_text, is_published=True, category=category, picture='chicken.jpg', picture_min='chicken-small.jpg', ) ingredients = [ ('курица', '', 500, 'гр'), ('розмарин', 'по вкусу', 1, 'веточка'), ('сметана', '', 1, 'столовая ложка'), ('соль', 'по вкусу', 1, 'щепотка'), ('перец', 'по вкусу', 1, 'щепотка'), ] for item in ingredients: ingredient = Session.query(Ingredient).filter( Ingredient.name == item[0]).first() a = IngredientsAssociation(correction=item[1], quantity=item[2], measure=item[3]) a.ingredient = ingredient receipt.ingredients.append(a) Session.flush() Session.flush() Session.add(receipt) Session.commit()
def confirm_ticket(ticket_id, user_id, quantity, price): receipt = Receipt(user_id=user_id) db.session.add(receipt) db.session.commit() # db.session.close() # session = db.Session() # receipt_created = session.query(Receipt).filter(Receipt.user_id==user_id) receipt_detail = ReceiptDetail(receipt_id=receipt.id, ticket_id=ticket_id, quantity=quantity, price=price * quantity) db.session.add(receipt_detail) try: db.session.commit() return True except Exception as e: print(e) db.session.rollback() return False
def create_banana_cocktail_post(): user = (Session.query(User).filter( User.username == 'Child of spices').first()) category = (Session.query(Category).filter( Category.name == 'Коктейли').one_or_none()) receipt_text = '''Бананы очистить, нарезать кусочками, шоколад разломить на несколько частей. В кастрюлю влить молоко, положить бананы и поставить на медленный огонь. Постоянно помешивая, довести почти до кипения. Как только шоколад расплавится, снять с огня. Блендером взбить полученную смесь до появления пены. Разлить по стаканам и посыпьте корицей. ''' receipt = Receipt( user_id=user.id, category_id=category.id, title='Молочный коктейль с бананом и шоколадом', text=receipt_text, is_published=True, category=category, picture='banana.jpg', picture_min='banana-small.jpg', ) ingredients = [ ('молоко', '', 500, 'мл'), ('банан', 'свежий', 1, 'шт'), ('шоколад', 'молочный', 80, 'гр'), ('сахар', 'по вкусу', 2, 'столовые ложки'), ] for item in ingredients: ingredient = Session.query(Ingredient).filter( Ingredient.name == item[0]).first() a = IngredientsAssociation(correction=item[1], quantity=item[2], measure=item[3]) a.ingredient = ingredient receipt.ingredients.append(a) Session.flush() Session.add(receipt) Session.commit()
def post(self): user = users.get_current_user() if user: file_upload = self.request.POST.get("file", None) file_name = file_upload.filename logging.info(file_name) receipt = Receipt() receipt.store = self.request.get('store') receipt.usr = user receipt.picture = Images(filename = file_name, blob = file_upload.file.read()).put() receipt.put() t = {"image" : '/serve/%s'%receipt.picture.id()} self.response.write(JINJA_ENVIRONMENT.get_template('templates/submit_success.html').render(t)) else: self.redirect(users.create_login_url(self.request.uri))
def post(self): user = users.get_current_user() if user: try: file_upload = self.request.POST.get("file", None) file_name = file_upload.filename logging.info(file_name) file = insert_file(file_name,"Image file",None, mimetypes.guess_type(file_name)[0],file_upload.file.read()) insert_permission(file.get('id'), '*****@*****.**','user','reader') receipt = Receipt() receipt.desc = self.request.get('desc') receipt.tags = self.request.get('tags').split() receipt.usr = user receipt.picture_dlink = file.get('id') receipt.put() self.response.write(JINJA_ENVIRONMENT.get_template('templates/submit_success.html').render({'id' : file.get('id')})) except Exception as e: self.response.write("Sorry, something went wrong. Please try again later!!") logging.error(e) else: self.redirect(users.create_login_url(self.request.uri))