예제 #1
0
    cubes = CubesProductCard.objects.all()

    context = {
        'date': now().strftime('%Y-%m-%d %H:%M'),
        'cubes': cubes,
    }

    xml_raw = render_to_string(template_name="myWarehouse/yml.xml",
                               context=context)
    with open(MYWAREHOUSE_YML_FILE, "w") as fp:
        fp.write(xml_raw)


app.add_periodic_task(
    crontab(minute=7, hour='*/2'),
    generate_mywarehouse_yml_file.s(),
    name='generate_mywarehouse_yml_file',
)


@beat_init.connect
def configure_workers(**kwargs):
    import os.path
    if not os.path.isfile(MYWAREHOUSE_YML_FILE):
        generate_mywarehouse_yml_file.delay()


@app.task
def sync_mywarehouse():
    vendor_codes_in_stock = set()
    with requests.Session() as session:
예제 #2
0
from config.celery import app
from celery.schedules import crontab

from .test_task import test_task, periodic_task
from .sync_sdek import sync_sdek, sync_sdek_points
from .sync_pick_point import sync_pick_point

app.add_periodic_task(
    crontab(minute="0", hour="0", day_of_week="1"),
    sync_sdek.s(),
    name='sync_sdek',
)

app.add_periodic_task(
    crontab(minute="0", hour="0", day_of_week="2"),
    sync_pick_point.s(),
    name='sync_pick_point',
)

app.add_periodic_task(
    crontab(minute="0", hour="0", day_of_week="3"),
    sync_sdek_points.s(),
    name='sync_sdek_points',
)
예제 #3
0
        'club_prices':
        lambda instance: club_prices(groups=groups, instance=instance)
    }

    xml_raw = render_to_string(template_name="api/retail-rocket.xml",
                               context=context)

    with open(FILEPATH, "w") as fp:
        fp.write(xml_raw)


@app.task
def update_images():
    for instance in Product.objects.all():

        try:
            image = instance.image.url
            thumb = instance.thumbnail.url
        except OSError:
            instance.image = instance.image.field.default
            instance.save()
            instance.image.close()
            instance.thumbnail.close()


app.add_periodic_task(
    crontab(minute="01", hour='05'),
    generate_yml_file.s(),
    name='generate_yml_file',
)
예제 #4
0
        'products': products,
        'get_yml_node': get_yml_node,
        'base_url': 'https://presidentwatches.ru'
    }

    xml_raw = render_to_string(
        template_name="api/yml.xml",
        context=context
    )

    with open(YML_FILEPATH, "w") as fp:
        fp.write(xml_raw)

    time.sleep(delay)
    os.rename(YML_FILEPATH, YML_FILEPATH_ORIGIN)



app.add_periodic_task(
    crontab(minute="*/30"),
    generate_yml_file.s(),
    name='generate_yml_file',
)


@beat_init.connect
def configure_workers(**kwargs):
    import os.path
    if not os.path.isfile(YML_FILEPATH):
        generate_yml_file.delay()
예제 #5
0

@app.task
def sync_assist_order(order_id):
    response = requests.post(API_URL,
                             data={
                                 "Merchant_ID": MERCHANT_ID,
                                 "Login": MERCHANT_LOGIN,
                                 "Password": MERCHANT_PASSWORD,
                                 "Format": XML_FORMAT,
                                 "Ordernumber": str(order_id)
                             })
    result = ET.ElementTree(ET.fromstring(response.text))
    is_approved = any(
        (os.text == "Approved" for os in result.findall("order/orderstate")))
    if is_approved:
        Order2.objects.filter(id=order_id).update(assist_status="approved")


@app.task
def sync_assist():
    for order in Order2.objects.filter(assist_status="in_process"):
        sync_assist_order.delay(order.id)


app.add_periodic_task(
    crontab(minute='*/15'),
    sync_assist.s(),
    name='sync_assist',
)
예제 #6
0
def sync_sdek_delivery_point():
    SdekDeliveryPointSynchronizer().sync()


@app.task
def sync_sdek_couriers_delivery():
    SdekCourierSynchronizer().sync()


@app.task
def sync_pickpoint_delivery():
    PickpointSynchronizer().sync()


@app.task
def sync_delivery():
    sync_sdek_delivery_point.delay()
    sync_sdek_couriers_delivery.delay()
    sync_pickpoint_delivery.delay()


app.add_periodic_task(
    crontab(
        minute=0,
        hour=0,
        day_of_week=2,
    ),
    sync_delivery.s(),
    name='sync_delivery',
)
예제 #7
0
            for row in rows:
                quantity = int(row['quantity'])
                if quantity <= 0:
                    continue
                upid = row.get('code', None)
                print(upid)
                if upid is not None:
                    try:
                        upid = int(upid)
                        models_in_store.add(upid)
                    except ValueError:
                        pass
            page_num += 1
            params['offset'] = page_num * limit
            time.sleep(
                0.25
            )  # Не более 5 запросов в секунду с одного адреса от одного пользователя

        Product.objects.update(is_in_store=False)
        qs = Product.objects.filter(id__in=models_in_store)
        print('###')
        print(qs.count())
        print('###')
        qs.update(is_in_store=True)


app.add_periodic_task(
    crontab(minute=0, hour='*/2'),
    sync_store.s(),
    name='sync_store',
)
예제 #8
0
def sync_delivery_statuses():
    data = sort_orders_by_service()
    sync_sdek_orders(data['sdek'])
    sync_pickpoint_orders(data['pickpoint'])
    sync_postal_orders(data['rupost'])


@app.task
def set_rupost_numbers(filename):
    df = pd.read_excel(filename)
    mapping = {}
    for index, row in df.iterrows():
        dispatch_number = row['Номер отправления']
        public_id       = row['Заказ']
        mapping[public_id] = dispatch_number
    
    pks = list(mapping.keys())
    qs = Order.objects.filter(public_id__in=pks)

    with transaction.atomic():
        for instance in qs:
            instance.tracking['type'] = 'rupost'
            instance.tracking['dispatch_number'] = dispatch_number
            instance.save()


app.add_periodic_task(
    crontab(minute="01", hour='08'),
    sync_delivery_statuses.s(),
    name='sync_delivery_statuses',
)