def quick_import(file_name='leftovers.csv'): csv_file = open_csv(file_name) for i, line in enumerate(csv_file): if line[0] and line[1]: name = unicode.strip(line[0].decode('utf8')) gift = Gift.all().filter('name =', name) if gift.count(): gift = gift[0] leftovers = line[1].strip().replace(',', '').replace('.', '') if not leftovers: leftovers = 0 else: leftovers = int(leftovers) if gift.leftovers == leftovers: if gift.leftovers !=0 and gift.receipt_date: gift.receipt_date = None gift.put() continue gift.leftovers = leftovers if gift.receipt_date: gift.receipt_date = None gift.put() print "%s %s : %s" % (i, gift.uid, gift.leftovers) print "========================================================" for g in Gift.all(): print g.leftovers
def index(request): if request.method == 'POST': text = request.form.get('q', '') if not text: return redirect('/') text = text.strip() gifts = Gift.all().filter('in_trash =', False)\ .filter('leftovers >', 0).search( text, properties=['name'] ) if not gifts.count(): gifts = Gift.all().filter('in_trash =', False)\ .filter('leftovers >', 0).search( text, properties=['barcode'] ) if not gifts.count(): gifts = Gift.all().filter('in_trash =', False)\ .filter('leftovers >', 0).search( text, properties=['catalogue_id'] ) if not gifts: return redirect('/') return render_to_response( 'srch/index.html', {'gifts': gifts, 'search_text': text} ) else: return redirect('/')
def search(request): if request.method == 'POST': text = request.form.get('q', '') if not text: return redirect('/') gifts_list = Gift.all().filter('leftovers >', 0).search(text, properties=['name']) gifts_list = filter_leftovers(gifts_list) if not gifts_list: return redirect('/') paginator = Paginator(gifts_list, 24) try: page = int(request.args.get('page', 1)) except ValueError: page = 1 try: gifts = paginator.page(page) except (EmptyPage, InvalidPage): gifts = paginator.page(paginator.num_pages()) categories = get_cat_subcat() return render_to_response('index_page/main_page.html', {'gifts': gifts, 'categories': categories[0], 'subcategories': categories[1], 'subcategories_keys': categories[2], 'price_modif': GlobalPriceModif.get_price_modif()}) else: return redirect('/')
def export(): writer = csv.writer(open('quick_export.csv', 'wb')) writer.writerow(['Идентификатор', 'Название', 'Краткое описание', 'Полное описание']) for gift in Gift.all(): name = gift.name if name: name = name.encode('utf-8') else: name = u'' short_description = gift.short_description if short_description: short_description = clear_data(short_description) else: short_description = u'' description = gift.description if description: description = clear_data(description) else: description = u'' writer.writerow([gift.uid, name, short_description.encode('utf-8'), description.encode('utf-8')])
def preview_newsletter(request, key): newsletter = Newsletter.get(key) gifts = [] if newsletter.gifts: gifts_split = newsletter.gifts.split(",") for gift in gifts_split: try: gift = gift.strip() obj = Gift.all().filter("uid =", gift).get() if obj: gifts.append(obj) except Exception: pass managers = [] users = UserProfile.all().filter("is_send_newsletter =", True).filter("email !=", None) if newsletter.type != 999: users = users.filter("newsletter_type =", newsletter.type) files = [] for file_key in newsletter.n_price_list: file_ = File.get(file_key) if file_: files.append(file_) return render_to_response( "postman/admin/newsletters/preview.html", {"newsletter": newsletter, "gifts": gifts, "key": key, "files": files, "managers": managers, "users": users}, )
def get_gift_mem(uid_): if not uid_: return None try: gift = Gift.all().filter('uid =', uid_).get() return prefetch_refprops([gift], Gift.category, Gift.group)[0] except Exception: return None
def get_list_all(request): list_gifts = memcache.get('api_get_list_all') if not list_gifts: gifts = Gift.all() if gifts: list_gifts = [gift.uid for gift in gifts] memcache.add('api_get_list_all', list_gifts, 7200) return render_json_response(list_gifts)
def sync_new_task(request, uid): logging.info("Create new gift from 5studio.ru with uid: %s" % uid) url = 'http://www.5studio.ru/api/v1/get/gift.json?&uid=%s' % uid result = urlfetch.fetch(url) if result.status_code == 200: j = simplejson.loads(result.content) if len(j): name = j.get('name', '').replace('\\"', '"') name_origin = j.get('name_origin', '').replace('\\"', '"') barcode = j.get('barcode', '') description = j.get('description', '').replace('\\"', '"') price = j.get('price', 0.0) leftovers = j.get('leftovers', 0) gift = Gift.all().filter('uid_5studio =', uid).fetch(1) if gift: gift = gift[0] is_new = False else: is_new = True gift = Gift( uid_5studio=uid, name=name, name_origin=name_origin, barcode=barcode, description=description, price=price, leftovers=leftovers) brand = j.get('brand', '').replace('\\"', '"') if brand: brand_obs = Brand.all().filter('brand =', brand) if not brand_obs.count(): brand = Brand(brand=brand) brand.put() else: brand = brand_obs.get() gift.brand = brand gift.category = get_category(j) gift.subcategory = get_subcategory(j, gift.category) gift.put() if is_new or not gift.thumbs: thumbs_url = j.get('thumbs_url', []) for url in thumbs_url: gift_uid = gift.key().id() memcache.add('sync/add_image/%s' % gift_uid, 'http://%s' % url, 7200) def txn(): taskqueue.add(url=url_for( 'sync/sync_add_image', uid=gift.key().id()), transactional=True) db.run_in_transaction(txn) return render_json_response({'api_msg': 'Ok', 'api_success': True})
def sync_gift(request): for gift in Gift.all(): if gift.uid_5studio: def txn(): taskqueue.add(url=url_for('sync/sync_gift_task', key=gift.key()), transactional=True) db.run_in_transaction(txn) return render_to_response('sync/sync_gift.html')
def get_gift(request, idx): gift = Gift.get_by_id(idx) if not gift: return redirect('/') additional_gifts = Gift.all().filter('subcategory =', gift.subcategory).filter( 'name !=', gift.name).fetch(4) return render_to_response('gift/get.html', {'gift': gift, 'additional_gifts': additional_gifts, 'price_modif': GlobalPriceModif.get_price_modif()})
def trash_ajax(request): if request.method == 'POST': last_gift = request.values.get('last_gift') if last_gift: last_gift = int(last_gift) gifts = gifts = Gift.all().filter('in_trash =', True) if gifts: gifts = gifts.fetch(50, last_gift) return render_to_response('gift/list.html', {'gifts': gifts}) return render_to_response("empty.html")
def update_images(imgs_path): #cat_path = os.path.(imgs_path) if not os.path.exists(imgs_path): print "Error! Path of images directory not exists!" return False gifts = Gift.all() for i, gift in enumerate(gifts): print i + 1 if gift.thumbs: continue fill_obj(gift, imgs_path)
def export(): export_path = 'experiments/images/' if not os.path.exists(export_path): os.mkdir(export_path) for gift in Gift.all(): if gift.thumbs: path = os.path.join(export_path, gift.uid) os.mkdir(path) for i,thumb in enumerate(gift.thumbs): img = internal_thumb_image(thumb, size="700x700") if img: fimage = open(os.path.join(path,'%s.jpg' % i), 'wb') fimage.write(img)
def all_brands(request): objs_tmp = Brand.all() brands = {} brands_ids = {} objs = [] for o in objs_tmp: if o.gifts.filter('leftovers >', 0).count(): objs.append(o) for brand in objs: brands[brand.brand] = [Gift.all().filter('brand =', brand).fetch(3)] brands_ids[brand.brand] = brand.key().id() return render_to_response('index_page/brands.html', {'brands': brands, 'brands_ids': brands_ids})
def all(request): gifts_list = Gift.all() paginator = Paginator(gifts_list, 26) try: page = int(request.args.get('page',1)) except ValueError: page = 1 try: gifts = paginator.page(page) except (EmptyPage, InvalidPage): gifts = paginator.page(paginator.num_pages()) return render_to_response('gift/admin/all.html', {'gifts':gifts})
def clear_description_formatting(): for i, gift in enumerate(Gift.all()): print i change_flag = False if gift.description: tmp = gift.description gift.description = clear_data(gift.description) if tmp != gift.description: change_flag = True if gift.short_description: tmp = gift.short_description gift.short_description = clear_data(gift.short_description) if tmp != gift.short_description: change_flag = True if change_flag: gift.put()
def del_gifts(request): # for gift in Gift.all().filter('to_sync =', True): # gift.delete() for gift in Gift.all().filter('to_sync =', True): if not gift.id_1c: continue def txn(): task_id = str(uuid.uuid4()) memcache.add(task_id, gift.id_1c, TASK_LIVE_TIMEOUT) taskqueue.add( url=url_for( 'api/internal_delete_gifts_json_1c', task_id=task_id ), transactional=True) db.run_in_transaction(txn) return redirect(url_for('admin/index'))
def select_filters(request): if request.method == 'POST': selected_brands = request.form.getlist('brands') brands_gifts = [] if selected_brands: brands_gifts = [gift.key() for gift in Gift.all().filter('brand in', selected_brands)] subcategories_gifts = [] selected_subcategories = request.form.getlist('subcategories') if selected_subcategories: subcategories_gifts = [gift.key() for gift in Gift.all().filter('subcategory in', selected_subcategories)] selected_groups = request.form.getlist('groups') groups_gifts = [] if selected_groups: groups_gifts = [gift.key() for gift in Gift.all().filter('group in', selected_groups)] selected_dates = request.form.getlist('receipt_dates') dates_gift = [] if selected_dates and len(selected_dates) == 2: date_from = string.strip(min(selected_dates)) date_to = string.strip(max(selected_dates)) if date_from: try: date_from = datetime.date(datetime.strptime(date_from, '%Y-%m-%d')) except ValueError: date_from = '' if date_to: try: date_to = datetime.date(datetime.strptime(date_to, '%Y-%m-%d')) except ValueError: date_to = '' if date_from and date_to: dates_gift = [gift.key() for gift in Gift.all().filter('receipt_date >=', date_from).filter('receipt_date <=', date_to)] else: if date_from: dates_gift = [gift.key() for gift in Gift.all().filter('receipt_date =', date_from)] else: if date_to: dates_gift = [gift.key() for gift in Gift.all().filter('receipt_date =', date_to)] gifts = set(brands_gifts + subcategories_gifts + groups_gifts + dates_gift) request.session['mass_edit_items'] = gifts return redirect('/admin/mass_edit/edit/') request.session['mass_edit_items'] = 0 brands = Gift.get_brand_list(is_admin=True) subcategories = Gift.get_subcategories_list() return render_to_response('admin/mass_edit/select_filters.html', {'brands':brands, 'subcategories':subcategories})
def send_newsletter_task(request, user_key, newsletter_key): newsletter = Newsletter.get(newsletter_key) managers = [] message = mail.EmailMessage(sender=settings.DEFAULT_MAIL_FROM, subject=newsletter.title) user = UserProfile.get(user_key) message.to = user.email if not message.to: return Response("Ok") gifts = [] gifts_images = {} if newsletter.gifts: gifts_split = newsletter.gifts.split(",") for gift in gifts_split: try: gift = gift.strip() obj = Gift.all().filter("uid =", gift).get() if obj: gifts.append(obj) if obj.main_thumb: try: img = ThumbImage.get(obj.main_thumb) img = Image.get(img.thumb_200x200) if img: gifts_images[obj.uid] = base64.b64encode(str(img.image)) except Exception: pass except Exception: pass message_text = render_to_string( "postman/send_newsletter.html", {"newsletter": newsletter, "gifts": gifts, "managers": managers, "gifts_images": gifts_images}, ) message.html = message_text attachments = [] for file_key in newsletter.n_price_list: file_ = File.get(file_key) if file_ and file_.blob_key: bi = blobstore.BlobInfo.get(file_.blob_key) if bi: attachments.append(("%s" % file_.title_filename, bi.open().read())) message.attachments = attachments message.send() return Response("OK")
def quick_import(file_name='sync.csv'): csv_file = open_csv(file_name) for line in csv_file: if line[0]: print line[0] gift = Gift.all().filter('uid =', line[0]) if gift: gift = gift[0] brand = unicode.strip(line[1].decode('utf8')) gift.brand = brand if line[2]: date_tmp = datetime.date( datetime.strptime(line[2], '%Y-%m-%d')) if date_tmp: gift.receipt_date = date_tmp else: gift.receipt_date = None gift.put()
def import_data(in_file='quick_export.csv'): # reader = csv.reader(open(os.path.join(DEFAULT_PATH, in_file))) reader = csv.reader(open(in_file)) for i, line in enumerate(reader): if not i: continue uid = line[1] category = line[5].decode('utf-8') subcategory = line[6].decode('utf-8') if category: category_obj = Category.all().filter('name =', category) if category_obj.count(): category_obj = category_obj[0] else: category_obj = Category(name=category) category_obj.put() else: category_obj = None if category and subcategory: group_obj = Group.all().filter('name =', subcategory).filter('category =', category_obj) if group_obj.count(): group_obj = group_obj[0] else: group_obj = Group(name=subcategory, category=category_obj) group_obj.put() else: group_obj = None gift = Gift.all().filter('uid =', uid) if gift.count(): gift = gift[0] gift.category = category_obj gift.group = group_obj gift.put() print 'Gift %s updated' % uid else: print 'Gift %s not found' % uid
def index(request): gifts_list = Gift.all().order('-rating') gifts_list = filter_leftovers(gifts_list) paginator = Paginator(gifts_list, 24) banners = MainPageBanner.all() try: page = int(request.args.get('page', 1)) except ValueError: page = 1 try: gifts = paginator.page(page) except (EmptyPage, InvalidPage): gifts = paginator.page(paginator.num_pages()) categories = get_cat_subcat() return render_to_response('index_page/main_page.html', {'gifts': gifts, 'banners': banners, 'categories': categories[0], 'subcategories': categories[1], 'subcategories_keys': categories[2], 'price_modif': GlobalPriceModif.get_price_modif()})
def preview2(request, key_id): newsletter = Newsletter2.get_by_id(key_id) gifts = [] if newsletter.gifts: gifts_split = newsletter.gifts.split(",") for gift in gifts_split: try: gift = gift.strip() obj = Gift.all().filter("uid =", gift).get() if obj: gifts.append(obj) except Exception: pass managers = [] for mgr_id in newsletter.managers: mgr = Manager.get_by_id(mgr_id) if mgr: managers.append(mgr) emails = newsletter.emails files = [] for file_key in newsletter.n_price_list: file_ = File.get(file_key) if file_: files.append(file_) return render_to_response( "postman/admin/newsletters2/preview.html", { "newsletter": newsletter, "gifts": gifts, "key_id": key_id, "files": files, "managers": managers, "emails": emails, }, )
def sync_gift(request): del_gifts = 0 for gift in Gift.all().filter('to_sync =', True): if not gift.id_1c: continue del_gifts += 1 def txn(): task_id = str(uuid.uuid4()) memcache.add(task_id, gift.id_1c, TASK_LIVE_TIMEOUT) taskqueue.add( url=url_for( 'api/internal_delete_gifts_json_1c', task_id=task_id ), transactional=True) db.run_in_transaction(txn) ids_3dhero = [] try: result = urlfetch.fetch('http://www.3dhero.ru/api/v2/to_sync.json') if result.status_code == 200: response_json = simplejson.loads(result.content) if response_json['success']: ids_3dhero = response_json['result'] for id in ids_3dhero: def txn_sync(): task_id = str(uuid.uuid4()) memcache.add(task_id, id, TASK_LIVE_TIMEOUT) taskqueue.add( url=url_for('sync/sync_gift_task', task_id=task_id), transactional=True ) db.run_in_transaction(txn_sync) except: pass return render_to_response('sync/admin/sync_gift.html', { 'ids_3dhero': ids_3dhero, 'del_gifts':del_gifts })
def sync_new(request): gifts = Gift.all() gifts_uids = [gift.uid_5studio for gift in gifts] result = urlfetch.fetch('http://www.5studio.ru/api/v1/get/list/on_sale.json') if result.status_code == 200: j = simplejson.loads(result.content) if type(j) == list: for local_uid in gifts_uids: if local_uid not in j: def del_txn(): taskqueue.add( url=url_for('sync/delete_gift_task', uid=local_uid), transactional=True ) db.run_in_transaction(del_txn) for remote_uid in j: if remote_uid not in gifts_uids: def txn(): taskqueue.add(url=url_for('sync/sync_new_task', uid=remote_uid), transactional=True) db.run_in_transaction(txn) return render_to_response('sync/sync_gift.html')
def clean_db(file_path): from apps.gift.models import Gift csv_file = open_csv(file_path) i = 0 uids = list() for line in csv_file: if not i: # skip first line (header) i = 1 continue catalogue_uid = unicode.strip(line[3].decode('utf8')) if not catalogue_uid: continue uids.append(catalogue_uid) for i, gift in enumerate(Gift.all()): if gift.catalogue_id not in uids: print "%s. Deleted %s" % (i, gift.catalogue_id) gift.delete() else: print "%s. Skiped %s" % (i, gift.catalogue_id)
def sm_get_all_data(request): all_data = memcache.get('api_simple_get_all_data') if not all_data: all_data = [] for gift in Gift.all().filter('in_trash =', False): tmp = {'uid': gift.uid} if gift.name: tmp['name'] = gift.name.replace('"', '\\"') if gift.name_origin: tmp['name_origin'] = gift.name_origin.replace('"', '\\"') if gift.brand: tmp['brand'] = gift.brand tmp['main_thumb_url'] = get_main_thumb_url(gift) if gift.description: tmp['description'] =\ clear_data(gift.description).replace('"', '\\"') tmp['price'] = gift.price tmp['receipt_date'] = gift.receipt_date if not tmp['receipt_date']: tmp['receipt_date'] = '' tmp['box_size'] = gift.box_size tmp['box_volume'] = gift.box_volume tmp['real_price'] = gift.real_price tmp['modif_time'] = gift.modif_time tmp['add_time'] = gift.add_time tmp['vat'] = gift.vat all_data.append(tmp) if gift.category: tmp['subcategory'] = gift.category.name if gift.group: tmp['group'] = gift.group.name memcache.set('api_simple_get_all_data', all_data, 7200) return render_to_response( 'api/simple/get_all_data.html', {'all_data': all_data})
def get_gift_by_5studio(request, uid): gift = Gift.all().filter('uid_5studio =', uid).fetch(1) if gift and len(gift): return redirect('/gift/g/%s/' % gift[0].key().id()) return redirect('/')
def update_gifts(task_id, create=False, except_fields=EXCEPT_FIELDS_UPDATE): set_obj = memcache.get(task_id) flag = False if set_obj: data = simplejson.loads(set_obj) memcache.delete(task_id) id_1c = data.get('id_1c', '') logging.info("API update 1c: %s" % id_1c) name = data.get('name', '') logging.info("API update name: %s" % name) if not id_1c and not name: if not create: return render_to_response('empty.html') if id_1c: gifts_obj = Gift.all().filter('id_1c =', id_1c) if not gifts_obj.count(): gifts_obj = Gift.all().filter('name =', name) else: gifts_obj = Gift.all().filter('name =', name) if gifts_obj.count() and create: return render_to_response('empty.html') gift = None if gifts_obj.count() and not create: gift = gifts_obj[0] if not gifts_obj.count() and create: gift = Gift(name=name) if gift is None: return render_to_response('empty.html') # update category and groups category = data.get('subcategory', '-') group = data.get('group', '-') try: a = gift.category.name b = gift.group.name except Exception: gift.category = gift.group = None if category != '-' and group != '-': if not category or not group: if gift.category or gift.group: gift.category = None gift.group = None flag = True else: category_obj = Category.all().filter('name =', category) if category_obj.count(): category_obj = category_obj[0] else: category_obj = Category(name=category) category_obj.put() if not gift.category or gift.category != category_obj: gift.category = category_obj flag = True group_obj = Group.all().filter( 'category =', category_obj).filter('name =', group) if group_obj.count(): group_obj = group_obj[0] else: group_obj = Group(name=group, category=category_obj) group_obj.put() if not gift.group or gift.group != group_obj: gift.group = group_obj flag = True # and other fields for key in data.keys(): if key in except_fields: continue value = data.get(key, None) if value is None: continue if key == 'receipt_date': try: new_date = datetime.date( datetime.strptime(value, '%Y-%m-%d')) if new_date == gift.receipt_date: continue gift.receipt_date = new_date flag = True except ValueError: if gift.receipt_date is not None: gift.receipt_date = None flag = True continue try: old_val = getattr(gift, key) if old_val == value: continue setattr(gift, key, value) flag = True except AttributeError: pass if flag: gift.put() gift_views.get_gift(gift.uid, True) return render_to_response('empty.html')
def delete_gift_task(request, uid): gift = Gift.all().filter('uid_5studio =', uid).fetch(1) if gift: gift[0].delete() return render_to_response('empty.html')