Esempio n. 1
0
File: views.py Progetto: gmist/f-toy
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})
Esempio n. 2
0
def sync_gift_task(request, task_id):
    gift_id = memcache.get(task_id)
    memcache.delete(task_id)
    if gift_id:
        try:
            result = urlfetch.fetch(
                'http://www.3dhero.ru/api/v2/product.json?id=%s' % gift_id
            )
            if result.status_code == 200:
                result = simplejson.loads(result.content)
                if result['success']:
                    model = result['result']
                    if model['id_1c']:
                        category = Category.all().filter('name =', u'Развивающие Игры').get()
                        if category:
                            group = Group.all().filter('category =', category).filter('name =', u'Фигурки Героев').get()
                        else:
                            group = None
                        gift = Gift(
                                name = model.get('name', ''),
                                id_1c = model['id_1c'],
                                catalogue_id = model.get('catalogue_id', ''),
                                barcode = model.get('barcode', ''),
                                brand = model.get('brand', ''),
                                country = model.get('country', ''),
                                material = model.get('material', ''),
                                gift_size = model.get('size', ''),
                                weight = model.get('weight',''),
                                box_size = model.get('box_size', ''),
                                master_box = model.get('box_amount', ''),
                                real_price = model.get('price_trade', 0.0),
                                price = model.get('price_retail', 0.0),
                                leftovers = model.get('leftovers', 0),
                                remote_leftovers = model.get('leftovers_on_way', 0),
                                to_sync = True
                            )
                        if category and group:
                            gift.category = category
                            gift.group = group
                        gift.put()
                        images = model.get('images', [])
                        if images:
                            for img in images:
                                def txn():
                                    task_id = str(uuid.uuid4())
                                    data = {'gift_id': gift.key().id(), 'img_url': img}
                                    memcache.add(task_id, data, TASK_LIVE_TIMEOUT)
                                    taskqueue.add(
                                        url=url_for('sync/add_image_task', task_id=task_id),
                                        transactional=True
                                    )
                                db.run_in_transaction(txn)
        except:
            pass
    return render_to_response('empty.html')
Esempio n. 3
0
def update_process(file):
    from apps.gift.models import Gift

    csv_file = open_csv(file)
    i = 0
    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

        status = unicode.strip(line[0].decode('utf-8'))
        if status:
            status = int(status)
        else:
            status = None
        if status is None or status > 70:
            gift = get_gift_by_catalogue_uid(catalogue_uid)
            if gift:
                gift.delete()
            continue

        barcode = unicode.strip(line[5].decode('utf8'))
        name_origin = unicode.strip(line[6].decode('utf8'))
        name = unicode.strip(line[7].decode('utf8'))
        subcategory = unicode.strip(line[8].decode('utf8'))
        group = unicode.strip(line[9].decode('utf8'))
        category = unicode.strip(line[10].decode('utf8'))
        receipt_date = unicode.strip(line[14].decode('utf8'))
        try:
            if receipt_date:
                receipt_date = datetime.date(
                    datetime.strptime(receipt_date, '%m/%d/%Y'))
        except:
            receipt_date = None
        brand = unicode.strip(line[15].decode('utf8'))
        master_box = unicode.strip(line[16].decode('utf8'))
        rating = unicode.strip(line[17].decode('utf8'))
        if rating:
            rating = int(rating)
        else:
            rating = None
        box_size = unicode.strip(line[18].decode('utf8'))

        price = str.strip(line[21])
        if price:
            price = price.replace(' ', '').replace(',', '').replace('.', ' ')
            price = float(price)
        else:
            price = 0.0

        real_price = str.strip(line[25])
        if real_price:
            real_price = real_price.replace(' ', '').\
            replace(',', '').replace('.', ' ')
            real_price = float(real_price)
        else:
            real_price = 0.0

        gift = get_gift_by_catalogue_uid(catalogue_uid)
        if not gift:
            print 'Gift not found by catalogue uid ( %s ). \
            Create it!' % catalogue_uid
            gift = Gift()
            gift.put()

        update_data(
            obj_key=gift.key(),
            status=status,
            catalogue_uid=catalogue_uid,
            name=name,
            name_origin=name_origin,
            brand=brand,
            category=category,
            subcategory=subcategory,
            group=group,
            price=price,
            barcode=barcode,
            box_size=box_size,
            master_box=master_box,
            rating=rating,
            receipt_date=receipt_date,
            real_price=real_price)
        print '%s. %s, %s, %s'\
        % (i, catalogue_uid.encode('utf8'), name.encode('utf8'), price)

        i += 1
Esempio n. 4
0
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')
Esempio n. 5
0
def import_data(in_file='quick_export.csv'):
    images_path = os.path.join(DEFAULT_PATH, 'images')
    reader = csv.reader(open(os.path.join(DEFAULT_PATH, in_file)))
    for i, line in enumerate(reader):
        if not i:
            continue
        uid = line[0]
        gift_imgs_path = os.path.join(images_path, uid)
        try:
            imgs_files = os.listdir(gift_imgs_path)
        except OSError:
            imgs_files = []
        name = line[2].decode('utf-8')
        category = line[3].decode('utf-8')
        subcategory = line[4].decode('utf-8')
        brand = line[5].decode('utf-8')

        if line[6]:
            price = float(line[6])
        else:
            price = 0.0

        size = line[9].decode('utf-8')
        if not size:
            size = u''
        desc = line[10].decode('utf-8')

        if line[11]:
            rating = float(line[11])
        else:
            rating = 3.0
            
        if imgs_files:
            imgs_files =\
            [open(os.path.join(gift_imgs_path, img), 'rb').read() \
             for img in imgs_files]

        if brand:
            brand_obj = Brand.all().filter('brand =', brand)
            if not brand_obj.count():
                brand_obj = Brand(brand=brand)
                brand_obj.put()
            else:
                brand_obj = brand_obj[0]
        else:
            brand_obj = None

        if category:
            category_obj = Category.all().filter('category =', category)
            if category_obj.count():
                category_obj = category_obj[0]
            else:
                category_obj = Category(category=category)
                category_obj.put()
        else:
            category_obj = None

        if category and subcategory:
            subcategory_obj = Subcategory.all().filter('subcategory =', subcategory).filter('on_category =', category_obj)
            if subcategory_obj.count():
                subcategory_obj = subcategory_obj[0]
            else:
                subcategory_obj = Subcategory(subcategory=subcategory, on_category=category_obj)
                subcategory_obj.put()
        else:
            subcategory_obj = None

        gift = Gift(name=name,
                    uid_5studio=uid,
                    brand=brand_obj,
                    category=category_obj,
                    subcategory=subcategory_obj,
                    description=desc,
                    rating=rating,
                    price=price,
                    size=size)
        gift.put()

        if gift.name:
            title = gift.name.replace('"', '"')
        else:
            title = ''
        content_type = 'image/jpeg'
        for thumb in imgs_files:
            thumb_img = ThumbImage()
            thumb_img.add_new_thumb(blob_img=thumb, thumb_size=(700, 700, ),
                                    title=title, content_type=content_type, is_using_pil=True)
            thumb_img.add_new_thumb(blob_img=thumb, thumb_size=(400, 400, ),
                                    title=title, content_type=content_type, is_using_pil=True)
            thumb_img.add_new_thumb(blob_img=thumb, thumb_size=(200, 200, ),
                                    title=title, content_type=content_type, is_using_pil=True)
            thumb_img.add_new_thumb(blob_img=thumb, thumb_size=(100, 100, ),
                                    title=title, content_type=content_type, is_using_pil=True)
            if not gift.thumbs.count():
                thumb_img.main_gift = gift
            thumb_img.gift = gift
            thumb_img.put()