diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/different.iml b/.idea/different.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/.idea/different.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..d1e22ec
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..32c5275
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/celery_log_docker/Dockerfile b/celery_log_docker/Dockerfile
new file mode 100644
index 0000000..efc24de
--- /dev/null
+++ b/celery_log_docker/Dockerfile
@@ -0,0 +1,45 @@
+FROM python:3.8.9-slim-buster
+
+ENV BUILD_ONLY_PACKAGES='wget' \
+ # python:
+ PYTHONFAULTHANDLER=1 \
+ PYTHONUNBUFFERED=1 \
+ PYTHONHASHSEED=random \
+ PYTHONDONTWRITEBYTECODE=1 \
+ # pip:
+ PIP_NO_CACHE_DIR=off \
+ PIP_DISABLE_PIP_VERSION_CHECK=on \
+ PIP_DEFAULT_TIMEOUT=100 \
+ # poetry:
+ POETRY_VERSION=1.1.4 \
+ POETRY_NO_INTERACTION=1 \
+ POETRY_VIRTUALENVS_CREATE=false \
+ POETRY_CACHE_DIR='/var/cache/pypoetry' \
+ PATH="$PATH:/root/.poetry/bin"
+
+# System deps:
+RUN apt-get update \
+ && apt-get install --no-install-recommends -y \
+ bash \
+ build-essential \
+ gettext \
+ libpq-dev \
+ nano \
+ curl \
+ # Defining build-time-only dependencies:
+ $BUILD_ONLY_PACKAGES \
+ && curl -sSL 'https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py' | python \
+ && poetry --version \
+ # Removing build-time-only dependencies:
+ && apt-get remove -y $BUILD_ONLY_PACKAGES \
+ # Cleaning cache:
+ && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
+ && apt-get clean -y && rm -rf /var/lib/apt/lists/* \
+ && rm -rf $POETRY_CACHE_DIR
+
+WORKDIR /code
+
+# Copy only requirements, to cache them in docker layer
+COPY ./poetry.lock ./pyproject.toml /code/
+RUN poetry install
+COPY . /code
diff --git a/celery_log_docker/__init__.py b/celery_log_docker/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/celery_log_docker/__init__.py
@@ -0,0 +1 @@
+
diff --git a/celery_log_docker/celery.log b/celery_log_docker/celery.log
new file mode 100644
index 0000000..721d6a5
--- /dev/null
+++ b/celery_log_docker/celery.log
@@ -0,0 +1,143 @@
+[2021-09-06 17:05:09,677: ERROR/MainProcess] consumer: Cannot connect to amqp://rabbit_admin:**@rabbitmq_host:5672//: [Errno 111] Connection refused.
+Trying again in 2.00 seconds... (1/100)
+
+[2021-09-06 17:05:11,684: ERROR/MainProcess] consumer: Cannot connect to amqp://rabbit_admin:**@rabbitmq_host:5672//: [Errno 111] Connection refused.
+Trying again in 4.00 seconds... (2/100)
+
+[2021-09-06 17:05:15,699: INFO/MainProcess] Connected to amqp://rabbit_admin:**@rabbitmq_host:5672//
+[2021-09-06 17:05:15,705: INFO/MainProcess] mingle: searching for neighbors
+[2021-09-06 17:05:16,728: INFO/MainProcess] mingle: all alone
+[2021-09-06 17:05:16,741: INFO/MainProcess] celery@5885d9799983 ready.
+[2021-09-06 17:06:10,637: INFO/MainProcess] Task main.test[8fc376db-1752-4dfc-a9b3-94d5b4a53524] received
+[2021-09-06 17:06:10,637: INFO/ForkPoolWorker-1] WE ARE HERE
+[2021-09-06 17:06:10,637: WARNING/ForkPoolWorker-1] 4
+[2021-09-06 17:06:10,638: WARNING/ForkPoolWorker-1]
+
+[2021-09-06 17:06:10,638: INFO/ForkPoolWorker-1] 4
+[2021-09-06 17:06:10,651: INFO/ForkPoolWorker-1] Task main.test[8fc376db-1752-4dfc-a9b3-94d5b4a53524] succeeded in 0.013417366000794573s: 4
+[2021-09-06 17:07:11,945: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection...
+Traceback (most recent call last):
+ File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 326, in start
+ blueprint.start(self)
+ File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 116, in start
+ step.start(parent)
+ File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 618, in start
+ c.loop(*c.loop_args())
+ File "/usr/local/lib/python3.8/site-packages/celery/worker/loops.py", line 81, in asynloop
+ next(loop)
+ File "/usr/local/lib/python3.8/site-packages/kombu/asynchronous/hub.py", line 361, in create_loop
+ cb(*cbargs)
+ File "/usr/local/lib/python3.8/site-packages/kombu/transport/base.py", line 235, in on_readable
+ reader(loop)
+ File "/usr/local/lib/python3.8/site-packages/kombu/transport/base.py", line 217, in _read
+ drain_events(timeout=0)
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 523, in drain_events
+ while not self.blocking_read(timeout):
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 529, in blocking_read
+ return self.on_inbound_frame(frame)
+ File "/usr/local/lib/python3.8/site-packages/amqp/method_framing.py", line 53, in on_frame
+ callback(channel, method_sig, buf, None)
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 535, in on_inbound_method
+ return self.channels[channel_id].dispatch_method(
+ File "/usr/local/lib/python3.8/site-packages/amqp/abstract_channel.py", line 143, in dispatch_method
+ listener(*args)
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 664, in _on_close
+ self._x_close_ok()
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 679, in _x_close_ok
+ self.send_method(spec.Connection.CloseOk, callback=self._on_close_ok)
+ File "/usr/local/lib/python3.8/site-packages/amqp/abstract_channel.py", line 57, in send_method
+ conn.frame_writer(1, self.channel_id, sig, args, content)
+ File "/usr/local/lib/python3.8/site-packages/amqp/method_framing.py", line 183, in write_frame
+ write(view[:offset])
+ File "/usr/local/lib/python3.8/site-packages/amqp/transport.py", line 352, in write
+ self._write(s)
+ConnectionResetError: [Errno 104] Connection reset by peer
+[2021-09-06 17:07:11,947: WARNING/MainProcess] /usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py:361: CPendingDeprecationWarning:
+In Celery 5.1 we introduced an optional breaking change which
+on connection loss cancels all currently executed tasks with late acknowledgement enabled.
+These tasks cannot be acknowledged as the connection is gone, and the tasks are automatically redelivered back to the queue.
+You can enable this behavior using the worker_cancel_long_running_tasks_on_connection_loss setting.
+In Celery 5.1 it is set to False by default. The setting will be set to True by default in Celery 6.0.
+
+ warnings.warn(CANCEL_TASKS_BY_DEFAULT, CPendingDeprecationWarning)
+
+[2021-09-06 17:07:19,647: ERROR/MainProcess] consumer: Cannot connect to amqp://rabbit_admin:**@rabbitmq_host:5672//: [Errno 111] Connection refused.
+Trying again in 2.00 seconds... (1/100)
+
+[2021-09-06 17:07:20,045: ERROR/MainProcess] consumer: Cannot connect to amqp://rabbit_admin:**@rabbitmq_host:5672//: [Errno 111] Connection refused.
+Trying again in 2.00 seconds... (1/100)
+
+[2021-09-06 17:07:21,654: ERROR/MainProcess] consumer: Cannot connect to amqp://rabbit_admin:**@rabbitmq_host:5672//: [Errno 111] Connection refused.
+Trying again in 4.00 seconds... (2/100)
+
+[2021-09-06 17:07:22,053: ERROR/MainProcess] consumer: Cannot connect to amqp://rabbit_admin:**@rabbitmq_host:5672//: [Errno 111] Connection refused.
+Trying again in 4.00 seconds... (2/100)
+
+[2021-09-06 17:07:25,684: INFO/MainProcess] Connected to amqp://rabbit_admin:**@rabbitmq_host:5672//
+[2021-09-06 17:07:25,710: INFO/MainProcess] mingle: searching for neighbors
+[2021-09-06 17:07:26,079: INFO/MainProcess] Connected to amqp://rabbit_admin:**@rabbitmq_host:5672//
+[2021-09-06 17:07:26,098: INFO/MainProcess] mingle: searching for neighbors
+[2021-09-06 17:07:26,739: INFO/MainProcess] mingle: all alone
+[2021-09-06 17:07:26,782: INFO/MainProcess] celery@2f1496df298b ready.
+[2021-09-06 17:07:27,128: INFO/MainProcess] mingle: all alone
+[2021-09-06 17:07:27,174: INFO/MainProcess] celery@265915b3bb4d ready.
+[2021-09-06 17:07:42,029: INFO/MainProcess] Task main.test[7e78bcba-0161-45b9-b7bf-05bc9a532a46] received
+[2021-09-06 17:07:42,029: INFO/ForkPoolWorker-1] WE ARE HERE
+[2021-09-06 17:07:42,030: WARNING/ForkPoolWorker-1] 4
+[2021-09-06 17:07:42,030: WARNING/ForkPoolWorker-1]
+
+[2021-09-06 17:07:42,030: INFO/ForkPoolWorker-1] 4
+[2021-09-06 17:07:42,043: INFO/ForkPoolWorker-1] Task main.test[7e78bcba-0161-45b9-b7bf-05bc9a532a46] succeeded in 0.01332545499826665s: 4
+[2021-09-06 17:08:05,780: INFO/MainProcess] Task main.test[85d97d31-2029-41c6-a576-50ba61240007] received
+[2021-09-06 17:08:05,781: INFO/ForkPoolWorker-1] WE ARE HERE
+[2021-09-06 17:08:05,781: WARNING/ForkPoolWorker-1] 4
+[2021-09-06 17:08:05,781: WARNING/ForkPoolWorker-1]
+
+[2021-09-06 17:08:05,781: INFO/ForkPoolWorker-1] 4
+[2021-09-06 17:08:05,795: INFO/ForkPoolWorker-1] Task main.test[85d97d31-2029-41c6-a576-50ba61240007] succeeded in 0.013929769000242231s: 4
+[2021-09-06 17:13:37,692: WARNING/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection...
+Traceback (most recent call last):
+ File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 326, in start
+ blueprint.start(self)
+ File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 116, in start
+ step.start(parent)
+ File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 618, in start
+ c.loop(*c.loop_args())
+ File "/usr/local/lib/python3.8/site-packages/celery/worker/loops.py", line 81, in asynloop
+ next(loop)
+ File "/usr/local/lib/python3.8/site-packages/kombu/asynchronous/hub.py", line 361, in create_loop
+ cb(*cbargs)
+ File "/usr/local/lib/python3.8/site-packages/kombu/transport/base.py", line 235, in on_readable
+ reader(loop)
+ File "/usr/local/lib/python3.8/site-packages/kombu/transport/base.py", line 217, in _read
+ drain_events(timeout=0)
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 523, in drain_events
+ while not self.blocking_read(timeout):
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 529, in blocking_read
+ return self.on_inbound_frame(frame)
+ File "/usr/local/lib/python3.8/site-packages/amqp/method_framing.py", line 53, in on_frame
+ callback(channel, method_sig, buf, None)
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 535, in on_inbound_method
+ return self.channels[channel_id].dispatch_method(
+ File "/usr/local/lib/python3.8/site-packages/amqp/abstract_channel.py", line 143, in dispatch_method
+ listener(*args)
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 664, in _on_close
+ self._x_close_ok()
+ File "/usr/local/lib/python3.8/site-packages/amqp/connection.py", line 679, in _x_close_ok
+ self.send_method(spec.Connection.CloseOk, callback=self._on_close_ok)
+ File "/usr/local/lib/python3.8/site-packages/amqp/abstract_channel.py", line 57, in send_method
+ conn.frame_writer(1, self.channel_id, sig, args, content)
+ File "/usr/local/lib/python3.8/site-packages/amqp/method_framing.py", line 183, in write_frame
+ write(view[:offset])
+ File "/usr/local/lib/python3.8/site-packages/amqp/transport.py", line 352, in write
+ self._write(s)
+ConnectionResetError: [Errno 104] Connection reset by peer
+[2021-09-06 17:13:37,693: WARNING/MainProcess] /usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py:361: CPendingDeprecationWarning:
+In Celery 5.1 we introduced an optional breaking change which
+on connection loss cancels all currently executed tasks with late acknowledgement enabled.
+These tasks cannot be acknowledged as the connection is gone, and the tasks are automatically redelivered back to the queue.
+You can enable this behavior using the worker_cancel_long_running_tasks_on_connection_loss setting.
+In Celery 5.1 it is set to False by default. The setting will be set to True by default in Celery 6.0.
+
+ warnings.warn(CANCEL_TASKS_BY_DEFAULT, CPendingDeprecationWarning)
+
diff --git a/celery_log_docker/celery_config.py b/celery_log_docker/celery_config.py
new file mode 100644
index 0000000..f03bf73
--- /dev/null
+++ b/celery_log_docker/celery_config.py
@@ -0,0 +1,57 @@
+from celery import Celery
+from celery.signals import after_setup_logger
+from celery.utils.log import get_task_logger
+# from server.settings.components import config
+from pathlib import Path, PurePath
+from decouple import AutoConfig
+import logging
+
+
+logger = logging.getLogger('My_logger')
+
+# @after_setup_logger.connect
+def conf_celery_logger(logger, **kwargs):
+ formatter = logging.Formatter(datefmt="%Y.%m.%d %H:%M:%S",
+ fmt='%(asctime)s | %(levelname)s | '
+ 'process: %(process)d | '
+ 'module name: %(name)s | '
+ 'func name: %(funcName)s | '
+ 'line number: %(lineno)s | '
+ 'message: %(message)s',)
+ handler = logging.FileHandler('log.log')
+ handler.setLevel('DEBUG')
+ handler.setFormatter(formatter)
+ logger.addHandler(handler)
+ logger.setLevel('DEBUG')
+
+
+conf_celery_logger(logger)
+
+# BASE_DIR = Path.cwd().parent.parent
+BASE_DIR = PurePath(__file__).parent
+
+config = AutoConfig(search_path=BASE_DIR.joinpath('config'))
+
+RABBITMQ_DEFAULT_USER = config('RABBITMQ_DEFAULT_USER')
+RABBITMQ_DEFAULT_PASS = config('RABBITMQ_DEFAULT_PASS')
+RABBITMQ_PORT = config('RABBITMQ_PORT', cast=int, default=5672)
+RABBITMQ_HOST = config('RABBITMQ_HOST')
+
+
+celery_app = Celery(
+ 'tasks',
+ broker='amqp://{login}:{password}@{host}:{port}'.format(
+ login=RABBITMQ_DEFAULT_USER,
+ password=RABBITMQ_DEFAULT_PASS,
+ host=RABBITMQ_HOST,
+ port=RABBITMQ_PORT,
+ ),
+ backend='rpc://',
+)
+
+celery_app.config_from_object('config.celeryconfig')
+# celery_app.conf.update({'worker_hijack_root_logger': False})
+
+celery_app.autodiscover_tasks()
+
+logger.info(f"{__name__} imported {celery_app.conf['worker_hijack_root_logger']}")
diff --git a/celery_log_docker/config/.env b/celery_log_docker/config/.env
new file mode 100644
index 0000000..d50c473
--- /dev/null
+++ b/celery_log_docker/config/.env
@@ -0,0 +1,7 @@
+RABBITMQ_DEFAULT_USER=rabbit_admin
+RABBITMQ_DEFAULT_PASS=rabbit_password
+RABBITMQ_PORT=5672
+RABBITMQ_HOST=rabbitmq_host
+
+# =======Celery worker as root======
+#C_FORCE_ROOT=true
diff --git a/celery_log_docker/config/__init__.py b/celery_log_docker/config/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/celery_log_docker/config/celeryconfig.py b/celery_log_docker/config/celeryconfig.py
new file mode 100644
index 0000000..05dbfdc
--- /dev/null
+++ b/celery_log_docker/config/celeryconfig.py
@@ -0,0 +1,2 @@
+# worker_hijack_root_logger = False
+# worker_redirect_stdouts = True
diff --git a/celery_log_docker/docker-compose.yml b/celery_log_docker/docker-compose.yml
new file mode 100644
index 0000000..d100e9c
--- /dev/null
+++ b/celery_log_docker/docker-compose.yml
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+version: "3.7"
+
+networks:
+ # Network for your internals, use it by default:
+ telebot_network:
+ name:
+ celery_log_network
+ ipam:
+ config:
+ - subnet: 200.20.0.0/24
+
+services:
+
+ rabbitmq:
+ hostname: rabbitmq_host
+ image: rabbitmq:3.8.18-management-alpine
+ container_name: celery_rabbit
+ env_file: config/.env
+ restart: unless-stopped
+ networks:
+ telebot_network:
+ ipv4_address: 200.20.0.11
+ ports:
+ - 15672:15672
+ - 5672:5672
+
+ web:
+ image: "celery_log"
+ container_name: celery_log_app
+ build:
+ context: .
+ dockerfile: Dockerfile
+ restart: unless-stopped
+ volumes:
+ - .:/code
+ networks:
+ telebot_network:
+ ipv4_address: 200.20.0.12
+ env_file: ./config/.env
+ command: >
+ bash -c "celery --app=main:app worker --concurrency=1 --loglevel=info --logfile=celery.log"
+
+ worker:
+ container_name: celery_log_worker
+ image: "celery_log"
+ command: >
+ bash -c "celery --app=main:app worker --concurrency=1 --loglevel=info --logfile=celery.log"
+ env_file: config/.env
+ volumes:
+ - .:/code
+ depends_on:
+ - rabbitmq
+ - web
+ restart: unless-stopped
+ networks:
+ telebot_network:
+ ipv4_address: 200.20.0.14
+
+
+
diff --git a/celery_log_docker/log.log b/celery_log_docker/log.log
new file mode 100644
index 0000000..9afe5f0
--- /dev/null
+++ b/celery_log_docker/log.log
@@ -0,0 +1,16 @@
+2021.09.06 17:05:09 | INFO | process: 1 | module name: My_logger | func name: | line number: 57 | message: celery_config imported True
+2021.09.06 17:05:09 | INFO | process: 1 | module name: My_logger | func name: | line number: 25 | message: main imported
+2021.09.06 17:05:53 | INFO | process: 15 | module name: My_logger | func name: | line number: 57 | message: celery_config imported True
+2021.09.06 17:05:53 | INFO | process: 15 | module name: My_logger | func name: | line number: 25 | message: main imported
+2021.09.06 17:06:10 | INFO | process: 8 | module name: My_logger | func name: test | line number: 17 | message: WE ARE HERE
+2021.09.06 17:06:10 | INFO | process: 8 | module name: My_logger | func name: test | line number: 20 | message: 4
+2021.09.06 17:07:19 | INFO | process: 1 | module name: My_logger | func name: | line number: 57 | message: celery_config imported True
+2021.09.06 17:07:19 | INFO | process: 1 | module name: My_logger | func name: | line number: 25 | message: main imported
+2021.09.06 17:07:19 | INFO | process: 1 | module name: My_logger | func name: | line number: 57 | message: celery_config imported True
+2021.09.06 17:07:19 | INFO | process: 1 | module name: My_logger | func name: | line number: 25 | message: main imported
+2021.09.06 17:07:32 | INFO | process: 9 | module name: My_logger | func name: | line number: 57 | message: celery_config imported True
+2021.09.06 17:07:32 | INFO | process: 9 | module name: My_logger | func name: | line number: 25 | message: main imported
+2021.09.06 17:07:42 | INFO | process: 8 | module name: My_logger | func name: test | line number: 17 | message: WE ARE HERE
+2021.09.06 17:07:42 | INFO | process: 8 | module name: My_logger | func name: test | line number: 20 | message: 4
+2021.09.06 17:08:05 | INFO | process: 9 | module name: My_logger | func name: test | line number: 17 | message: WE ARE HERE
+2021.09.06 17:08:05 | INFO | process: 9 | module name: My_logger | func name: test | line number: 20 | message: 4
diff --git a/celery_log_docker/main.py b/celery_log_docker/main.py
new file mode 100644
index 0000000..859f716
--- /dev/null
+++ b/celery_log_docker/main.py
@@ -0,0 +1,25 @@
+import logging
+
+from celery_config import celery_app as app
+from celery.utils.log import get_task_logger
+
+
+#logger = get_task_logger('My_logger')
+
+logger = logging.getLogger('My_logger')
+
+# logger.addHandler(handler)
+# logger.setLevel('DEBUG')
+
+
+@app.task()
+def test(x: int, y: int) -> int:
+ logger.info('WE ARE HERE')
+ print(x + y)
+ result = x + y
+ logger.info(result)
+ return result
+
+
+# test(6, 8)
+logger.info(f'{__name__} imported')
diff --git a/celery_log_docker/poetry.lock b/celery_log_docker/poetry.lock
new file mode 100644
index 0000000..739ebd2
--- /dev/null
+++ b/celery_log_docker/poetry.lock
@@ -0,0 +1,456 @@
+[[package]]
+name = "amqp"
+version = "5.0.6"
+description = "Low-level AMQP client for Python (fork of amqplib)."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+vine = "5.0.0"
+
+[[package]]
+name = "appnope"
+version = "0.1.2"
+description = "Disable App Nap on macOS >= 10.9"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "backcall"
+version = "0.2.0"
+description = "Specifications for callback functions passed in to an API"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "billiard"
+version = "3.6.4.0"
+description = "Python multiprocessing fork with improvements and bugfixes"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "celery"
+version = "5.1.2"
+description = "Distributed Task Queue."
+category = "main"
+optional = false
+python-versions = ">=3.6,"
+
+[package.dependencies]
+billiard = ">=3.6.4.0,<4.0"
+click = ">=7.0,<8.0"
+click-didyoumean = ">=0.0.3"
+click-plugins = ">=1.1.1"
+click-repl = ">=0.1.6"
+kombu = ">=5.1.0,<6.0"
+pytz = ">0.0-dev"
+vine = ">=5.0.0,<6.0"
+
+[package.extras]
+arangodb = ["pyArango (>=1.3.2)"]
+auth = ["cryptography"]
+azureblockblob = ["azure-storage-blob (==12.6.0)"]
+brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"]
+cassandra = ["cassandra-driver (<3.21.0)"]
+consul = ["python-consul2"]
+cosmosdbsql = ["pydocumentdb (==2.3.2)"]
+couchbase = ["couchbase (>=3.0.0)"]
+couchdb = ["pycouchdb"]
+django = ["Django (>=1.11)"]
+dynamodb = ["boto3 (>=1.9.178)"]
+elasticsearch = ["elasticsearch"]
+eventlet = ["eventlet (>=0.26.1)"]
+gevent = ["gevent (>=1.0.0)"]
+librabbitmq = ["librabbitmq (>=1.5.0)"]
+memcache = ["pylibmc"]
+mongodb = ["pymongo[srv] (>=3.3.0)"]
+msgpack = ["msgpack"]
+pymemcache = ["python-memcached"]
+pyro = ["pyro4"]
+pytest = ["pytest-celery"]
+redis = ["redis (>=3.2.0)"]
+s3 = ["boto3 (>=1.9.125)"]
+slmq = ["softlayer-messaging (>=1.0.3)"]
+solar = ["ephem"]
+sqlalchemy = ["sqlalchemy"]
+sqs = ["boto3 (>=1.9.125)", "pycurl (==7.43.0.5)"]
+tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"]
+yaml = ["PyYAML (>=3.10)"]
+zookeeper = ["kazoo (>=1.3.1)"]
+zstd = ["zstandard"]
+
+[[package]]
+name = "click"
+version = "7.1.2"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "click-didyoumean"
+version = "0.0.3"
+description = "Enable git-like did-you-mean feature in click."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = "*"
+
+[[package]]
+name = "click-plugins"
+version = "1.1.1"
+description = "An extension module for click to enable registering CLI commands via setuptools entry-points."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = ">=4.0"
+
+[package.extras]
+dev = ["pytest (>=3.6)", "pytest-cov", "wheel", "coveralls"]
+
+[[package]]
+name = "click-repl"
+version = "0.2.0"
+description = "REPL plugin for Click"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = "*"
+prompt-toolkit = "*"
+six = "*"
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "decorator"
+version = "5.0.9"
+description = "Decorators for Humans"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "ipython"
+version = "7.27.0"
+description = "IPython: Productive Interactive Computing"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+appnope = {version = "*", markers = "sys_platform == \"darwin\""}
+backcall = "*"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+decorator = "*"
+jedi = ">=0.16"
+matplotlib-inline = "*"
+pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
+pickleshare = "*"
+prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
+pygments = "*"
+traitlets = ">=4.2"
+
+[package.extras]
+all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"]
+doc = ["Sphinx (>=1.3)"]
+kernel = ["ipykernel"]
+nbconvert = ["nbconvert"]
+nbformat = ["nbformat"]
+notebook = ["notebook", "ipywidgets"]
+parallel = ["ipyparallel"]
+qtconsole = ["qtconsole"]
+test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"]
+
+[[package]]
+name = "jedi"
+version = "0.18.0"
+description = "An autocompletion tool for Python that can be used for text editors."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+parso = ">=0.8.0,<0.9.0"
+
+[package.extras]
+qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<6.0.0)"]
+
+[[package]]
+name = "kombu"
+version = "5.1.0"
+description = "Messaging library for Python."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+amqp = ">=5.0.6,<6.0.0"
+vine = "*"
+
+[package.extras]
+azureservicebus = ["azure-servicebus (>=7.0.0)"]
+azurestoragequeues = ["azure-storage-queue"]
+consul = ["python-consul (>=0.6.0)"]
+librabbitmq = ["librabbitmq (>=1.5.2)"]
+mongodb = ["pymongo (>=3.3.0)"]
+msgpack = ["msgpack"]
+pyro = ["pyro4"]
+qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"]
+redis = ["redis (>=3.3.11)"]
+slmq = ["softlayer-messaging (>=1.0.3)"]
+sqlalchemy = ["sqlalchemy"]
+sqs = ["boto3 (>=1.4.4)", "pycurl (==7.43.0.2)", "urllib3 (<1.26)"]
+yaml = ["PyYAML (>=3.10)"]
+zookeeper = ["kazoo (>=1.3.1)"]
+
+[[package]]
+name = "matplotlib-inline"
+version = "0.1.2"
+description = "Inline Matplotlib backend for Jupyter"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+traitlets = "*"
+
+[[package]]
+name = "parso"
+version = "0.8.2"
+description = "A Python Parser"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+testing = ["docopt", "pytest (<6.0.0)"]
+
+[[package]]
+name = "pexpect"
+version = "4.8.0"
+description = "Pexpect allows easy control of interactive console applications."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+name = "pickleshare"
+version = "0.7.5"
+description = "Tiny 'shelve'-like database with concurrency support"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.20"
+description = "Library for building powerful interactive command lines in Python"
+category = "main"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+wcwidth = "*"
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pygments"
+version = "2.10.0"
+description = "Pygments is a syntax highlighting package written in Python."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "python-decouple"
+version = "3.4"
+description = "Strict separation of settings from code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pytz"
+version = "2021.1"
+description = "World timezone definitions, modern and historical"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "traitlets"
+version = "5.1.0"
+description = "Traitlets Python configuration system"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+test = ["pytest"]
+
+[[package]]
+name = "vine"
+version = "5.0.0"
+description = "Promises, promises, promises."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "wcwidth"
+version = "0.2.5"
+description = "Measures the displayed width of unicode strings in a terminal"
+category = "main"
+optional = false
+python-versions = "*"
+
+[metadata]
+lock-version = "1.1"
+python-versions = "3.8.9"
+content-hash = "07d357235ac54ad608c3f4623bd553e9147112fde6995d1dcb900f2f2deeb68c"
+
+[metadata.files]
+amqp = [
+ {file = "amqp-5.0.6-py3-none-any.whl", hash = "sha256:493a2ac6788ce270a2f6a765b017299f60c1998f5a8617908ee9be082f7300fb"},
+ {file = "amqp-5.0.6.tar.gz", hash = "sha256:03e16e94f2b34c31f8bf1206d8ddd3ccaa4c315f7f6a1879b7b1210d229568c2"},
+]
+appnope = [
+ {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"},
+ {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"},
+]
+backcall = [
+ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
+ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
+]
+billiard = [
+ {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"},
+ {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"},
+]
+celery = [
+ {file = "celery-5.1.2-py3-none-any.whl", hash = "sha256:9dab2170b4038f7bf10ef2861dbf486ddf1d20592290a1040f7b7a1259705d42"},
+ {file = "celery-5.1.2.tar.gz", hash = "sha256:8d9a3de9162965e97f8e8cc584c67aad83b3f7a267584fa47701ed11c3e0d4b0"},
+]
+click = [
+ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
+ {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+]
+click-didyoumean = [
+ {file = "click-didyoumean-0.0.3.tar.gz", hash = "sha256:112229485c9704ff51362fe34b2d4f0b12fc71cc20f6d2b3afabed4b8bfa6aeb"},
+]
+click-plugins = [
+ {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"},
+ {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"},
+]
+click-repl = [
+ {file = "click-repl-0.2.0.tar.gz", hash = "sha256:cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8"},
+ {file = "click_repl-0.2.0-py3-none-any.whl", hash = "sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+decorator = [
+ {file = "decorator-5.0.9-py3-none-any.whl", hash = "sha256:6e5c199c16f7a9f0e3a61a4a54b3d27e7dad0dbdde92b944426cb20914376323"},
+ {file = "decorator-5.0.9.tar.gz", hash = "sha256:72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5"},
+]
+ipython = [
+ {file = "ipython-7.27.0-py3-none-any.whl", hash = "sha256:75b5e060a3417cf64f138e0bb78e58512742c57dc29db5a5058a2b1f0c10df02"},
+ {file = "ipython-7.27.0.tar.gz", hash = "sha256:58b55ebfdfa260dad10d509702dc2857cb25ad82609506b070cf2d7b7df5af13"},
+]
+jedi = [
+ {file = "jedi-0.18.0-py2.py3-none-any.whl", hash = "sha256:18456d83f65f400ab0c2d3319e48520420ef43b23a086fdc05dff34132f0fb93"},
+ {file = "jedi-0.18.0.tar.gz", hash = "sha256:92550a404bad8afed881a137ec9a461fed49eca661414be45059329614ed0707"},
+]
+kombu = [
+ {file = "kombu-5.1.0-py3-none-any.whl", hash = "sha256:e2dedd8a86c9077c350555153825a31e456a0dc20c15d5751f00137ec9c75f0a"},
+ {file = "kombu-5.1.0.tar.gz", hash = "sha256:01481d99f4606f6939cdc9b637264ed353ee9e3e4f62cfb582324142c41a572d"},
+]
+matplotlib-inline = [
+ {file = "matplotlib-inline-0.1.2.tar.gz", hash = "sha256:f41d5ff73c9f5385775d5c0bc13b424535c8402fe70ea8210f93e11f3683993e"},
+ {file = "matplotlib_inline-0.1.2-py3-none-any.whl", hash = "sha256:5cf1176f554abb4fa98cb362aa2b55c500147e4bdbb07e3fda359143e1da0811"},
+]
+parso = [
+ {file = "parso-0.8.2-py2.py3-none-any.whl", hash = "sha256:a8c4922db71e4fdb90e0d0bc6e50f9b273d3397925e5e60a717e719201778d22"},
+ {file = "parso-0.8.2.tar.gz", hash = "sha256:12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398"},
+]
+pexpect = [
+ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"},
+ {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"},
+]
+pickleshare = [
+ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"},
+ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
+]
+prompt-toolkit = [
+ {file = "prompt_toolkit-3.0.20-py3-none-any.whl", hash = "sha256:6076e46efae19b1e0ca1ec003ed37a933dc94b4d20f486235d436e64771dcd5c"},
+ {file = "prompt_toolkit-3.0.20.tar.gz", hash = "sha256:eb71d5a6b72ce6db177af4a7d4d7085b99756bf656d98ffcc4fecd36850eea6c"},
+]
+ptyprocess = [
+ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+pygments = [
+ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
+ {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
+]
+python-decouple = [
+ {file = "python-decouple-3.4.tar.gz", hash = "sha256:2e5adb0263a4f963b58d7407c4760a2465d464ee212d733e2a2c179e54c08d8f"},
+ {file = "python_decouple-3.4-py3-none-any.whl", hash = "sha256:a8268466e6389a639a20deab9d880faee186eb1eb6a05e54375bdf158d691981"},
+]
+pytz = [
+ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
+ {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+]
+six = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+traitlets = [
+ {file = "traitlets-5.1.0-py3-none-any.whl", hash = "sha256:03f172516916220b58c9f19d7f854734136dd9528103d04e9bf139a92c9f54c4"},
+ {file = "traitlets-5.1.0.tar.gz", hash = "sha256:bd382d7ea181fbbcce157c133db9a829ce06edffe097bcf3ab945b435452b46d"},
+]
+vine = [
+ {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"},
+ {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"},
+]
+wcwidth = [
+ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
+ {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
+]
diff --git a/celery_log_docker/pyproject.toml b/celery_log_docker/pyproject.toml
new file mode 100644
index 0000000..5c3423a
--- /dev/null
+++ b/celery_log_docker/pyproject.toml
@@ -0,0 +1,17 @@
+[tool.poetry]
+name = "celery_log"
+version = "0.1.0"
+description = "testing log for celery in file"
+authors = ["Dmitry Afanasyev "]
+
+[tool.poetry.dependencies]
+python = "3.8.9"
+celery = "^5.1.2"
+ipython = "^7.25"
+python-decouple = "^3.3"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff --git a/python-poetry/pyproject.toml b/python-poetry/pyproject.toml
index ff71f4d..32f30dd 100644
--- a/python-poetry/pyproject.toml
+++ b/python-poetry/pyproject.toml
@@ -20,25 +20,7 @@ pandas = "1.0.3"
flask = "1.1.2"
sqlalchemy = "1.3.22"
-django = "^3.1"
-django-split-settings = "^1.0"
-django-health-check = "^3.16"
-celery = "^5.0.4"
-django-celery-results = "^2.0.0"
-django-celery-beat = "^2.1.0"
-eventlet = "0.30.0"
-django-constance="2.8.0"
-redis="3.5.3"
-django-picklefield="3.0.1"
-docutils="0.16"
-whitenoise = "^5.2.0"
-gunicorn = "^20.0"
-bcrypt = "^3.2"
-django-debug-toolbar = "^3.2"
-django-querycount = "^0.7"
-django-extra-checks = "^0.8"
-django-coverage-plugin = "^1.8"
-nplusone = "^1.0"
+
[tool.poetry.dev-dependencies]