mirror of
https://github.com/task-17-lct/backend.git
synced 2024-11-27 12:43:44 +03:00
added periodic tasks
This commit is contained in:
parent
8f80e65261
commit
bd4dbfb85a
|
@ -2,3 +2,4 @@ DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/passfinder
|
||||||
CELERY_BROKER_URL=redis://localhost:6379/0
|
CELERY_BROKER_URL=redis://localhost:6379/0
|
||||||
REDIS_URL=redis://localhost:6379/1
|
REDIS_URL=redis://localhost:6379/1
|
||||||
USE_DOCKER=no
|
USE_DOCKER=no
|
||||||
|
YANDEX_TOKEN=
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import environ
|
import environ
|
||||||
import structlog
|
import structlog
|
||||||
|
from celery.schedules import crontab
|
||||||
from urllib3.connectionpool import InsecureRequestWarning
|
from urllib3.connectionpool import InsecureRequestWarning
|
||||||
|
|
||||||
ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
|
ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
|
||||||
|
@ -302,6 +303,18 @@
|
||||||
"schedule": timedelta(seconds=5),
|
"schedule": timedelta(seconds=5),
|
||||||
"options": {"expires": 1},
|
"options": {"expires": 1},
|
||||||
},
|
},
|
||||||
|
"check_temperature": {
|
||||||
|
"task": "passfinder.events.tasks.check_temperature",
|
||||||
|
"schedule": crontab(
|
||||||
|
minute="0", hour="3", day_of_week="*", day_of_month="*", month_of_year="*"
|
||||||
|
),
|
||||||
|
},
|
||||||
|
"precalculate_nearest_points": {
|
||||||
|
"task": "passfinder.recomendations.tasks.run_precalc",
|
||||||
|
"schedule": crontab(
|
||||||
|
minute="0", hour="7", day_of_week="*", day_of_month="*", month_of_year="*"
|
||||||
|
),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
# DRF
|
# DRF
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
|
@ -363,3 +376,6 @@
|
||||||
"password": env("CLICKHOUSE_REDIS_PASSWORD", default=None),
|
"password": env("CLICKHOUSE_REDIS_PASSWORD", default=None),
|
||||||
"socket_timeout": 10,
|
"socket_timeout": 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
YANDEX_TOKEN = env("YANDEX_TOKEN", default="")
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 4.2.1 on 2023-05-27 15:36
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("events", "0026_baseuserroutedatepoint_userroute_and_more"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="city",
|
||||||
|
name="temperature",
|
||||||
|
field=models.IntegerField(default=20),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="city",
|
||||||
|
name="weather_condition",
|
||||||
|
field=models.CharField(default="clear", max_length=250),
|
||||||
|
),
|
||||||
|
]
|
|
@ -42,6 +42,8 @@ class City(OIDModel):
|
||||||
)
|
)
|
||||||
lon = models.FloatField(default=0, db_index=True)
|
lon = models.FloatField(default=0, db_index=True)
|
||||||
lat = models.FloatField(default=0, db_index=True)
|
lat = models.FloatField(default=0, db_index=True)
|
||||||
|
weather_condition = models.CharField(default="clear", max_length=250)
|
||||||
|
temperature = models.IntegerField(default=20)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def location(self):
|
def location(self):
|
||||||
|
|
19
passfinder/events/services.py
Normal file
19
passfinder/events/services.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
api_url = "https://api.weather.yandex.ru/v2/forecast"
|
||||||
|
|
||||||
|
|
||||||
|
def get_position_weather(lat: float, lon: float) -> (int, str):
|
||||||
|
url = api_url + f"?lat={lat}&lon={lon}&lang=ru_RU&limit=1&hours=false"
|
||||||
|
response = requests.get(
|
||||||
|
url=url, headers={"X-Yandex-API-Key": settings.YANDEX_TOKEN}
|
||||||
|
)
|
||||||
|
temp_feels = 20
|
||||||
|
weather = "clear"
|
||||||
|
if response.status_code == 200:
|
||||||
|
data = response.json()
|
||||||
|
temp_feels = data["forecasts"][0]["parts"]["day"]["feels_like"]
|
||||||
|
weather = data["forecasts"][0]["parts"]["day_short"]["condition"]
|
||||||
|
return temp_feels, weather
|
15
passfinder/events/tasks.py
Normal file
15
passfinder/events/tasks.py
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
from celery import shared_task
|
||||||
|
|
||||||
|
from passfinder.events.models import City
|
||||||
|
from passfinder.events.services import get_position_weather
|
||||||
|
|
||||||
|
api_url = "https://api.weather.yandex.ru/v2/forecast"
|
||||||
|
|
||||||
|
|
||||||
|
@shared_task
|
||||||
|
def check_temperature():
|
||||||
|
for city in City.objects.all():
|
||||||
|
temperature, weather_condition = get_position_weather(city.lat, city.lon)
|
||||||
|
city.temperature = temperature
|
||||||
|
city.weather_condition = weather_condition
|
||||||
|
city.save()
|
7
passfinder/recomendations/tasks.py
Normal file
7
passfinder/recomendations/tasks.py
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
from celery import shared_task
|
||||||
|
|
||||||
|
|
||||||
|
@shared_task
|
||||||
|
def run_precalc():
|
||||||
|
# TODO: add precal here
|
||||||
|
...
|
84
poetry.lock
generated
84
poetry.lock
generated
|
@ -760,6 +760,24 @@ files = [
|
||||||
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
|
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "deprecated"
|
||||||
|
version = "1.2.13"
|
||||||
|
description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
|
files = [
|
||||||
|
{file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"},
|
||||||
|
{file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
wrapt = ">=1.10,<2"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dill"
|
name = "dill"
|
||||||
version = "0.3.6"
|
version = "0.3.6"
|
||||||
|
@ -2067,21 +2085,21 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "networkx"
|
name = "networkx"
|
||||||
version = "3.1"
|
version = "2.8.8"
|
||||||
description = "Python package for creating and manipulating graphs and networks"
|
description = "Python package for creating and manipulating graphs and networks"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"},
|
{file = "networkx-2.8.8-py3-none-any.whl", hash = "sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524"},
|
||||||
{file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"},
|
{file = "networkx-2.8.8.tar.gz", hash = "sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"]
|
default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"]
|
||||||
developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"]
|
developer = ["mypy (>=0.982)", "pre-commit (>=2.20)"]
|
||||||
doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"]
|
doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (>=5.2)", "sphinx-gallery (>=0.11)", "texext (>=0.6.6)"]
|
||||||
extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"]
|
extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"]
|
||||||
test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"]
|
test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2782,6 +2800,23 @@ text-unidecode = ">=1.3"
|
||||||
[package.extras]
|
[package.extras]
|
||||||
unidecode = ["Unidecode (>=1.1.1)"]
|
unidecode = ["Unidecode (>=1.1.1)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "python-tsp"
|
||||||
|
version = "0.3.1"
|
||||||
|
description = "Simple library to solve the Traveling Salesperson Problem in pure Python."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7.1,<4.0.0"
|
||||||
|
files = [
|
||||||
|
{file = "python_tsp-0.3.1-py3-none-any.whl", hash = "sha256:3af48a471505b392177b556a991203b95b1a2011cd9d66a7ca709a8a59d24bce"},
|
||||||
|
{file = "python_tsp-0.3.1.tar.gz", hash = "sha256:e113daacc71987621718e5895817dfd50f3b76b87d5d50f4e118550c8c4a4423"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
numpy = "*"
|
||||||
|
requests = ">=2.28.0,<3.0.0"
|
||||||
|
tsplib95 = ">=0.7.1,<0.8.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pytz"
|
name = "pytz"
|
||||||
version = "2022.7.1"
|
version = "2022.7.1"
|
||||||
|
@ -3216,6 +3251,21 @@ files = [
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
mpmath = ">=0.19"
|
mpmath = ">=0.19"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tabulate"
|
||||||
|
version = "0.8.10"
|
||||||
|
description = "Pretty-print tabular data"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
|
files = [
|
||||||
|
{file = "tabulate-0.8.10-py3-none-any.whl", hash = "sha256:0ba055423dbaa164b9e456abe7920c5e8ed33fcc16f6d1b2f2d152c8e1e8b4fc"},
|
||||||
|
{file = "tabulate-0.8.10.tar.gz", hash = "sha256:6c57f3f3dd7ac2782770155f3adb2db0b1a269637e42f27599925e64b114f519"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
widechars = ["wcwidth"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "2.3.0"
|
version = "2.3.0"
|
||||||
|
@ -3489,6 +3539,24 @@ torchhub = ["filelock", "huggingface-hub (>=0.14.1,<1.0)", "importlib-metadata",
|
||||||
video = ["av (==9.2.0)", "decord (==0.6.0)"]
|
video = ["av (==9.2.0)", "decord (==0.6.0)"]
|
||||||
vision = ["Pillow"]
|
vision = ["Pillow"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tsplib95"
|
||||||
|
version = "0.7.1"
|
||||||
|
description = "TSPLIB95 works with TSPLIB95 files."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "tsplib95-0.7.1-py2.py3-none-any.whl", hash = "sha256:c481638e293baaa62134b491477aa5b2681e552e4dc28a6106ca1e157ae59184"},
|
||||||
|
{file = "tsplib95-0.7.1.tar.gz", hash = "sha256:3da80175dfb0478b967b87c508f75def47371188b6401b719441f2cedc817e00"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
Click = ">=6.0"
|
||||||
|
Deprecated = ">=1.2.9,<1.3.0"
|
||||||
|
networkx = ">=2.1,<3.0"
|
||||||
|
tabulate = ">=0.8.7,<0.9.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "types-pytz"
|
name = "types-pytz"
|
||||||
version = "2023.3.0.0"
|
version = "2023.3.0.0"
|
||||||
|
@ -3914,4 +3982,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.8"
|
python-versions = "^3.8"
|
||||||
content-hash = "6d0f15cfcbd7a0bdc564f1bb4b7f6f8c1c30128196b26b2de4929168725dde53"
|
content-hash = "34dfa67fe4a058d9c846306eb3e3392d4c55862f6ea060c40131f3f6d5566ca3"
|
||||||
|
|
|
@ -61,6 +61,7 @@ bitsandbytes = "^0.39.0"
|
||||||
transformers = "^4.29.2"
|
transformers = "^4.29.2"
|
||||||
peft = "^0.3.0"
|
peft = "^0.3.0"
|
||||||
gevent = "^22.10.2"
|
gevent = "^22.10.2"
|
||||||
|
python-tsp = "^0.3.1"
|
||||||
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user