Compare commits
8 Commits
master
...
feature/te
| Author | SHA1 | Date |
|---|---|---|
|
|
da4c7fc3c1 | 8 years ago |
|
|
41de0175e9 | 8 years ago |
|
|
73d02e862a | 8 years ago |
|
|
c9892b454c | 8 years ago |
|
|
01ba718ad4 | 8 years ago |
|
|
62d749222e | 8 years ago |
|
|
1b70063ea6 | 8 years ago |
|
|
1ae3ac332d | 8 years ago |
66 changed files with 2363 additions and 1697 deletions
@ -0,0 +1,25 @@ |
||||
ADMIN = 1 |
||||
STUDENTS = 2 |
||||
TEACHERS = 3 |
||||
MANAGERS = 4 |
||||
FINANCE_MANAGERS = 5 |
||||
LEAD_MANAGERS = 6 |
||||
CURATORS = 7 |
||||
PARTNERS = 8 |
||||
SUPPORTS = 9 |
||||
FINANCE = 10 |
||||
PROJECT_MANAGERS = 11 |
||||
|
||||
STATUS_CHOICES = ( |
||||
(ADMIN, 'admin'), |
||||
(STUDENTS, 'students'), |
||||
(TEACHERS, 'teachers'), |
||||
(MANAGERS, 'managers'), |
||||
(FINANCE_MANAGERS, 'finance_managers'), |
||||
(LEAD_MANAGERS, 'lead_managers'), |
||||
(CURATORS, 'curators'), |
||||
(PARTNERS, 'partners'), |
||||
(SUPPORTS, 'supports'), |
||||
(FINANCE, 'finance'), |
||||
(PROJECT_MANAGERS, 'project_managers'), |
||||
) |
||||
@ -1,42 +0,0 @@ |
||||
import csv |
||||
import jwt |
||||
from django.conf import settings |
||||
from django.core.management.base import BaseCommand |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
help = 'Добавляет 1 или нескольких юзеров в указанные группы' |
||||
|
||||
def add_arguments(self, parser): |
||||
parser.add_argument( |
||||
'--from', |
||||
type=str, |
||||
dest='from', |
||||
help='Файл подгрузки данных' |
||||
) |
||||
parser.add_argument( |
||||
'--to', |
||||
type=str, |
||||
dest='to', |
||||
help='Файл выгрузки' |
||||
) |
||||
|
||||
def handle(self, *args, **options): |
||||
from_path = options['from'] |
||||
to_path = options['to'] |
||||
with open(from_path) as f: |
||||
with open(to_path, 'w') as out_f: |
||||
fw = csv.writer(out_f) |
||||
fr = csv.reader(f, delimiter=';') |
||||
for row in fr: |
||||
email = row[0] |
||||
course_token = row[1] |
||||
period = row[2] |
||||
payload = { |
||||
'period': period, |
||||
'course_token': course_token, |
||||
'email': email.lower(), |
||||
} |
||||
token = jwt.encode(payload, settings.COURSE_PROGRESS_SECRET_KEY, algorithm='HS256').decode("utf-8") |
||||
url = "https://go.skillbox.ru/api/v1/progress/progress_token/?token=%s" % str(token) |
||||
fw.writerow([email.lower(), url]) |
||||
@ -0,0 +1,56 @@ |
||||
import os |
||||
import shutil |
||||
|
||||
import pytest |
||||
|
||||
from tests.client import BetterAPIClient |
||||
|
||||
pytest_plugins = [ |
||||
'access.tests.fixtures', |
||||
] |
||||
|
||||
|
||||
def pytest_sessionfinish(session, exitstatus): |
||||
""" whole test run finishes. """ |
||||
print('pytest finish: cleanup') |
||||
if os.path.exists('media_qa'): |
||||
shutil.rmtree('media_qa') |
||||
|
||||
|
||||
@pytest.fixture |
||||
def api_client(): |
||||
"""Anonymous client for REST API.""" |
||||
client = BetterAPIClient() |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def admin_client(admin): |
||||
"""Authorized as admin(superuser) client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=admin) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def student_client(student): |
||||
"""Authorized as student client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=student) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def manager_client(manager): |
||||
"""Authorized as manager client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=manager) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def lead_manager_client(lead_manager): |
||||
"""Authorized as lead manager client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=lead_manager) |
||||
return client |
||||
@ -0,0 +1,122 @@ |
||||
import pytest |
||||
|
||||
from access.factories import UserFactory, AccountFactory |
||||
|
||||
from access import groups |
||||
|
||||
|
||||
@pytest.fixture |
||||
def admin(): |
||||
""" |
||||
Create user as staff with data: |
||||
email = 'admin@example.com' |
||||
password = 'test' |
||||
is_staff = True |
||||
is_active = True |
||||
""" |
||||
user = UserFactory( |
||||
email='admin@example.com', |
||||
is_staff=True, |
||||
is_active=True, |
||||
groups__name=(groups.ADMIN,) |
||||
) |
||||
AccountFactory(owner=user) |
||||
return user |
||||
|
||||
|
||||
@pytest.fixture |
||||
def student(): |
||||
""" |
||||
Create user as student with data: |
||||
email = 'student@example.com' |
||||
password = 'test' |
||||
is_active = True |
||||
in groups 'students' |
||||
""" |
||||
user = UserFactory.create( |
||||
email='student@example.com', |
||||
is_staff=False, |
||||
is_active=True, |
||||
groups__name=(groups.STUDENTS,) |
||||
) |
||||
|
||||
AccountFactory(owner=user) |
||||
return user |
||||
|
||||
|
||||
@pytest.fixture |
||||
def student_not_active(): |
||||
""" |
||||
Create user as student with data: |
||||
email = 'notactivestudent@example.com' |
||||
password = 'test' |
||||
is_active = False |
||||
in groups 'students' |
||||
""" |
||||
user = UserFactory.create( |
||||
email='notactivestudent@example.com', |
||||
is_staff=False, |
||||
is_active=False, |
||||
groups__name=(groups.STUDENTS,) |
||||
) |
||||
return user |
||||
|
||||
|
||||
@pytest.fixture |
||||
def manager(): |
||||
""" |
||||
Create user as manager with data: |
||||
email = 'manager@example.com' |
||||
password = 'test' |
||||
is_staff = True |
||||
is_active = True |
||||
in groups 'managers' |
||||
""" |
||||
user = UserFactory.create( |
||||
email='manager@example.com', |
||||
is_staff=True, |
||||
is_active=True, |
||||
groups=(groups.MANAGERS,) |
||||
) |
||||
AccountFactory(owner=user) |
||||
return user |
||||
|
||||
|
||||
@pytest.fixture |
||||
def lead_manager(): |
||||
""" |
||||
Create user as lead manager with data: |
||||
email = 'lead_manager@example.com' |
||||
password = 'test' |
||||
is_staff = True |
||||
is_active = True |
||||
in groups 'lead_managers' |
||||
""" |
||||
user = UserFactory.create( |
||||
email='lead_manager@example.com', |
||||
is_staff=True, |
||||
is_active=True, |
||||
groups=(groups.LEAD_MANAGERS,) |
||||
) |
||||
AccountFactory(owner=user) |
||||
return user |
||||
|
||||
|
||||
@pytest.fixture |
||||
def teacher(): |
||||
""" |
||||
Create user as teacher with data: |
||||
email = 'teacher@example.com' |
||||
password = 'test' |
||||
is_staff = True |
||||
is_active = True |
||||
in groups 'teachers' |
||||
""" |
||||
user = UserFactory.create( |
||||
email='teacher@example.com', |
||||
is_staff=True, |
||||
is_active=True, |
||||
groups=(groups.TEACHERS,) |
||||
) |
||||
AccountFactory(owner=user) |
||||
return user |
||||
@ -0,0 +1,120 @@ |
||||
import mock |
||||
import pytest |
||||
|
||||
from django.contrib.auth import get_user_model |
||||
from django.urls import reverse |
||||
|
||||
from rest_framework import status |
||||
from rest_framework.generics import get_object_or_404 |
||||
|
||||
from access.factories import USER_PASSWORD |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
@mock.patch('django.core.mail.EmailMessage.send') |
||||
def test_generate_password_by_manager(mocked_send_mail, manager_client, |
||||
student_client, student): |
||||
""" |
||||
Test generate new password from admin area by manager |
||||
""" |
||||
assert manager_client.get( |
||||
reverse('users:management-password'), |
||||
status=status.HTTP_405_METHOD_NOT_ALLOWED |
||||
) |
||||
assert student_client.get( |
||||
reverse('users:management-password'), |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
data = { |
||||
'email': student.email, |
||||
} |
||||
assert manager_client.post( |
||||
reverse('users:management-password'), |
||||
data=data, |
||||
status=status.HTTP_201_CREATED |
||||
) |
||||
test_user = get_object_or_404(get_user_model(), email=student.email) |
||||
assert not test_user.check_password('test') |
||||
assert mocked_send_mail.call_count == 1 |
||||
assert student_client.post( |
||||
reverse('users:management-password'), |
||||
data=data, |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
wrong_data = { |
||||
'email': 'no_user@example.com', |
||||
} |
||||
assert manager_client.post( |
||||
reverse('users:management-password'), |
||||
data=wrong_data, |
||||
status=status.HTTP_404_NOT_FOUND |
||||
) |
||||
wrong_email = { |
||||
'email': 'no_user@example', |
||||
} |
||||
assert manager_client.post( |
||||
reverse('users:management-password'), |
||||
data=wrong_email, |
||||
status=status.HTTP_404_NOT_FOUND |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_generate_password_by_manager_for_not_active_student(manager_client, student_not_active): |
||||
""" |
||||
Test generate new password from admin area by manager for not active student |
||||
""" |
||||
|
||||
data = { |
||||
'email': student_not_active.email, |
||||
} |
||||
assert manager_client.post( |
||||
reverse('users:management-password'), |
||||
data=data, |
||||
status=status.HTTP_201_CREATED |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
class TestLogin: |
||||
def test_login_user(self, api_client, student): |
||||
""" |
||||
Test login user |
||||
""" |
||||
data = { |
||||
'email': student.email, |
||||
'password': USER_PASSWORD |
||||
} |
||||
assert api_client.post( |
||||
reverse('users:login'), |
||||
data=data, |
||||
status=status.HTTP_200_OK |
||||
) |
||||
|
||||
def test_login_user_wrong_password(self, api_client, student): |
||||
""" |
||||
Test login user with wrong password |
||||
""" |
||||
data = { |
||||
'email': student.email, |
||||
'password': USER_PASSWORD + '1' |
||||
} |
||||
assert api_client.post( |
||||
reverse('users:login'), |
||||
data=data, |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
|
||||
def test_login_user_wrong_user(self, api_client, student): |
||||
""" |
||||
Test login user with wrong password |
||||
""" |
||||
data = { |
||||
'email': student.email + '1', |
||||
'password': USER_PASSWORD |
||||
} |
||||
assert api_client.post( |
||||
reverse('users:login'), |
||||
data=data, |
||||
status=status.HTTP_404_NOT_FOUND |
||||
) |
||||
@ -1,31 +0,0 @@ |
||||
from django.core.management.base import BaseCommand |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
help = 'Команда для тестов' |
||||
|
||||
def handle(self, *args, **options): |
||||
from xml.dom import minidom |
||||
|
||||
xx = """<?xml version="1.0" encoding="UTF-8"?> |
||||
<repeatCardPaymentResponse status="3" error="112" processedDT="2018-04-23T19:37:04.544+03:00" techMessage="Неверное значение параметра invoiceId" clientOrderId="unknown"/>""" |
||||
dom = minidom.parseString(xx) |
||||
dom.normalize() |
||||
node1 = dom.getElementsByTagName("repeatCardPaymentResponse")[0] |
||||
print(node1) |
||||
print(node1.getAttribute('error')) |
||||
print(node1.getAttribute('processedDT')) |
||||
print(node1.getAttribute('techMessage')) |
||||
|
||||
|
||||
|
||||
# def handle(self, *args, **options): |
||||
# from finance.loggers import FinanceLogger |
||||
# logger = FinanceLogger() |
||||
# try: |
||||
# 10 / 0 |
||||
# except Exception as exc: |
||||
# logger.exception('FinanceLogger test log record', extra={'asdf': 3246523}, |
||||
# invoice_id=42, some_param={'a': 1, 'b': 3, 'привет': 'медвед'} |
||||
# ) |
||||
# |
||||
@ -0,0 +1,5 @@ |
||||
DEBUG=False |
||||
SECRET_KEY='!eiquy7_+2#vn3z%zfp51$m-=tmvtcv*cj*@x$!v(_9btq0w=$' |
||||
DATABASE_URL='psql://team:nu5Xefise@127.0.0.1:5432/new_lms' |
||||
EMAIL_URL='smtp+tls://robo@skillbox.ru:nu5Xefise@smtp.gmail.com:587' |
||||
CACHE_URL=rediscache://127.0.0.1:6379/1?client_class=django_redis.client.DefaultClient |
||||
@ -1,5 +0,0 @@ |
||||
DEBUG=False |
||||
SECRET_KEY='....' |
||||
DATABASE_URL='psql://<name>:<password>@127.0.0.1:5432/<db_name>' |
||||
EMAIL_URL='smtp+tls://<name>:<password>@smtp.gmail.com:587' |
||||
CACHE_URL=rediscache://127.0.0.1:6379/<db>?client_class=django_redis.client.DefaultClient |
||||
@ -0,0 +1,62 @@ |
||||
import uuid |
||||
|
||||
import factory |
||||
import factory.fuzzy |
||||
|
||||
from functools import partial |
||||
|
||||
from access.factories import UserFactory |
||||
|
||||
from access import groups |
||||
|
||||
IMAGE_URL = 'https://dummyimage.com/240x240/000/fff.png' |
||||
BIG_IMAGE_URL = 'https://dummyimage.com/1200x800/000/fff.png' |
||||
BIG_MOBILE_IMAGE_URL = 'https://dummyimage.com/600x400/000/fff.png' |
||||
|
||||
Faker = partial(factory.Faker, locale='ru_RU') |
||||
|
||||
|
||||
class CourseFactory(factory.django.DjangoModelFactory): |
||||
class Meta: |
||||
model = 'courses.Course' |
||||
|
||||
token = factory.LazyFunction(uuid.uuid4) |
||||
slug = factory.LazyAttribute(lambda x: factory.Faker('sentence'). |
||||
generate({'nb_words': 3}).replace(' ', '-').replace('.', '')) |
||||
title = factory.LazyAttribute(lambda x: Faker('sentence').generate({'nb_words': 4})) |
||||
description = factory.LazyAttribute( |
||||
lambda x: '\n'.join(Faker('paragraphs').generate({'nb': 15})) |
||||
) |
||||
direction = factory.fuzzy.FuzzyChoice(range(1, 5)) |
||||
public = True |
||||
image = IMAGE_URL |
||||
big_image = BIG_IMAGE_URL |
||||
big_mobile_image = BIG_MOBILE_IMAGE_URL |
||||
|
||||
@factory.lazy_attribute |
||||
def teacher_tokens(self): |
||||
teacher = UserFactory(groups=(groups.TEACHERS,)) |
||||
return [teacher.out_key] |
||||
|
||||
|
||||
class TopicFactory(factory.django.DjangoModelFactory): |
||||
class Meta: |
||||
model = 'courses.Topic' |
||||
|
||||
course = factory.SubFactory(CourseFactory) |
||||
title = factory.LazyAttribute(lambda x: Faker('sentence').generate({'nb_words': 4})) |
||||
description = factory.LazyAttribute( |
||||
lambda x: '\n'.join(Faker('paragraphs').generate({'nb': 15})) |
||||
) |
||||
sort = 0 |
||||
|
||||
|
||||
class LessonFactory(factory.django.DjangoModelFactory): |
||||
class Meta: |
||||
model = 'courses.Lesson' |
||||
|
||||
token = factory.LazyFunction(uuid.uuid4) |
||||
key = factory.LazyFunction(uuid.uuid4) |
||||
topic = factory.SubFactory(TopicFactory) |
||||
title = factory.LazyAttribute(lambda x: Faker('sentence').generate({'nb_words': 4})) |
||||
sort = 0 |
||||
@ -1,23 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-23 17:43 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('courses', '0005_auto_20180222_1911'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RemoveField( |
||||
model_name='topic', |
||||
name='description', |
||||
), |
||||
migrations.RemoveField( |
||||
model_name='topic', |
||||
name='icon', |
||||
), |
||||
] |
||||
@ -0,0 +1,18 @@ |
||||
import pytest |
||||
|
||||
from courses.factories import CourseFactory, LessonFactory, TopicFactory |
||||
|
||||
|
||||
@pytest.fixture |
||||
def course(): |
||||
""" |
||||
Create course |
||||
""" |
||||
_course = CourseFactory() |
||||
topic = TopicFactory( |
||||
course=_course |
||||
) |
||||
LessonFactory( |
||||
topic=topic |
||||
) |
||||
return _course |
||||
@ -0,0 +1,72 @@ |
||||
import uuid |
||||
|
||||
import factory |
||||
import factory.fuzzy |
||||
|
||||
from functools import partial |
||||
|
||||
from django.utils import timezone |
||||
from yandex_money.models import Payment |
||||
|
||||
from courses.factories import CourseFactory, TopicFactory, LessonFactory |
||||
from access.factories import UserFactory |
||||
from finance.models import Invoice |
||||
|
||||
Faker = partial(factory.Faker, locale='ru_RU') |
||||
|
||||
|
||||
class BillFactory(factory.django.DjangoModelFactory): |
||||
class Meta: |
||||
model = 'finance.Bill' |
||||
|
||||
user = factory.SubFactory(UserFactory) |
||||
opener = factory.SubFactory(UserFactory) |
||||
description = Faker('text') |
||||
|
||||
@factory.lazy_attribute |
||||
def course_token(self): |
||||
course = CourseFactory() |
||||
topic = TopicFactory( |
||||
course=course |
||||
) |
||||
LessonFactory( |
||||
topic=topic |
||||
) |
||||
return course.token |
||||
|
||||
|
||||
class InvoiceFactory(factory.django.DjangoModelFactory): |
||||
class Meta: |
||||
model = 'finance.Invoice' |
||||
|
||||
status = factory.fuzzy.FuzzyChoice( |
||||
(choice[0] for choice in Invoice.BILL_STATUSES) |
||||
) |
||||
price = factory.fuzzy.FuzzyDecimal(1000) |
||||
real_price = factory.fuzzy.FuzzyDecimal(1000) |
||||
method = factory.fuzzy.FuzzyChoice( |
||||
(choice[0] for choice in Invoice.BILL_METHOD) |
||||
) |
||||
key = factory.Faker('pyint') |
||||
yandex_pay = factory.SubFactory('factories.finance.PaymentFactory') |
||||
comment = Faker('word') |
||||
bill = factory.SubFactory(BillFactory) |
||||
|
||||
|
||||
class PaymentFactory(factory.django.DjangoModelFactory): |
||||
class Meta: |
||||
model = 'yandex_money.Payment' |
||||
|
||||
user = factory.SubFactory(UserFactory) |
||||
pub_date = timezone.now() |
||||
order_amount = factory.fuzzy.FuzzyDecimal(1000) |
||||
payment_type = factory.fuzzy.FuzzyChoice( |
||||
(choice[0] for choice in Payment.PAYMENT_TYPE.CHOICES) |
||||
) |
||||
order_number = factory.LazyFunction(uuid.uuid4) |
||||
status = factory.fuzzy.FuzzyChoice( |
||||
(choice[0] for choice in Payment.STATUS.CHOICES) |
||||
) |
||||
invoice_id = factory.Faker('pyint') |
||||
shop_amount = factory.fuzzy.FuzzyDecimal(1000) |
||||
performed_datetime = timezone.now() |
||||
@ -1,56 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
import logging |
||||
|
||||
_logger = logging.getLogger('finance_data') |
||||
|
||||
|
||||
class FinanceLogger: |
||||
""" |
||||
Все kwargs попадют в %(finance_data)s и логируются |
||||
'format': '%(asctime)s - %(levelname)s - %(message)s - %(finance_data)s' |
||||
""" |
||||
|
||||
def __init__(self, prefix=None): |
||||
self.prefix = prefix |
||||
|
||||
def log(self, level, msg, *args, **kwargs): |
||||
_logger.log(level=level, msg=self._get_msg(msg), *args, **self._make_kwargs(kwargs)) |
||||
|
||||
def _get_msg(self, msg): |
||||
if self.prefix: |
||||
msg = '{}: {}'.format(self.prefix, msg) |
||||
return msg |
||||
|
||||
def _make_kwargs(self, kwargs): |
||||
new_kwargs = {} |
||||
for inspected_kwarg in ('exc_info', 'stack_info', 'extra'): |
||||
try: |
||||
new_kwargs[inspected_kwarg] = kwargs.pop(inspected_kwarg) |
||||
except KeyError: |
||||
pass |
||||
if 'extra' in new_kwargs: |
||||
new_kwargs['extra']['finance_data'] = kwargs |
||||
else: |
||||
new_kwargs['extra'] = dict(finance_data=kwargs) |
||||
return new_kwargs |
||||
|
||||
def debug(self, msg, *args, **kwargs): |
||||
self.log(level=logging.DEBUG, msg=msg, *args, **kwargs) |
||||
|
||||
def info(self, msg, *args, **kwargs): |
||||
self.log(level=logging.INFO, msg=msg, *args, **kwargs) |
||||
|
||||
def warning(self, msg, *args, **kwargs): |
||||
self.log(level=logging.WARNING, msg=msg, *args, **kwargs) |
||||
|
||||
# TODO отделить логирование ошибок в другой лог |
||||
def error(self, msg, *args, **kwargs): |
||||
self.log(level=logging.ERROR, msg=msg, *args, **kwargs) |
||||
|
||||
def critical(self, msg, *args, **kwargs): |
||||
self.log(level=logging.CRITICAL, msg=msg, *args, **kwargs) |
||||
|
||||
def exception(self, msg, *args, **kwargs): |
||||
kwargs['stack_info'] = True |
||||
_logger.exception(self._get_msg(msg), *args, **self._make_kwargs(kwargs)) |
||||
@ -1,14 +0,0 @@ |
||||
from django.core.management.base import BaseCommand |
||||
|
||||
from finance.loggers import FinanceLogger |
||||
from finance.tasks import periodic_billing |
||||
|
||||
finance_logger = FinanceLogger() # prefix='YandexMoney' |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
|
||||
def handle(self, *args, **options): |
||||
finance_logger.info("start console repeat payment command") |
||||
print('Started') |
||||
periodic_billing() |
||||
@ -1,22 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-23 17:43 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0003_auto_20180315_1358'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='bill', |
||||
name='date', |
||||
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='Дата выставления'), |
||||
preserve_default=False, |
||||
), |
||||
] |
||||
@ -1,35 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-29 13:46 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0004_bill_date'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='InstallmentPlan', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('date', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')), |
||||
('invoice_amount', models.IntegerField(verbose_name='Количество платежей')), |
||||
('price', models.IntegerField(verbose_name='Цена одного платежа')), |
||||
('bill', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='finance.Bill', verbose_name='Связный счёт')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Рассрочка', |
||||
'verbose_name_plural': 'Рассрочки', |
||||
}, |
||||
), |
||||
migrations.AlterField( |
||||
model_name='invoice', |
||||
name='date', |
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Дата создания'), |
||||
), |
||||
] |
||||
@ -1,37 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-30 11:21 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0005_auto_20180329_1346'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RemoveField( |
||||
model_name='installmentplan', |
||||
name='bill', |
||||
), |
||||
migrations.AddField( |
||||
model_name='invoice', |
||||
name='rebilling', |
||||
field=models.BooleanField(default=False, editable=False, verbose_name='Повторный платеж'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='invoice', |
||||
name='rebilling_on', |
||||
field=models.BooleanField(default=False, editable=False, verbose_name='Повторять платеж'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='invoice', |
||||
name='date', |
||||
field=models.DateTimeField(auto_now_add=True), |
||||
), |
||||
migrations.DeleteModel( |
||||
name='InstallmentPlan', |
||||
), |
||||
] |
||||
@ -1,23 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-30 14:52 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0006_auto_20180330_1121'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RemoveField( |
||||
model_name='invoice', |
||||
name='rebilling', |
||||
), |
||||
migrations.RemoveField( |
||||
model_name='invoice', |
||||
name='rebilling_on', |
||||
), |
||||
] |
||||
@ -1,28 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-30 14:52 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0007_auto_20180330_1452'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='InvoiceRebilling', |
||||
fields=[ |
||||
('invoice_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='finance.Invoice')), |
||||
('rebilling_on', models.BooleanField(default=False, editable=False, verbose_name='Повторять платеж')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Повторный платёж', |
||||
'verbose_name_plural': 'Повторные платежи', |
||||
}, |
||||
bases=('finance.invoice',), |
||||
), |
||||
] |
||||
@ -1,21 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-30 15:03 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0008_invoicerebilling'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='invoicerebilling', |
||||
name='pay_count', |
||||
field=models.SmallIntegerField(default=2, editable=False, verbose_name='Всего платежей'), |
||||
preserve_default=False, |
||||
), |
||||
] |
||||
@ -1,40 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-04-12 16:28 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0009_invoicerebilling_pay_count'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RemoveField( |
||||
model_name='invoicerebilling', |
||||
name='pay_count', |
||||
), |
||||
migrations.AddField( |
||||
model_name='bill', |
||||
name='freeze', |
||||
field=models.BooleanField(default=False, verbose_name='Отказ от платежей'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='invoice', |
||||
name='date_of_payment', |
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Дата фактической оплаты'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='invoice', |
||||
name='expected_date', |
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Ожидаемая дата платежа'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='invoice', |
||||
name='date', |
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Дата создания платежа'), |
||||
), |
||||
] |
||||
@ -1,81 +0,0 @@ |
||||
import logging |
||||
import os |
||||
|
||||
import requests |
||||
from django.conf import settings |
||||
from django.db import transaction |
||||
from django.utils import timezone |
||||
from yandex_money.models import Payment |
||||
|
||||
from finance.loggers import FinanceLogger |
||||
from finance.models import InvoiceRebilling, Invoice |
||||
from lms import celery_app |
||||
|
||||
finance_logger = FinanceLogger() |
||||
|
||||
|
||||
@celery_app.task |
||||
def periodic_billing(): |
||||
finance_logger.info("start periodic billing task") |
||||
# TODO заюзать Invoice.BILL_STATUSES |
||||
invoices = InvoiceRebilling.objects.filter(method='Y', status='W') |
||||
# TODO тут был exclude('F') то есть все неоплаченные... но это не верно! |
||||
for invoice in invoices.filter(expected_date__lt=timezone.now()): |
||||
# выбираем все необработанные из прошлого |
||||
with transaction.atomic(): |
||||
try: |
||||
_yandex_repeat_card_payment(invoice) |
||||
except Exception as exc: |
||||
finance_logger.exception('Yandex Money repeatCardPayment Exception', invoice_id=invoice.id) |
||||
invoice.comment += 'Yandex Money: Ошибка при попытке повторного платежа, свяжитесь с клиентской службой' |
||||
invoice.save() |
||||
|
||||
|
||||
def _yandex_repeat_card_payment(invoice): |
||||
user = invoice.bill.user |
||||
yandex_pay = Payment.objects.create( |
||||
order_amount=invoice.price, |
||||
customer_number=user.id, |
||||
user=user, |
||||
cps_email=user.email, |
||||
shop_id=settings.YANDEX_MONEY_REBILLING_SHOP_ID, |
||||
scid=settings.YANDEX_MONEY_REBILLING_SCID |
||||
) |
||||
invoice.yandex_pay = yandex_pay |
||||
|
||||
finance_logger.info('YandexMoney repeatCardPayment start', invoice_id=invoice.id) |
||||
resp = requests.post( |
||||
url=settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment', |
||||
data={ |
||||
'clientOrderId': invoice.id, # уникальное возрастающее целое число |
||||
'invoiceId': invoice.key, |
||||
'amount': invoice.price, |
||||
'orderNumber': invoice.yandex_pay.order_number |
||||
}, |
||||
cert=( |
||||
os.path.join(settings.SSL_ROOT, 'skillbox.cer'), |
||||
os.path.join(settings.SSL_ROOT, 'skillbox.key') |
||||
), |
||||
verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer') |
||||
) |
||||
resp_text = resp.text |
||||
finance_logger.info('YandexMoney repeatCardPayment response', |
||||
invoice_id=invoice.id, response=resp_text, code=resp.status_code, ) |
||||
try: |
||||
_check_yandex_response_status(invoice, resp_text) |
||||
except Exception as exc: |
||||
finance_logger.exception("Can't parse yandex response", invoice_id=invoice.id, response=resp_text) |
||||
|
||||
|
||||
def _check_yandex_response_status(invoice, resp_text): |
||||
from xml.dom import minidom |
||||
dom = minidom.parseString(resp_text) |
||||
dom.normalize() |
||||
resp_node = dom.getElementsByTagName("repeatCardPaymentResponse")[0] |
||||
status = resp_node.getAttribute('status') |
||||
if status != '0': |
||||
error = resp_node.getAttribute('error') |
||||
processed_dt = resp_node.getAttribute('processedDT') |
||||
tech_message = resp_node.getAttribute('techMessage') |
||||
invoice.status = Invoice.BILL_STATUSES[-1][0] |
||||
invoice.comment += 'Yandex Money: ошибка № {}, сообщение {} от {}'.format(error, tech_message, processed_dt) |
||||
@ -0,0 +1,58 @@ |
||||
import os |
||||
import shutil |
||||
|
||||
import pytest |
||||
|
||||
from tests.client import BetterAPIClient |
||||
|
||||
pytest_plugins = [ |
||||
'access.tests.fixtures', |
||||
'finance.tests.fixtures', |
||||
'courses.tests.fixtures' |
||||
] |
||||
|
||||
|
||||
def pytest_sessionfinish(session, exitstatus): |
||||
""" whole test run finishes. """ |
||||
print('pytest finish: cleanup') |
||||
if os.path.exists('media_qa'): |
||||
shutil.rmtree('media_qa') |
||||
|
||||
|
||||
@pytest.fixture |
||||
def api_client(): |
||||
"""Anonymous client for REST API.""" |
||||
client = BetterAPIClient() |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def admin_client(admin): |
||||
"""Authorized as admin(superuser) client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=admin) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def student_client(student): |
||||
"""Authorized as student client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=student) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def manager_client(manager): |
||||
"""Authorized as manager client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=manager) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def lead_manager_client(lead_manager): |
||||
"""Authorized as lead manager client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=lead_manager) |
||||
return client |
||||
@ -0,0 +1,53 @@ |
||||
import pytest |
||||
from yandex_money.models import Payment |
||||
|
||||
from finance.factories import BillFactory, InvoiceFactory, PaymentFactory |
||||
|
||||
PRICE = 1000.00 |
||||
METHOD_CASH = 'C' |
||||
METHOD_YANDEX = 'Y' |
||||
STATUS_WAIT = 'W' |
||||
STATUS_ON_PAYMENT = 'P' |
||||
STATUS_PAID = 'F' |
||||
|
||||
|
||||
@pytest.fixture |
||||
def bill_cash(student, manager): |
||||
""" |
||||
Create bill for the student |
||||
""" |
||||
_bill = BillFactory( |
||||
user=student, |
||||
opener=manager, |
||||
) |
||||
InvoiceFactory( |
||||
status=STATUS_ON_PAYMENT, |
||||
method=METHOD_CASH, |
||||
yandex_pay=None, |
||||
bill=_bill |
||||
) |
||||
return _bill |
||||
|
||||
|
||||
@pytest.fixture |
||||
def bill_yandex(student, manager): |
||||
""" |
||||
Create bill for the student |
||||
""" |
||||
_bill = BillFactory( |
||||
user=student, |
||||
opener=manager, |
||||
) |
||||
# credit cart |
||||
payment = PaymentFactory( |
||||
user=student, |
||||
payment_type=Payment.PAYMENT_TYPE.AC, |
||||
status=Payment.STATUS.PROCESSED |
||||
) |
||||
InvoiceFactory( |
||||
status=STATUS_ON_PAYMENT, |
||||
method=METHOD_YANDEX, |
||||
yandex_pay=payment, |
||||
bill=_bill |
||||
) |
||||
return _bill |
||||
@ -0,0 +1,198 @@ |
||||
import json |
||||
|
||||
import mock |
||||
import pytest |
||||
|
||||
from django.urls import reverse |
||||
|
||||
from rest_framework import status |
||||
from rest_framework.response import Response |
||||
from yandex_money.models import Payment |
||||
|
||||
from finance import models |
||||
from progress.models import Progress, ProgressLesson |
||||
|
||||
from finance.tests.fixtures import PRICE, METHOD_CASH, STATUS_WAIT, STATUS_PAID |
||||
|
||||
DUMMY_COMMENT = 'test comment' |
||||
DUMMY_DESCRIPTION = 'test description' |
||||
|
||||
mock.patch('lms.global_decorators.transaction_decorator', lambda x: x).start() |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_list_bills(api_client, student_client, student, manager, admin_client, |
||||
manager_client, lead_manager_client, bill_cash): |
||||
""" |
||||
Test for get list of bills |
||||
""" |
||||
assert api_client.get( |
||||
reverse('finance:bills'), |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
response = student_client.get( |
||||
reverse('finance:bills'), |
||||
status=status.HTTP_200_OK |
||||
) |
||||
results_student = json.loads(response.content) |
||||
assert len(results_student) is 1 |
||||
assert results_student[0]['opener'] == manager.email |
||||
assert results_student[0]['user'] == student.email |
||||
response_admin = admin_client.get( |
||||
reverse('finance:bills'), |
||||
status=status.HTTP_200_OK |
||||
) |
||||
results_admin = json.loads(response_admin.content) |
||||
assert len(results_admin) is 0 |
||||
response_manager = manager_client.get( |
||||
reverse('finance:bills'), |
||||
status=status.HTTP_200_OK |
||||
) |
||||
results_manager = json.loads(response_manager.content) |
||||
assert results_manager[0]['opener'] == manager.email |
||||
assert results_manager[0]['user'] == student.email |
||||
response_lead_manager = lead_manager_client.get( |
||||
reverse('finance:bills'), |
||||
status=status.HTTP_200_OK |
||||
) |
||||
results_lead_manager = json.loads(response_lead_manager.content) |
||||
assert len(results_lead_manager) is 0 |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_create_bill(api_client, student_client, manager_client, |
||||
manager, student, course): |
||||
""" |
||||
Test create bill |
||||
""" |
||||
data = { |
||||
'bill': { |
||||
'course_token': course.token.hex, |
||||
'opener': manager.email, |
||||
'user': student.email, |
||||
'comment': DUMMY_COMMENT, |
||||
'description': DUMMY_DESCRIPTION |
||||
}, |
||||
'children': [{ |
||||
'status': STATUS_WAIT, |
||||
'method': METHOD_CASH, |
||||
'price': PRICE, |
||||
'real_price': PRICE, |
||||
}] |
||||
} |
||||
response = manager_client.post( |
||||
reverse('finance:bills'), |
||||
data=data, |
||||
status=status.HTTP_200_OK |
||||
) |
||||
results = json.loads(response.content) |
||||
assert models.Bill.objects.get(user=student).id == results['bill']['id'] |
||||
assert models.Invoice.objects.get( |
||||
bill=results['bill']['id']).id == results['children'][0]['id'] |
||||
assert api_client.post( |
||||
reverse('finance:bills'), |
||||
data=data, |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
assert student_client.post( |
||||
reverse('finance:bills'), |
||||
data=data, |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
@mock.patch('django.core.mail.EmailMessage.send') |
||||
def test_confirm_pay_manager(mocked_email, manager_client, bill_cash, student): |
||||
assert Progress.objects.count() is 0 |
||||
assert ProgressLesson.objects.count() is 0 |
||||
data = { |
||||
'bill': { |
||||
'course_token': bill_cash.course_token.hex, |
||||
'opener': bill_cash.opener.email, |
||||
'user': bill_cash.user.email, |
||||
'comment': bill_cash.comment, |
||||
'description': bill_cash.description |
||||
}, |
||||
'children': [{ |
||||
'status': STATUS_PAID, |
||||
'method': METHOD_CASH, |
||||
'price': PRICE, |
||||
'real_price': PRICE, |
||||
}] |
||||
} |
||||
response = manager_client.post( |
||||
reverse('finance:bills'), |
||||
data=data, |
||||
status=status.HTTP_200_OK |
||||
) |
||||
results = json.loads(response.content) |
||||
assert models.Bill.objects.get(user=student).id == results['bill']['id'] |
||||
assert Progress.objects.count() is 1 |
||||
assert ProgressLesson.objects.count() is 1 |
||||
progress = Progress.objects.filter(user=bill_cash.user).first() |
||||
assert Progress.objects.filter(user=bill_cash.user).exists() is True |
||||
assert ProgressLesson.objects.filter(progress=progress).exists() is True |
||||
assert mocked_email.call_count == 2 |
||||
|
||||
|
||||
def fake_post_success(view, request): |
||||
pay = Payment.objects.get(order_number=request.data['orderNumber']) |
||||
pay.status = Payment.STATUS.SUCCESS |
||||
pay.save() |
||||
return Response('ok', status=status.HTTP_200_OK) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
@mock.patch('django.core.mail.EmailMessage.send') |
||||
@mock.patch('finance.views.YandexCheckView.post', fake_post_success) |
||||
def test_confirm_pay_auto_success(mocked_email, api_client, bill_yandex, student): |
||||
assert Progress.objects.count() is 0 |
||||
assert ProgressLesson.objects.count() is 0 |
||||
invoice = bill_yandex.invoice_set.first() |
||||
payment = invoice.yandex_pay |
||||
data = { |
||||
'orderNumber': payment.order_number, |
||||
'shopSumAmount': str(payment.shop_amount) |
||||
} |
||||
api_client.post( |
||||
reverse('yandex_money_check'), |
||||
data=data, |
||||
status=status.HTTP_200_OK |
||||
) |
||||
assert Progress.objects.count() is 1 |
||||
assert ProgressLesson.objects.count() is 1 |
||||
progress = Progress.objects.filter(user=bill_yandex.user).first() |
||||
assert Progress.objects.filter(user=bill_yandex.user).exists() is True |
||||
assert ProgressLesson.objects.filter(progress=progress).exists() is True |
||||
assert mocked_email.call_count == 1 |
||||
|
||||
|
||||
def fake_post_fail(view, request): |
||||
pay = Payment.objects.get(order_number=request.data['orderNumber']) |
||||
pay.status = Payment.STATUS.FAIL |
||||
pay.save() |
||||
return Response('fail', status=status.HTTP_200_OK) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
@mock.patch('django.core.mail.EmailMessage.send') |
||||
@mock.patch('finance.views.YandexCheckView.post', fake_post_fail) |
||||
def test_confirm_pay_auto_fail(mocked_email, api_client, bill_yandex, student): |
||||
assert Progress.objects.count() is 0 |
||||
assert ProgressLesson.objects.count() is 0 |
||||
invoice = bill_yandex.invoice_set.first() |
||||
payment = invoice.yandex_pay |
||||
data = { |
||||
'orderNumber': payment.order_number, |
||||
'shopSumAmount': str(payment.shop_amount) |
||||
} |
||||
api_client.post( |
||||
reverse('yandex_money_check'), |
||||
data=data, |
||||
status=status.HTTP_200_OK |
||||
) |
||||
assert Progress.objects.count() is 0 |
||||
assert ProgressLesson.objects.count() is 0 |
||||
assert Progress.objects.filter(user=bill_yandex.user).exists() is False |
||||
assert mocked_email.call_count == 1 |
||||
@ -0,0 +1,21 @@ |
||||
import logging |
||||
from .settings import * # noqa |
||||
|
||||
DEBUG = True |
||||
EMAIL_DEBUG = True |
||||
TEMPLATES[0]['OPTIONS']['debug'] = DEBUG # noqa |
||||
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_qa') # noqa |
||||
|
||||
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
||||
PASSWORD_HASHERS = ('django.contrib.auth.hashers.MD5PasswordHasher', ) |
||||
|
||||
CELERY_TASK_ALWAYS_EAGER = True |
||||
|
||||
# Disable cache during testing |
||||
CACHE_DISABLED = True |
||||
|
||||
LOGGING = {} |
||||
LOCAL_APPS_LOGGERS = {} |
||||
# Disable all logging calls with levels less severe than or equal to CRITICAL |
||||
logging.disable(logging.CRITICAL) |
||||
@ -0,0 +1,520 @@ |
||||
[2017-10-20 13:12:58,041: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 13:12:58,049: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 13:12:59,065: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 13:12:59,110: WARNING/MainProcess] /home/andrey/skillbox/lib/python3.6/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! |
||||
warnings.warn('Using settings.DEBUG leads to a memory leak, never ' |
||||
[2017-10-20 13:12:59,113: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 13:13:02,946: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
[2017-10-20 13:17:23,104: INFO/MainProcess] Received task: lms.celery.debug_task[e7d9bdc2-a3a8-44b2-b3c6-935acfa092d7] |
||||
[2017-10-20 13:17:23,106: WARNING/ForkPoolWorker-2] Request: <Context: {'lang': 'py', 'task': 'lms.celery.debug_task', 'id': 'e7d9bdc2-a3a8-44b2-b3c6-935acfa092d7', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': 'e7d9bdc2-a3a8-44b2-b3c6-935acfa092d7', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': 'gen13641@andrey-desktop', 'reply_to': 'b8c6ce7f-8ee0-35c7-ad70-026ad2f36d4a', 'correlation_id': 'e7d9bdc2-a3a8-44b2-b3c6-935acfa092d7', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': False}, 'args': [], 'kwargs': {}, 'hostname': 'celery@andrey-desktop', 'is_eager': False, 'callbacks': None, 'errbacks': None, 'chain': None, 'chord': None, 'called_directly': False, '_protected': 1}> |
||||
[2017-10-20 13:17:23,124: INFO/ForkPoolWorker-2] Task lms.celery.debug_task[e7d9bdc2-a3a8-44b2-b3c6-935acfa092d7] succeeded in 0.018874458000027516s: None |
||||
[2017-10-20 13:17:29,057: INFO/MainProcess] Received task: lms.celery.debug_task[88f178fc-7222-4de0-b671-57e7472a9be1] |
||||
[2017-10-20 13:17:29,059: WARNING/ForkPoolWorker-1] Request: <Context: {'lang': 'py', 'task': 'lms.celery.debug_task', 'id': '88f178fc-7222-4de0-b671-57e7472a9be1', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': '88f178fc-7222-4de0-b671-57e7472a9be1', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': 'gen13641@andrey-desktop', 'reply_to': 'b8c6ce7f-8ee0-35c7-ad70-026ad2f36d4a', 'correlation_id': '88f178fc-7222-4de0-b671-57e7472a9be1', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': False}, 'args': [], 'kwargs': {}, 'hostname': 'celery@andrey-desktop', 'is_eager': False, 'callbacks': None, 'errbacks': None, 'chain': None, 'chord': None, 'called_directly': False, '_protected': 1}> |
||||
[2017-10-20 13:17:29,081: INFO/ForkPoolWorker-1] Task lms.celery.debug_task[88f178fc-7222-4de0-b671-57e7472a9be1] succeeded in 0.022606980999626103s: None |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 13:12:57 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f47cb927be0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 13:32:32,128: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 13:32:32,135: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 13:32:33,150: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 13:32:33,201: WARNING/MainProcess] /home/andrey/skillbox/lib/python3.6/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! |
||||
warnings.warn('Using settings.DEBUG leads to a memory leak, never ' |
||||
[2017-10-20 13:32:33,202: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 13:32:36,911: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 13:32:32 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f34afe2fbe0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 13:38:00,333: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 13:38:00,341: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 13:38:01,361: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 13:38:01,408: WARNING/MainProcess] /home/andrey/skillbox/lib/python3.6/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! |
||||
warnings.warn('Using settings.DEBUG leads to a memory leak, never ' |
||||
[2017-10-20 13:38:01,409: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 13:38:05,171: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 13:38:00 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7fd8781acbe0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 13:47:50,974: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 13:47:50,985: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 13:47:52,012: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 13:47:52,069: WARNING/MainProcess] /home/andrey/skillbox/lib/python3.6/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! |
||||
warnings.warn('Using settings.DEBUG leads to a memory leak, never ' |
||||
[2017-10-20 13:47:52,069: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 13:47:56,047: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 13:47:50 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7fc6511c1b70 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 14:42:47,658: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 14:42:47,664: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 14:42:48,682: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 14:42:48,727: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 14:42:52,394: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
[2017-10-20 14:47:53,063: INFO/MainProcess] Tasks flagged as revoked: ff8246ff-1904-47da-ac57-1a844272c826 |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 14:42:47 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f89a2228be0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 14:56:43,024: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 14:56:43,031: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 14:56:44,048: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 14:56:44,112: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 14:56:47,869: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 14:56:42 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f4f0c601be0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 15:14:13,071: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 15:14:13,086: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 15:14:14,109: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 15:14:14,123: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 15:14:18,076: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 15:14:12 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7fd94e575b70 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 15:18:26,330: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 15:18:26,337: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 15:18:27,355: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 15:18:27,417: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 15:18:31,190: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 15:18:26 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f4b2ac05be0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 15:31:17,246: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 15:31:17,253: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 15:31:18,269: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 15:31:18,311: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 15:31:22,075: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 15:31:17 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f2e6cc96be0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send_multiple |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-20 16:52:27,050: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-20 16:52:27,057: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-20 16:52:28,074: INFO/MainProcess] mingle: all alone |
||||
[2017-10-20 16:52:28,128: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-20 16:52:31,818: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
[2017-10-20 17:00:17,556: INFO/MainProcess] Received task: djcelery_email_send[8735440e-9760-43c7-b84c-c6efdac4e64d] |
||||
[2017-10-20 17:00:19,202: INFO/ForkPoolWorker-2] Task djcelery_email_send[8735440e-9760-43c7-b84c-c6efdac4e64d] succeeded in 1.4465199199985364s: 1 |
||||
[2017-10-20 17:39:12,619: INFO/MainProcess] Received task: djcelery_email_send[243eb7a2-b4e0-4221-8ab2-c83c94d8f241] |
||||
[2017-10-20 17:39:14,523: INFO/ForkPoolWorker-1] Task djcelery_email_send[243eb7a2-b4e0-4221-8ab2-c83c94d8f241] succeeded in 1.4357735300000058s: 1 |
||||
[2017-10-20 17:40:33,125: INFO/MainProcess] Received task: djcelery_email_send[863adc65-6bf5-4a1d-a2b9-91ebb9737520] |
||||
[2017-10-20 17:40:34,548: INFO/ForkPoolWorker-2] Task djcelery_email_send[863adc65-6bf5-4a1d-a2b9-91ebb9737520] succeeded in 1.3558088320023671s: 1 |
||||
[2017-10-20 17:42:16,950: INFO/MainProcess] Received task: djcelery_email_send[a60b5727-8d77-49f8-8008-82ae064ed682] |
||||
[2017-10-20 17:42:18,493: INFO/ForkPoolWorker-1] Task djcelery_email_send[a60b5727-8d77-49f8-8008-82ae064ed682] succeeded in 1.1552653329999885s: 1 |
||||
[2017-10-20 17:57:36,541: INFO/MainProcess] Received task: djcelery_email_send[8184ca5f-b2e2-42ee-a096-b3c2ecf152e2] |
||||
[2017-10-20 17:57:37,905: INFO/ForkPoolWorker-2] Task djcelery_email_send[8184ca5f-b2e2-42ee-a096-b3c2ecf152e2] succeeded in 1.251813505001337s: 1 |
||||
[2017-10-20 19:20:51,999: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 320, in start |
||||
blueprint.start(self) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start |
||||
step.start(parent) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 596, in start |
||||
c.loop(*c.loop_args()) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/loops.py", line 88, in asynloop |
||||
next(loop) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/async/hub.py", line 354, in create_loop |
||||
cb(*cbargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/transport/base.py", line 236, in on_readable |
||||
reader(loop) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/transport/base.py", line 218, in _read |
||||
drain_events(timeout=0) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 471, in drain_events |
||||
while not self.blocking_read(timeout): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 477, in blocking_read |
||||
return self.on_inbound_frame(frame) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/method_framing.py", line 55, in on_frame |
||||
callback(channel, method_sig, buf, None) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 481, in on_inbound_method |
||||
method_sig, payload, content, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/abstract_channel.py", line 128, in dispatch_method |
||||
listener(*args) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 603, in _on_close |
||||
(class_id, method_id), ConnectionError) |
||||
amqp.exceptions.ConnectionForced: (0, 0): (320) CONNECTION_FORCED - broker forced connection closure with reason 'shutdown' |
||||
[2017-10-20 19:20:52,012: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 2.00 seconds... |
||||
|
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-20 16:52:26 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7fe25f735be0 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send |
||||
. lms.celery.debug_task |
||||
|
||||
[2017-10-23 08:32:22,988: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-23 08:32:22,998: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-23 08:32:24,013: INFO/MainProcess] mingle: all alone |
||||
[2017-10-23 08:32:24,021: INFO/MainProcess] celery@andrey-desktop ready. |
||||
[2017-10-23 08:32:27,769: INFO/MainProcess] Events of group {task} enabled by remote. |
||||
[2017-10-23 11:42:09,222: INFO/MainProcess] Received task: djcelery_email_send[54f16e2a-a437-4000-850f-0bf29ff758b8] |
||||
[2017-10-23 11:42:10,844: INFO/ForkPoolWorker-2] Task djcelery_email_send[54f16e2a-a437-4000-850f-0bf29ff758b8] succeeded in 1.4740454479997425s: 1 |
||||
[2017-10-23 11:44:36,901: INFO/MainProcess] Received task: djcelery_email_send[2ef60ead-2523-4bf8-b117-366bb120359d] |
||||
[2017-10-23 11:44:39,194: INFO/ForkPoolWorker-1] Task djcelery_email_send[2ef60ead-2523-4bf8-b117-366bb120359d] succeeded in 1.4229817790001107s: 1 |
||||
[2017-10-23 11:45:49,202: INFO/MainProcess] Received task: djcelery_email_send[3e60e35a-c846-4f37-bd88-1d92afc9dcac] |
||||
[2017-10-23 11:45:50,624: INFO/ForkPoolWorker-2] Task djcelery_email_send[3e60e35a-c846-4f37-bd88-1d92afc9dcac] succeeded in 1.1725643370009493s: 1 |
||||
[2017-10-23 11:47:18,371: INFO/MainProcess] Received task: djcelery_email_send[4530e853-0db4-499d-8a65-7128121ee5bc] |
||||
[2017-10-23 11:47:20,136: INFO/ForkPoolWorker-1] Task djcelery_email_send[4530e853-0db4-499d-8a65-7128121ee5bc] succeeded in 1.3828427380012727s: 1 |
||||
[2017-10-23 11:56:05,834: INFO/MainProcess] Received task: djcelery_email_send[9fc201ce-f3ec-40af-9dd1-bf998f34a57d] |
||||
[2017-10-23 11:56:08,831: INFO/ForkPoolWorker-2] Task djcelery_email_send[9fc201ce-f3ec-40af-9dd1-bf998f34a57d] succeeded in 1.293271452001136s: 1 |
||||
[2017-10-23 11:59:57,509: INFO/MainProcess] Received task: djcelery_email_send[7945e9d6-ef7c-4e19-9c59-422100ac9f73] |
||||
[2017-10-23 11:59:58,959: INFO/ForkPoolWorker-1] Task djcelery_email_send[7945e9d6-ef7c-4e19-9c59-422100ac9f73] succeeded in 1.1895115009992878s: 1 |
||||
[2017-10-23 12:08:24,457: INFO/MainProcess] Received task: djcelery_email_send[f0968ae1-8fbd-4d2c-905a-2ecf445aa10e] |
||||
[2017-10-23 12:08:25,890: INFO/ForkPoolWorker-2] Task djcelery_email_send[f0968ae1-8fbd-4d2c-905a-2ecf445aa10e] succeeded in 1.3443215190000046s: 1 |
||||
[2017-10-23 12:20:29,414: INFO/MainProcess] Received task: djcelery_email_send[4438a0d4-228c-40a9-b91d-612f82ea791b] |
||||
[2017-10-23 12:20:31,027: INFO/ForkPoolWorker-1] Task djcelery_email_send[4438a0d4-228c-40a9-b91d-612f82ea791b] succeeded in 1.452125650999733s: 1 |
||||
[2017-10-23 12:21:31,101: INFO/MainProcess] Received task: djcelery_email_send[c3793dcb-e5f9-42bd-83b2-dd94f166c741] |
||||
[2017-10-23 12:21:32,804: INFO/ForkPoolWorker-2] Task djcelery_email_send[c3793dcb-e5f9-42bd-83b2-dd94f166c741] succeeded in 1.1413313480006764s: 1 |
||||
[2017-10-23 12:38:27,027: INFO/MainProcess] Received task: djcelery_email_send[ea55b25a-8e6d-4e88-8b18-52d561bd7c95] |
||||
[2017-10-23 12:38:28,225: INFO/ForkPoolWorker-1] Task djcelery_email_send[ea55b25a-8e6d-4e88-8b18-52d561bd7c95] succeeded in 1.150906519000273s: 1 |
||||
[2017-10-23 13:47:05,338: INFO/MainProcess] Received task: djcelery_email_send[b05bd9eb-848d-49b6-9725-d190e256527e] |
||||
[2017-10-23 13:47:08,582: INFO/ForkPoolWorker-2] Task djcelery_email_send[b05bd9eb-848d-49b6-9725-d190e256527e] succeeded in 1.5058496720012045s: 1 |
||||
[2017-10-23 13:48:09,314: INFO/MainProcess] Received task: djcelery_email_send[fe0bd44a-f23e-476b-a447-c03d8b5bb266] |
||||
[2017-10-23 13:48:12,620: INFO/ForkPoolWorker-1] Task djcelery_email_send[fe0bd44a-f23e-476b-a447-c03d8b5bb266] succeeded in 1.340003754998179s: 1 |
||||
[2017-10-23 14:36:33,382: INFO/MainProcess] Received task: djcelery_email_send[33418ad8-1f87-4a6f-ba11-a2fc0f52374a] |
||||
[2017-10-23 14:36:35,323: INFO/ForkPoolWorker-2] Task djcelery_email_send[33418ad8-1f87-4a6f-ba11-a2fc0f52374a] succeeded in 1.3137642000001506s: 1 |
||||
[2017-10-23 14:36:49,212: INFO/MainProcess] Received task: djcelery_email_send[5f3beb45-7d03-447a-be90-41506efb897b] |
||||
[2017-10-23 14:36:51,271: INFO/ForkPoolWorker-1] Task djcelery_email_send[5f3beb45-7d03-447a-be90-41506efb897b] succeeded in 1.23961846200109s: 1 |
||||
[2017-10-23 14:46:42,199: INFO/MainProcess] Received task: djcelery_email_send[69d6f018-e571-4d65-93a4-151fa78361ae] |
||||
[2017-10-23 14:46:44,060: INFO/ForkPoolWorker-2] Task djcelery_email_send[69d6f018-e571-4d65-93a4-151fa78361ae] succeeded in 1.2866839900016203s: 1 |
||||
[2017-10-23 14:55:56,121: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 320, in start |
||||
blueprint.start(self) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start |
||||
step.start(parent) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 596, in start |
||||
c.loop(*c.loop_args()) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/loops.py", line 88, in asynloop |
||||
next(loop) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/async/hub.py", line 354, in create_loop |
||||
cb(*cbargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/transport/base.py", line 236, in on_readable |
||||
reader(loop) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/transport/base.py", line 218, in _read |
||||
drain_events(timeout=0) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 471, in drain_events |
||||
while not self.blocking_read(timeout): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 477, in blocking_read |
||||
return self.on_inbound_frame(frame) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/method_framing.py", line 55, in on_frame |
||||
callback(channel, method_sig, buf, None) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 481, in on_inbound_method |
||||
method_sig, payload, content, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/abstract_channel.py", line 128, in dispatch_method |
||||
listener(*args) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 601, in _on_close |
||||
self._x_close_ok() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 616, in _x_close_ok |
||||
self.send_method(spec.Connection.CloseOk, callback=self._on_close_ok) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/abstract_channel.py", line 50, in send_method |
||||
conn.frame_writer(1, self.channel_id, sig, args, content) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/method_framing.py", line 166, in write_frame |
||||
write(view[:offset]) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/transport.py", line 258, in write |
||||
self._write(s) |
||||
ConnectionResetError: [Errno 104] Connection reset by peer |
||||
[2017-10-23 14:55:56,137: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 2.00 seconds... |
||||
|
||||
[2017-10-23 14:55:58,150: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 4.00 seconds... |
||||
|
||||
[2017-10-23 14:56:02,176: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 6.00 seconds... |
||||
|
||||
[2017-10-23 14:56:08,193: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 8.00 seconds... |
||||
|
||||
[2017-10-23 14:56:16,210: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 10.00 seconds... |
||||
|
||||
[2017-10-23 14:56:26,228: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-23 14:56:26,237: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-23 14:56:26,241: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 320, in start |
||||
blueprint.start(self) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start |
||||
step.start(parent) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/mingle.py", line 38, in start |
||||
self.sync(c) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/mingle.py", line 42, in sync |
||||
replies = self.send_hello(c) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/mingle.py", line 55, in send_hello |
||||
replies = inspect.hello(c.hostname, our_revoked._data) or {} |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/control.py", line 129, in hello |
||||
return self._request('hello', from_node=from_node, revoked=revoked) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/control.py", line 81, in _request |
||||
timeout=self.timeout, reply=True, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/control.py", line 436, in broadcast |
||||
limit, callback, channel=channel, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/pidbox.py", line 315, in _broadcast |
||||
serializer=serializer) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/pidbox.py", line 290, in _publish |
||||
serializer=serializer, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/messaging.py", line 181, in publish |
||||
exchange_name, declare, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/messaging.py", line 203, in _publish |
||||
mandatory=mandatory, immediate=immediate, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/channel.py", line 1734, in _basic_publish |
||||
(0, exchange, routing_key, mandatory, immediate), msg |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/abstract_channel.py", line 50, in send_method |
||||
conn.frame_writer(1, self.channel_id, sig, args, content) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/method_framing.py", line 166, in write_frame |
||||
write(view[:offset]) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/transport.py", line 258, in write |
||||
self._write(s) |
||||
ConnectionResetError: [Errno 104] Connection reset by peer |
||||
[2017-10-23 14:56:26,250: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[2017-10-23 14:56:26,256: INFO/MainProcess] mingle: searching for neighbors |
||||
[2017-10-23 14:56:27,273: INFO/MainProcess] mingle: all alone |
||||
[2017-10-23 14:56:27,310: INFO/MainProcess] Received task: djcelery_email_send[455cf8cb-b29f-4159-a81b-b33e5dbee1f3] |
||||
[2017-10-23 14:56:28,959: INFO/ForkPoolWorker-2] Task djcelery_email_send[455cf8cb-b29f-4159-a81b-b33e5dbee1f3] succeeded in 1.1903551169998536s: 1 |
||||
[2017-10-23 18:52:13,477: INFO/MainProcess] Received task: djcelery_email_send[0fb5c171-4123-47fa-8089-823904fde5fd] |
||||
[2017-10-23 18:52:16,661: INFO/ForkPoolWorker-1] Task djcelery_email_send[0fb5c171-4123-47fa-8089-823904fde5fd] succeeded in 1.222238110996841s: 1 |
||||
[2017-10-23 19:05:28,619: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 320, in start |
||||
blueprint.start(self) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start |
||||
step.start(parent) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 596, in start |
||||
c.loop(*c.loop_args()) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/worker/loops.py", line 88, in asynloop |
||||
next(loop) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/async/hub.py", line 354, in create_loop |
||||
cb(*cbargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/transport/base.py", line 236, in on_readable |
||||
reader(loop) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/kombu/transport/base.py", line 218, in _read |
||||
drain_events(timeout=0) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 471, in drain_events |
||||
while not self.blocking_read(timeout): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 477, in blocking_read |
||||
return self.on_inbound_frame(frame) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/method_framing.py", line 55, in on_frame |
||||
callback(channel, method_sig, buf, None) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 481, in on_inbound_method |
||||
method_sig, payload, content, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/abstract_channel.py", line 128, in dispatch_method |
||||
listener(*args) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 601, in _on_close |
||||
self._x_close_ok() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/connection.py", line 616, in _x_close_ok |
||||
self.send_method(spec.Connection.CloseOk, callback=self._on_close_ok) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/abstract_channel.py", line 50, in send_method |
||||
conn.frame_writer(1, self.channel_id, sig, args, content) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/method_framing.py", line 166, in write_frame |
||||
write(view[:offset]) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/amqp/transport.py", line 258, in write |
||||
self._write(s) |
||||
ConnectionResetError: [Errno 104] Connection reset by peer |
||||
[2017-10-23 19:05:28,624: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. |
||||
Trying again in 2.00 seconds... |
||||
|
||||
|
||||
worker: Warm shutdown (MainProcess) |
||||
|
||||
-------------- celery@andrey-desktop v4.1.0 (latentcall) |
||||
---- **** ----- |
||||
--- * *** * -- Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial 2017-10-23 08:32:22 |
||||
-- * - **** --- |
||||
- ** ---------- [config] |
||||
- ** ---------- .> app: lms:0x7f574ff21ba8 |
||||
- ** ---------- .> transport: amqp://guest:**@localhost:5672// |
||||
- ** ---------- .> results: |
||||
- *** --- * --- .> concurrency: 4 (prefork) |
||||
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) |
||||
--- ***** ----- |
||||
-------------- [queues] |
||||
.> celery exchange=celery(direct) key=celery |
||||
|
||||
|
||||
[tasks] |
||||
. djcelery_email_send |
||||
. lms.celery.debug_task |
||||
|
||||
@ -0,0 +1,623 @@ |
||||
[E 171020 13:12:57 signal:232] Signal handler <promise@0x7f84e8f79678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f84e711bbe0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 13:12:57 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 13:12:57 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 13:12:57 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 13:12:57 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 13:13:00 control:44] 'stats' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'active_queues' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'registered' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'scheduled' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'active' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'reserved' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'revoked' inspect method failed |
||||
[W 171020 13:13:00 control:44] 'conf' inspect method failed |
||||
[I 171020 13:32:28 command:47] SIGTERM detected, shutting down |
||||
[E 171020 13:32:31 signal:232] Signal handler <promise@0x7f72af4b2678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f72ad655b70>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 13:32:31 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 13:32:31 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 13:32:31 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 13:32:31 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 13:32:34 control:44] 'stats' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'active_queues' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'registered' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'scheduled' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'active' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'reserved' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'revoked' inspect method failed |
||||
[W 171020 13:32:34 control:44] 'conf' inspect method failed |
||||
[I 171020 13:37:56 command:47] SIGTERM detected, shutting down |
||||
[E 171020 13:38:00 signal:232] Signal handler <promise@0x7f00bb71c678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f00b98bebe0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 13:38:00 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 13:38:00 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 13:38:00 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 13:38:00 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 13:38:02 control:44] 'stats' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'active_queues' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'registered' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'scheduled' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'active' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'reserved' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'revoked' inspect method failed |
||||
[W 171020 13:38:02 control:44] 'conf' inspect method failed |
||||
[I 171020 13:47:47 command:47] SIGTERM detected, shutting down |
||||
[E 171020 13:47:51 signal:232] Signal handler <promise@0x7f7efbb18678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f7ef9cbabe0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 13:47:51 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 13:47:51 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 13:47:51 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 13:47:51 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 13:47:53 control:44] 'stats' inspect method failed |
||||
[W 171020 13:47:53 control:44] 'active_queues' inspect method failed |
||||
[W 171020 13:47:53 control:44] 'registered' inspect method failed |
||||
[W 171020 13:47:53 control:44] 'scheduled' inspect method failed |
||||
[I 171020 14:42:44 command:47] SIGTERM detected, shutting down |
||||
[E 171020 14:42:47 signal:232] Signal handler <promise@0x7f9b93353678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f9b914f5be0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 14:42:47 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 14:42:47 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 14:42:47 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 14:42:47 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 14:42:49 control:44] 'stats' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'active_queues' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'registered' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'scheduled' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'active' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'reserved' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'revoked' inspect method failed |
||||
[W 171020 14:42:49 control:44] 'conf' inspect method failed |
||||
[I 171020 14:56:39 command:47] SIGTERM detected, shutting down |
||||
[E 171020 14:56:42 signal:232] Signal handler <promise@0x7f15cad6f678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f15c8f11be0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 14:56:42 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 14:56:42 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 14:56:42 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 14:56:42 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 14:56:45 control:44] 'stats' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'active_queues' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'registered' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'scheduled' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'active' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'reserved' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'revoked' inspect method failed |
||||
[W 171020 14:56:45 control:44] 'conf' inspect method failed |
||||
[I 171020 15:14:09 command:47] SIGTERM detected, shutting down |
||||
[E 171020 15:14:13 signal:232] Signal handler <promise@0x7f60e14ab678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f60df64dbe0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 15:14:13 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 15:14:13 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 15:14:13 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 15:14:13 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 15:14:15 control:44] 'stats' inspect method failed |
||||
[W 171020 15:14:15 control:44] 'active_queues' inspect method failed |
||||
[W 171020 15:14:15 control:44] 'registered' inspect method failed |
||||
[W 171020 15:14:15 control:44] 'scheduled' inspect method failed |
||||
[I 171020 15:18:22 command:47] SIGTERM detected, shutting down |
||||
[E 171020 15:18:26 signal:232] Signal handler <promise@0x7ff7eb19f678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7ff7e9341b70>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 15:18:26 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 15:18:26 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 15:18:26 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 15:18:26 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 15:18:28 control:44] 'stats' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'active_queues' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'registered' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'scheduled' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'active' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'reserved' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'revoked' inspect method failed |
||||
[W 171020 15:18:28 control:44] 'conf' inspect method failed |
||||
[I 171020 15:31:13 command:47] SIGTERM detected, shutting down |
||||
[E 171020 15:31:17 signal:232] Signal handler <promise@0x7fcacf94e678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7fcacdaf0be0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 15:31:17 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 15:31:17 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 15:31:17 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send_multiple', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 15:31:17 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 15:31:19 control:44] 'stats' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'active_queues' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'registered' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'scheduled' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'active' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'reserved' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'revoked' inspect method failed |
||||
[W 171020 15:31:19 control:44] 'conf' inspect method failed |
||||
[I 171020 16:52:23 command:47] SIGTERM detected, shutting down |
||||
[E 171020 16:52:26 signal:232] Signal handler <promise@0x7fb7bea9a678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7fb7bcc3cb70>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171020 16:52:26 command:139] Visit me at http://localhost:5555 |
||||
[I 171020 16:52:26 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171020 16:52:26 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send', |
||||
'lms.celery.debug_task'] |
||||
[I 171020 16:52:26 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171020 16:52:28 control:44] 'stats' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'active_queues' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'registered' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'scheduled' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'active' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'reserved' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'revoked' inspect method failed |
||||
[W 171020 16:52:28 control:44] 'conf' inspect method failed |
||||
[I 171020 19:20:51 command:47] SIGTERM detected, shutting down |
||||
[E 171023 08:32:22 signal:232] Signal handler <promise@0x7f249b502678 --> <bound method Celery._autodiscover_tasks of <Celery lms at 0x7f24996a4be0>>> raised: ImportError("cannot import name 'TrafSource'",) |
||||
Traceback (most recent call last): |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/utils/dispatch/signal.py", line 227, in send |
||||
response = receiver(signal=self, sender=sender, **named) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 143, in __call__ |
||||
return self.throw() |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/vine/promises.py", line 140, in __call__ |
||||
retval = fun(*final_args, **final_kwargs) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 671, in _autodiscover_tasks |
||||
return self._autodiscover_tasks_from_fixups(related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 684, in _autodiscover_tasks_from_fixups |
||||
], related_name=related_name) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/app/base.py", line 676, in _autodiscover_tasks_from_names |
||||
packages() if callable(packages) else packages, related_name, |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 223, in autodiscover_tasks |
||||
related_name) if mod) |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in autodiscover_tasks |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 248, in <listcomp> |
||||
return [find_related_module(pkg, related_name) for pkg in packages] |
||||
File "/home/andrey/skillbox/lib/python3.6/site-packages/celery/loaders/base.py", line 274, in find_related_module |
||||
return importlib.import_module('{0}.{1}'.format(package, related_name)) |
||||
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module |
||||
return _bootstrap._gcd_import(name[level:], package, level) |
||||
File "<frozen importlib._bootstrap>", line 994, in _gcd_import |
||||
File "<frozen importlib._bootstrap>", line 971, in _find_and_load |
||||
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked |
||||
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked |
||||
File "<frozen importlib._bootstrap_external>", line 678, in exec_module |
||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed |
||||
File "/home/andrey/skillbox/go.skillbox.ru/access/tasks.py", line 4, in <module> |
||||
from access.models import User, TrafSource, TrafTokenHistory |
||||
ImportError: cannot import name 'TrafSource' |
||||
[I 171023 08:32:22 command:139] Visit me at http://localhost:5555 |
||||
[I 171023 08:32:22 command:144] Broker: amqp://guest:**@localhost:5672// |
||||
[I 171023 08:32:22 command:147] Registered tasks: |
||||
['celery.accumulate', |
||||
'celery.backend_cleanup', |
||||
'celery.chain', |
||||
'celery.chord', |
||||
'celery.chord_unlock', |
||||
'celery.chunks', |
||||
'celery.group', |
||||
'celery.map', |
||||
'celery.starmap', |
||||
'djcelery_email_send', |
||||
'lms.celery.debug_task'] |
||||
[I 171023 08:32:22 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[W 171023 08:32:24 control:44] 'stats' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'active_queues' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'registered' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'scheduled' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'active' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'reserved' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'revoked' inspect method failed |
||||
[W 171023 08:32:24 control:44] 'conf' inspect method failed |
||||
[E 171023 14:55:56 events:123] Failed to capture events: '[Errno 104] Connection reset by peer', trying again in 1 seconds. |
||||
[I 171023 14:56:17 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[E 171023 14:56:17 events:123] Failed to capture events: '[Errno 104] Connection reset by peer', trying again in 1 seconds. |
||||
[I 171023 14:56:18 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672// |
||||
[I 171023 19:05:28 command:47] SIGTERM detected, shutting down |
||||
@ -0,0 +1,121 @@ |
||||
[2017-10-20 13:12:57,958: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 13:12:57 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 13:32:31,865: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 13:32:31 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 13:38:00,107: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 13:38:00 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 13:47:51,058: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 13:47:51 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 14:42:47,578: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 14:42:47 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 14:56:42,777: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 14:56:42 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 15:14:13,137: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 15:14:13 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 15:18:26,051: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 15:18:26 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 15:31:17,073: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 15:31:17 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-20 16:52:26,958: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-20 16:52:26 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
[2017-10-23 08:32:22,755: INFO/MainProcess] beat: Starting... |
||||
celery beat v4.1.0 (latentcall) is starting. |
||||
__ - ... __ - _ |
||||
LocalTime -> 2017-10-23 08:32:22 |
||||
Configuration -> |
||||
. broker -> amqp://guest:**@localhost:5672// |
||||
. loader -> celery.loaders.app.AppLoader |
||||
. scheduler -> celery.beat.PersistentScheduler |
||||
. db -> celerybeat-schedule |
||||
. logfile -> [stderr]@%INFO |
||||
. maxinterval -> 5.00 minutes (300s) |
||||
@ -1,20 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-03-27 13:29 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('progress', '0008_auto_20180227_1803'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='progress', |
||||
name='is_freeze', |
||||
field=models.BooleanField(default=False, verbose_name='Прохождение было преостановленно'), |
||||
), |
||||
] |
||||
@ -1,20 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2018-04-16 18:50 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('progress', '0009_progress_is_freeze'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='progress', |
||||
name='exp_date', |
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Дата сгорания'), |
||||
), |
||||
] |
||||
@ -1,6 +0,0 @@ |
||||
<div> Выставлен новый счет </div> |
||||
<div> Пользователь: {{ user_email }} </div> |
||||
<div> Продавец: {{ opener_full_name }} </div> |
||||
<div> Курс: {{ course_title }} </div> |
||||
<div> Дата продажи: {{ date }} </div> |
||||
<div> Сумма: {{ price }} руб. </div> |
||||
@ -1,7 +0,0 @@ |
||||
<div> Успешный платёж </div> |
||||
<div> Пользователь: {{ user_email }} </div> |
||||
<div> Продавец: {{ opener_full_name }} </div> |
||||
<div> Курс: {{ course_title }} </div> |
||||
<div> Дата продажи: {{ date }} </div> |
||||
<div> Дата оплаты: {{ finish_date }} </div> |
||||
<div> Сумма: {{ price }} руб. </div> |
||||
@ -1,57 +0,0 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<title>Тестовый платёж</title> |
||||
</head> |
||||
<body> |
||||
<div> |
||||
Номер карты: 4444 4444 4444 4448 <br> |
||||
Действует до: любой год и месяц в будущем <br> |
||||
Код CVV: 000 <br> |
||||
Больше инфы |
||||
<a href="https://tech.yandex.ru/money/doc/payment-solution/examples/examples-test-data-docpage/" target="_blank"> |
||||
В доке |
||||
</a><br> |
||||
Отправление формы срабатывает только раз затем нужно будет заменить orderNumber |
||||
</div> |
||||
<br><br><br> |
||||
<form action="https://demomoney.yandex.ru/eshop.xml" method="post" target="_blank"> |
||||
<table> |
||||
<tr> |
||||
<td>shopId</td> |
||||
<td><input name="shopId" value="{{ shop_id }}" type="text"></td> |
||||
</tr> |
||||
<tr> |
||||
<td>scid</td> |
||||
<td><input name="scid" value="{{ sc_id }}" type="text"></td> |
||||
</tr> |
||||
<tr> |
||||
<td>sum</td> |
||||
<td><input name="sum" value="100.50" type="text"></td> |
||||
</tr> |
||||
<tr> |
||||
<td>customerNumber</td> |
||||
<td><input name="customerNumber" value="abc000" type="text"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td>orderNumber</td> |
||||
<td><input name="orderNumber" value="{{ order_number }}" type="text"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td>cps_phone</td> |
||||
<td><input name="cps_phone" value="79110000000" type="text"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td>cps_email</td> |
||||
<td><input name="cps_email" value="{{ user_email }}" type="text"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td>rebillingOn</td> |
||||
<td><input name="rebillingOn" value="false" type="text"/></td> |
||||
</tr> |
||||
</table> |
||||
<input type="submit" value="Заплатить"/> |
||||
</form> |
||||
</body> |
||||
</html> |
||||
@ -1,28 +0,0 @@ |
||||
import pytest |
||||
from tests.client import BetterAPIClient |
||||
|
||||
pytest_plugins = [ |
||||
'tests.fixtures.users', |
||||
] |
||||
|
||||
@pytest.fixture |
||||
def api_client(): |
||||
"""Anonymous client for REST API.""" |
||||
client = BetterAPIClient() |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def staff_client(user_staff): |
||||
"""Authorized as staff client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=user_staff) |
||||
return client |
||||
|
||||
|
||||
@pytest.fixture |
||||
def student_client(user_student): |
||||
"""Authorized as staff client for REST API.""" |
||||
client = BetterAPIClient() |
||||
client.force_authenticate(user=user_student) |
||||
return client |
||||
@ -1,63 +0,0 @@ |
||||
import pytest |
||||
|
||||
from factories.users import UserFactory, AccountFactory |
||||
|
||||
|
||||
@pytest.fixture |
||||
def user_staff(): |
||||
""" |
||||
Create user as staff with data: |
||||
email = 'admin@example.com' |
||||
password = 'test' |
||||
is_staff=True |
||||
is_active = True |
||||
is_superuser = True |
||||
""" |
||||
admin = UserFactory( |
||||
last_name='Иванов', |
||||
first_name='Иван', |
||||
email='admin@example.com', |
||||
is_staff=True, |
||||
is_active=True, |
||||
is_superuser=True |
||||
) |
||||
AccountFactory(owner=admin) |
||||
return admin |
||||
|
||||
|
||||
@pytest.fixture |
||||
def user_student(): |
||||
""" |
||||
Create user as student with data: |
||||
email = 'student@example.com' |
||||
password = 'test' |
||||
is_active = True |
||||
""" |
||||
student = UserFactory( |
||||
last_name='Иванов', |
||||
first_name='Иван', |
||||
email='student@example.com', |
||||
is_staff=False, |
||||
is_active=True, |
||||
) |
||||
|
||||
AccountFactory(owner=student) |
||||
return student |
||||
|
||||
|
||||
@pytest.fixture |
||||
def user_not_active_student(): |
||||
""" |
||||
Create user as student with data: |
||||
email = 'notactivestudent@example.com' |
||||
password = 'test' |
||||
is_active = False |
||||
""" |
||||
student = UserFactory( |
||||
last_name='Иванов', |
||||
first_name='Иван', |
||||
email='notactivestudent@example.com', |
||||
is_staff=False, |
||||
is_active=False, |
||||
) |
||||
return student |
||||
@ -1,124 +0,0 @@ |
||||
import mock |
||||
import pytest |
||||
|
||||
from django.contrib.auth import get_user_model |
||||
from django.urls import reverse |
||||
|
||||
from rest_framework import status |
||||
from rest_framework.generics import get_object_or_404 |
||||
|
||||
from factories.users import USER_PASSWORD |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
@mock.patch('django.core.mail.EmailMessage.send') |
||||
def test_generate_password_by_manager(mocked_send_mail, staff_client, |
||||
student_client, user_student): |
||||
""" |
||||
Test generate new password from admin area by manager |
||||
""" |
||||
assert staff_client.get( |
||||
reverse('users:management-password'), |
||||
status=status.HTTP_405_METHOD_NOT_ALLOWED |
||||
) |
||||
assert student_client.get( |
||||
reverse('users:management-password'), |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
data = { |
||||
'email': user_student.email, |
||||
} |
||||
assert staff_client.post( |
||||
reverse('users:management-password'), |
||||
data=data, |
||||
status=status.HTTP_201_CREATED |
||||
) |
||||
test_user = get_object_or_404(get_user_model(), email=user_student.email) |
||||
assert not test_user.check_password('test') |
||||
assert mocked_send_mail.call_count == 1 |
||||
assert student_client.post( |
||||
reverse('users:management-password'), |
||||
data=data, |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
wrong_data = { |
||||
'email': 'no_user@example.com', |
||||
} |
||||
assert staff_client.post( |
||||
reverse('users:management-password'), |
||||
data=wrong_data, |
||||
status=status.HTTP_404_NOT_FOUND |
||||
) |
||||
wrong_email = { |
||||
'email': 'no_user@example', |
||||
} |
||||
assert staff_client.post( |
||||
reverse('users:management-password'), |
||||
data=wrong_email, |
||||
status=status.HTTP_404_NOT_FOUND |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_generate_password_by_manager_for_not_active_student(staff_client, |
||||
user_not_active_student): |
||||
""" |
||||
Test generate new password from admin area by manager for not active student |
||||
""" |
||||
|
||||
data = { |
||||
'email': user_not_active_student.email, |
||||
} |
||||
assert staff_client.post( |
||||
reverse('users:management-password'), |
||||
data=data, |
||||
status=status.HTTP_201_CREATED |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_login_user(api_client, user_student): |
||||
""" |
||||
Test login user |
||||
""" |
||||
data = { |
||||
'email': user_student.email, |
||||
'password': USER_PASSWORD |
||||
} |
||||
assert api_client.post( |
||||
reverse('users:login'), |
||||
data=data, |
||||
status=status.HTTP_200_OK |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_login_user_wrong_password(api_client, user_student): |
||||
""" |
||||
Test login user with wrong password |
||||
""" |
||||
data = { |
||||
'email': user_student.email, |
||||
'password': USER_PASSWORD + '1' |
||||
} |
||||
assert api_client.post( |
||||
reverse('users:login'), |
||||
data=data, |
||||
status=status.HTTP_403_FORBIDDEN |
||||
) |
||||
|
||||
|
||||
@pytest.mark.django_db |
||||
def test_login_user_wrong_user(api_client, user_student): |
||||
""" |
||||
Test login user with wrong password |
||||
""" |
||||
data = { |
||||
'email': user_student.email + '1', |
||||
'password': USER_PASSWORD |
||||
} |
||||
assert api_client.post( |
||||
reverse('users:login'), |
||||
data=data, |
||||
status=status.HTTP_404_NOT_FOUND |
||||
) |
||||
Loading…
Reference in new issue