Compare commits
No commits in common. "Redo_project_to_golang" and "main" have entirely different histories.
Redo_proje
...
main
43 changed files with 5018 additions and 0 deletions
165
.gitignore
vendored
Normal file
165
.gitignore
vendored
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
# ---> Python
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py,cover
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
#Pipfile.lock
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
#poetry.lock
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
#pdm.lock
|
||||||
|
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||||
|
# in version control.
|
||||||
|
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
||||||
|
.pdm.toml
|
||||||
|
.pdm-python
|
||||||
|
.pdm-build/
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
#.idea/
|
||||||
|
|
||||||
|
pyrightconfig.json
|
64
README.md
Normal file
64
README.md
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# f1tness_parser
|
||||||
|
|
||||||
|
Приложение для парсинга текстовых файлов тренировок
|
||||||
|
|
||||||
|
## Поддерживаемые записи
|
||||||
|
Работает с двумя категорями записей:
|
||||||
|
- Obsidian notes
|
||||||
|
- Apple notes
|
||||||
|
|
||||||
|
## Формат записей
|
||||||
|
Тренировки должны быть записаны в форматах:
|
||||||
|
### Obsisian notes
|
||||||
|
```
|
||||||
|
# 07.01.2025 (solo-2)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | --------------------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 77-86-91-86 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-11-10 |
|
||||||
|
| Жим от груди (рычаги) | 15х2-25х2-27.5х2-30х2 | 12-12-12-8 |
|
||||||
|
| Отведение руки в кроссовере из за спины | 9-11-12 | 12-12-12 |
|
||||||
|
| Кроссовер - отжимание на трицепс | 33 | 12-12-12-12 |
|
||||||
|
|
||||||
|
# 04.01.2025 (solo-1)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | --------- | -------------- |
|
||||||
|
| Подтягивания | | 9-7-5 |
|
||||||
|
| Тяга горизонтального блока | 55-59 | 12-12-12-10 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 30 | 10х2-10х2-10х2 |
|
||||||
|
| Жим гантелей лежа | 18х2-20х2 | 12-12-11 |
|
||||||
|
| Разведение рук в стороны (дельт машина) | 47 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77 | 12-12-12 |
|
||||||
|
|
||||||
|
```
|
||||||
|
### Apple notes
|
||||||
|
```
|
||||||
|
**21.08.2024 (с123-69)**
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|---|---|---|
|
||||||
|
|**Упражнение**|**Вес**|**Подходы**|
|
||||||
|
|Подтягивания|0-37-37|7-10-7|
|
||||||
|
|Тяга гантелей лежа на животе на скамье 80°|36-48|12-12-12-12|
|
||||||
|
|Тяга вертикального блока|59|10-9-10|
|
||||||
|
|Жим от груди сидя в тренажере (рычаги)|40-60-60|12-12-10|
|
||||||
|
|Баттерфляй|57|12-12-12|
|
||||||
|
||||
|
||||||
|
|
||||||
|
**19.08.2024 (с122-68)**
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|---|---|---|
|
||||||
|
|**Упражнение**|**Вес**|**Подходы**|
|
||||||
|
|Жим ногами|50-100-150-175|12-12-12-12-8|
|
||||||
|
|Румынская тяга|22х2|12-12-12|
|
||||||
|
|Разведение рук в стороны в тренажёре Дж|47|12-12-12|
|
||||||
|
|Жим гантелей сидя 80⁰|16х2|12-12-12|
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
|
||||||
|
**14.08.2024 (с121-67)**
|
||||||
|
```
|
||||||
|
|
0
api/__init__.py
Normal file
0
api/__init__.py
Normal file
5
api/proto/README.md
Normal file
5
api/proto/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Команда для генерации файлов
|
||||||
|
*Запускать надо из корня приложения*
|
||||||
|
```
|
||||||
|
python3 -m grpc_tools.protoc -Iapi/proto=api/proto --python_out=. --pyi_out=. --grpc_python_out=. api/proto/routes.proto
|
||||||
|
```
|
0
api/proto/__init__.py
Normal file
0
api/proto/__init__.py
Normal file
14
api/proto/routes.proto
Normal file
14
api/proto/routes.proto
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
service RouteApproaches {
|
||||||
|
rpc GetApproach(ApproachID) returns (Approach) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
message ApproachID {
|
||||||
|
int32 approachID = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Approach {
|
||||||
|
int32 reps = 1;
|
||||||
|
double weight = 2;
|
||||||
|
}
|
40
api/proto/routes_pb2.py
Normal file
40
api/proto/routes_pb2.py
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# NO CHECKED-IN PROTOBUF GENCODE
|
||||||
|
# source: api/proto/routes.proto
|
||||||
|
# Protobuf Python Version: 5.29.0
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
|
from google.protobuf import runtime_version as _runtime_version
|
||||||
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
|
from google.protobuf.internal import builder as _builder
|
||||||
|
_runtime_version.ValidateProtobufRuntimeVersion(
|
||||||
|
_runtime_version.Domain.PUBLIC,
|
||||||
|
5,
|
||||||
|
29,
|
||||||
|
0,
|
||||||
|
'',
|
||||||
|
'api/proto/routes.proto'
|
||||||
|
)
|
||||||
|
# @@protoc_insertion_point(imports)
|
||||||
|
|
||||||
|
_sym_db = _symbol_database.Default()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x61pi/proto/routes.proto\" \n\nApproachID\x12\x12\n\napproachID\x18\x01 \x01(\x05\"(\n\x08\x41pproach\x12\x0c\n\x04reps\x18\x01 \x01(\x05\x12\x0e\n\x06weight\x18\x02 \x01(\x01\x32:\n\x0fRouteApproaches\x12\'\n\x0bGetApproach\x12\x0b.ApproachID\x1a\t.Approach\"\x00\x62\x06proto3')
|
||||||
|
|
||||||
|
_globals = globals()
|
||||||
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
||||||
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'api.proto.routes_pb2', _globals)
|
||||||
|
if not _descriptor._USE_C_DESCRIPTORS:
|
||||||
|
DESCRIPTOR._loaded_options = None
|
||||||
|
_globals['_APPROACHID']._serialized_start=26
|
||||||
|
_globals['_APPROACHID']._serialized_end=58
|
||||||
|
_globals['_APPROACH']._serialized_start=60
|
||||||
|
_globals['_APPROACH']._serialized_end=100
|
||||||
|
_globals['_ROUTEAPPROACHES']._serialized_start=102
|
||||||
|
_globals['_ROUTEAPPROACHES']._serialized_end=160
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
19
api/proto/routes_pb2.pyi
Normal file
19
api/proto/routes_pb2.pyi
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import message as _message
|
||||||
|
from typing import ClassVar as _ClassVar, Optional as _Optional
|
||||||
|
|
||||||
|
DESCRIPTOR: _descriptor.FileDescriptor
|
||||||
|
|
||||||
|
class ApproachID(_message.Message):
|
||||||
|
__slots__ = ("approachID",)
|
||||||
|
APPROACHID_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
approachID: int
|
||||||
|
def __init__(self, approachID: _Optional[int] = ...) -> None: ...
|
||||||
|
|
||||||
|
class Approach(_message.Message):
|
||||||
|
__slots__ = ("reps", "weight")
|
||||||
|
REPS_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
WEIGHT_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
reps: int
|
||||||
|
weight: float
|
||||||
|
def __init__(self, reps: _Optional[int] = ..., weight: _Optional[float] = ...) -> None: ...
|
97
api/proto/routes_pb2_grpc.py
Normal file
97
api/proto/routes_pb2_grpc.py
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
||||||
|
"""Client and server classes corresponding to protobuf-defined services."""
|
||||||
|
import grpc
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
from api.proto import routes_pb2 as api_dot_proto_dot_routes__pb2
|
||||||
|
|
||||||
|
GRPC_GENERATED_VERSION = '1.70.0'
|
||||||
|
GRPC_VERSION = grpc.__version__
|
||||||
|
_version_not_supported = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
from grpc._utilities import first_version_is_lower
|
||||||
|
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
||||||
|
except ImportError:
|
||||||
|
_version_not_supported = True
|
||||||
|
|
||||||
|
if _version_not_supported:
|
||||||
|
raise RuntimeError(
|
||||||
|
f'The grpc package installed is at version {GRPC_VERSION},'
|
||||||
|
+ f' but the generated code in api/proto/routes_pb2_grpc.py depends on'
|
||||||
|
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
||||||
|
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
||||||
|
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RouteApproachesStub(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
def __init__(self, channel):
|
||||||
|
"""Constructor.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
channel: A grpc.Channel.
|
||||||
|
"""
|
||||||
|
self.GetApproach = channel.unary_unary(
|
||||||
|
'/RouteApproaches/GetApproach',
|
||||||
|
request_serializer=api_dot_proto_dot_routes__pb2.ApproachID.SerializeToString,
|
||||||
|
response_deserializer=api_dot_proto_dot_routes__pb2.Approach.FromString,
|
||||||
|
_registered_method=True)
|
||||||
|
|
||||||
|
|
||||||
|
class RouteApproachesServicer(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
def GetApproach(self, request, context):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||||
|
context.set_details('Method not implemented!')
|
||||||
|
raise NotImplementedError('Method not implemented!')
|
||||||
|
|
||||||
|
|
||||||
|
def add_RouteApproachesServicer_to_server(servicer, server):
|
||||||
|
rpc_method_handlers = {
|
||||||
|
'GetApproach': grpc.unary_unary_rpc_method_handler(
|
||||||
|
servicer.GetApproach,
|
||||||
|
request_deserializer=api_dot_proto_dot_routes__pb2.ApproachID.FromString,
|
||||||
|
response_serializer=api_dot_proto_dot_routes__pb2.Approach.SerializeToString,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
generic_handler = grpc.method_handlers_generic_handler(
|
||||||
|
'RouteApproaches', rpc_method_handlers)
|
||||||
|
server.add_generic_rpc_handlers((generic_handler,))
|
||||||
|
server.add_registered_method_handlers('RouteApproaches', rpc_method_handlers)
|
||||||
|
|
||||||
|
|
||||||
|
# This class is part of an EXPERIMENTAL API.
|
||||||
|
class RouteApproaches(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def GetApproach(request,
|
||||||
|
target,
|
||||||
|
options=(),
|
||||||
|
channel_credentials=None,
|
||||||
|
call_credentials=None,
|
||||||
|
insecure=False,
|
||||||
|
compression=None,
|
||||||
|
wait_for_ready=None,
|
||||||
|
timeout=None,
|
||||||
|
metadata=None):
|
||||||
|
return grpc.experimental.unary_unary(
|
||||||
|
request,
|
||||||
|
target,
|
||||||
|
'/RouteApproaches/GetApproach',
|
||||||
|
api_dot_proto_dot_routes__pb2.ApproachID.SerializeToString,
|
||||||
|
api_dot_proto_dot_routes__pb2.Approach.FromString,
|
||||||
|
options,
|
||||||
|
channel_credentials,
|
||||||
|
insecure,
|
||||||
|
call_credentials,
|
||||||
|
compression,
|
||||||
|
wait_for_ready,
|
||||||
|
timeout,
|
||||||
|
metadata,
|
||||||
|
_registered_method=True)
|
0
apple/__init__.py
Normal file
0
apple/__init__.py
Normal file
1545
apple/examples/full.txt
Normal file
1545
apple/examples/full.txt
Normal file
File diff suppressed because it is too large
Load diff
36
apple/examples/notes.txt
Normal file
36
apple/examples/notes.txt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
**21.08.2024 (с123-69)**
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|---|---|---|
|
||||||
|
|**Упражнение**|**Вес**|**Подходы**|
|
||||||
|
|Подтягивания|0-37-37|7-10-7|
|
||||||
|
|Тяга гантелей лежа на животе на скамье 80°|36-48|12-12-12-12|
|
||||||
|
|Тяга вертикального блока|59|10-9-10|
|
||||||
|
|Жим от груди сидя в тренажере (рычаги)|40-60-60|12-12-10|
|
||||||
|
|Баттерфляй|57|12-12-12|
|
||||||
|
||||
|
||||||
|
|
||||||
|
**19.08.2024 (с122-68)**
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|---|---|---|
|
||||||
|
|**Упражнение**|**Вес**|**Подходы**|
|
||||||
|
|Жим ногами|50-100-150-175|12-12-12-12-8|
|
||||||
|
|Румынская тяга|22х2|12-12-12|
|
||||||
|
|Разведение рук в стороны в тренажёре Дж|47|12-12-12|
|
||||||
|
|Жим гантелей сидя 80⁰|16х2|12-12-12|
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
|
||||||
|
|
||||||
|
**21.06.23 (с3)**
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
| ------------------------- | -------- | ----------- |
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| Гравитрон | 57-57-77 | 7-6-10 |
|
||||||
|
| Тяга гантелей в наклоне | 7-8-8-8 | 13-13-12-12 |
|
||||||
|
| Отжимания | | 8-6-7-5.5 |
|
||||||
|
| Тяга ногами | 41 | 12-12-12-12 |
|
||||||
|
| Гиперэкстензия | 0-10-10 | 12-12-12 |
|
||||||
|
| Подъем коленей на турнике | | 10-10-10 |
|
572
apple/mapper.py
Normal file
572
apple/mapper.py
Normal file
|
@ -0,0 +1,572 @@
|
||||||
|
unique_apple_exercises_mapper = {
|
||||||
|
"Батерфляй": "Баттерфляй",
|
||||||
|
"Баттерфляй": "Баттерфляй",
|
||||||
|
"Баттерфляй дю": "Баттерфляй",
|
||||||
|
"Бицепс на лавке 45⁰": "Подъем гантелей на бицепс сидя",
|
||||||
|
"Болгарский присед": "Болгарские сплит-приседения",
|
||||||
|
"Брусья": "Брусья",
|
||||||
|
"Брусья (гравитрон)": "Брусья",
|
||||||
|
"Брусья в тренажере": "Брусья",
|
||||||
|
"Брусья прямые ноги": "Брусья",
|
||||||
|
"Брусья узким хватом": "Брусья",
|
||||||
|
"Брусья узким хватом за": "Брусья",
|
||||||
|
"Брусья широким хватом": "Брусья",
|
||||||
|
"Брусья-прямые ноги": "Брусья",
|
||||||
|
"ГАК машина": "Жим ногами (гакк-машина)",
|
||||||
|
"Гакк машина": "Жим ногами (гакк-машина)",
|
||||||
|
"Гакк присед": "Жим ногами (гакк-машина)",
|
||||||
|
"Гантели": "Подъем гантелей на бицепс стоя",
|
||||||
|
"Гантели к поясу лежа на скамье": "Тяга гантелей на скамье",
|
||||||
|
"Гантели молот": "Гантели молот",
|
||||||
|
"Гантели на лавках": "Жим гантелей сидя",
|
||||||
|
"Гантели-молот": "Гантели молот",
|
||||||
|
"Гипекстензия": "Гиперэкстензия",
|
||||||
|
"Гиперэкстензия": "Гиперэкстензия",
|
||||||
|
"Горизонтальна тяга на себя": "Тяга горизонтального блока",
|
||||||
|
"Горизонтальная тяга блока": "Тяга горизонтального блока",
|
||||||
|
"Гравитрон": "Гравитрон",
|
||||||
|
"Гравитрор": "Гравитрон",
|
||||||
|
"Гребная тяга": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга с упором в грудь": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга с упором в грудь как": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга с упором на грудь": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга сидя (одна рука)": "Гребная тяга с упором в грудь (по очереди)",
|
||||||
|
"Гребная тяга сидя одной рукой": "Гребная тяга с упором в грудь (по очереди)",
|
||||||
|
"Гребная тяга сидя с упором в грудт": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга сидя с упором в грудь": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга сидя с упором в грудь (одной рукой рычаг)": "Гребная тяга с упором в грудь (по очереди)",
|
||||||
|
"Гребная тяга\xa0 упором в грудьс": "Гребная тяга с упором в грудь",
|
||||||
|
"Жим в тренажере вверх": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим в тренажере на плечи блочный (3х12)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим в тренажёре на плечи (силовой тренажёр: жим сидя)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим вверх 80⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей 45⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей 60⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей 80⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей 90⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей вверх 80⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей вверх 90⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей вверх сидя 90⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей лежа": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа 15⁰": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа 30⁰": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа на скамье": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лёжа": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лёжа на скамье": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей на скамье": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей на скамье 45⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей сидя": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя 80⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя 90⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя на скамейке": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей стоя": "Подъем гантелей на бицепс стоя",
|
||||||
|
"Жим л груди в тренажёре": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим лежа": "Жим штанги лежа",
|
||||||
|
"Жим ногами": "Жим ногами",
|
||||||
|
"Жим ногами (3х15)": "Жим ногами",
|
||||||
|
"Жим ногами (медленно вниз)": "Жим ногами",
|
||||||
|
"Жим ногами лежа": "Жим ногами",
|
||||||
|
"Жим ногами медленно": "Жим ногами",
|
||||||
|
"Жим от груди": "Жим штанги лежа",
|
||||||
|
"Жим от груди (сидя, тренажёр)": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди в тренажере сидя": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди в тренажёре (кирпичики)": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди сидя": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди сидя (блинчики)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя в тренажере": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди сидя в тренажере (около трицепс машины)": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди сидя в тренажере (рычаги)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя в тренажере рычаги": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя в тренажёре": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди сидя в тренажёре (блинчики)": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Жим от груди сидя в тренажёре (рычаги)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от плеч (рычаги)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх в тренажёре": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх сидя": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх сидя 80⁰": "Жим гантелей сидя",
|
||||||
|
"Жим от плеч вверх сидя в тренажере": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч сидя": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч сидя (рычаги)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч сидя зэ": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч сидя хз": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плечей вверх": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим плечами вверх сидя": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим сидя 45⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим штанги 45⁰": "Жим штанги сидя (45 градусов)",
|
||||||
|
"Жим штанги в наклоне": "Тяга штанги в наклоне",
|
||||||
|
"Жим штанги лежа": "Жим штанги лежа",
|
||||||
|
"Жим штанги сидя 45⁰": "Жим штанги сидя (45 градусов)",
|
||||||
|
"Жим штанги стля": "Подъем штанги на бицепс стоя",
|
||||||
|
"Жим штанги стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"Жис гантелей лежа": "Жим гантелей лежа",
|
||||||
|
"Жис сидя в тренажёре": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Махи в наклоне с упором": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Молот назад двумя руками": "Гантели молот",
|
||||||
|
"Молот трицепс стоя": "Гантели молот",
|
||||||
|
"Молоты": "Гантели молот",
|
||||||
|
"Наклонная тяга (скамья)": "Жим штанги лежа",
|
||||||
|
"Наклоны с прямой спиной": "Наклоны с прямой спиной",
|
||||||
|
"Отведение в кроссовере одной рукой": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение в рук в наклоне": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Отведение назад в пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Отведение назад в тренажере пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Отведение назад в тренажере пэк дэк (3х12)": "Разведение рук в пек-дек",
|
||||||
|
"Отведение рук в кроссовере": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение рук в стороны с гантелями стоя": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Отведение рук в стороны стоя с гантелями": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Отведение рук назад в пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Отведение рук с гантелями стоя": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Отведение рук стоя с гантелями": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Отведение руки в кроссовере": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в кроссовере (одной рукой)": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в кроссовере (по одной руке)": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в кроссовере на каждую руку": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в кроссовкре": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в сторону": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в сторону в кроссовере (каждая рука)": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки стоя": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки стоя снизу вверх": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отжимания": "Отжимания",
|
||||||
|
"Отжимания на брусьях": "Брусья",
|
||||||
|
"Отжимания на брусьях узким хватом": "Брусья",
|
||||||
|
"Отжимания на брусьях широким хватом": "Брусья",
|
||||||
|
"Пек дек (отведение назад)": "Разведение рук в пек-дек",
|
||||||
|
"Пек дек разведение рук в стороны": "Разведение рук в пек-дек",
|
||||||
|
"Подтягивание на заднюю дельту в петлях": "Подтягивания",
|
||||||
|
"Подтягивание ног на ручнике": "Подъем ног на турнике",
|
||||||
|
"Подтягивание ног на турнике": "Подъем ног на турнике",
|
||||||
|
"Подтягивание ног прямых вися на турнике": "Подъем ног на турнике",
|
||||||
|
"Подтягивания": "Подтягивания",
|
||||||
|
"Подтягивания в гравитроне": "Подтягивания",
|
||||||
|
"Подтягивания на резинке": "Подтягивания",
|
||||||
|
"Подтягивания обратным хватом": "Подтягивания обратным хватом",
|
||||||
|
"Подтяотвания": "Подтягивания",
|
||||||
|
"Подъем коленей на турнике": "Подъем ног на турнике",
|
||||||
|
"Подъем ног на турнике": "Подъем ног на турнике",
|
||||||
|
"Подъем штанги стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"Подъёмы ног на турнике": "Подъем ног на турнике",
|
||||||
|
"Подьем штанги стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"Присд на одну ногу (по очереди)": "Выпады",
|
||||||
|
"Присед на одну ногу": "Выпады",
|
||||||
|
"Присед на одну ногу (каждая)": "Выпады",
|
||||||
|
"Приседания": "Приседания",
|
||||||
|
"Приседания на одной ноге": "Выпады",
|
||||||
|
"Разведение рук в кроссовере на трицепс": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Разведение рук в наклоне": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в налоне": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны (дельт-машина)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны (дельта-машина)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны (пек дек)": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны в наклоне 90⁰": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в стороны в наклоне с гантелями": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в стороны в пекдек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны в тренажёре": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны в тренажёре Дж": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук в стороны с гантелям": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в стороны стоя": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в стороны стоя с гантелями": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в стрроны": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук назад в пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук назад пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук сидя": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук сидя с прямыми руками в тренажере": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук стоя с гантелями": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разгибание из за головы": "Гантели молот",
|
||||||
|
"Разгибание кик-бек": "Разгибание рук в наклоне (кик-бек)",
|
||||||
|
"Разгибание локтей в наклоне": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разгибание ног": "Разгибание ног сидя",
|
||||||
|
"Разгибание ног сидя": "Разгибание ног сидя",
|
||||||
|
"Разгибание ног сидя (4х10)": "Разгибание ног сидя",
|
||||||
|
"Разгибание прямых рук сидя": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разгибание рук в кроссовере": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Разгибание рук в тренажёре для трицепса": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Разгибание рук в трицепс машине (3х10)": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Разгибание рук сидя": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Разгибание рук сидя (локти в стороны)": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Разгибание рук сидя (трицепс машина)": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Разгибание рук стоя с канатом": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Разгибание спины": "Разгибание спины",
|
||||||
|
"Румынская тяга": "Румынская тяга",
|
||||||
|
"Румынская тяга с гантелями": "Румынская тяга",
|
||||||
|
"Румынская тяна": "Румынская тяга",
|
||||||
|
"Румынская тяоа": "Румынская тяга",
|
||||||
|
"Сведение на скамейке":"Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Сведение рук в пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук в пек дек зэ": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук в тренажере": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук в тренажёре пёк дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук пек дек (бабочка)": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук сидя": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук сидя пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведения рук пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сгибание гантелей в стиле молот одновременно": "Гантели молот",
|
||||||
|
"Сгибание ног": "Сгибание ног сидя",
|
||||||
|
"Сгибание ног лежа": "Сгибание ног лежа",
|
||||||
|
"Сгибание ног лежа (медленно разгибать)": "Сгибание ног лежа",
|
||||||
|
"Сгибание ног лёжа": "Сгибание ног лежа",
|
||||||
|
"Сгибание ног сидя": "Сгибание ног сидя",
|
||||||
|
"Сгибание ног сидя (3х12)": "Сгибание ног сидя",
|
||||||
|
"Сгибание рук с гантелями стоя": "Подъем гантелей на бицепс стоя",
|
||||||
|
"Сгибание рук с гантелями стоя ям": "Подъем гантелей на бицепс стоя",
|
||||||
|
"Сгибание со штангой стоя (3х12)": "Подъем штанги на бицепс стоя",
|
||||||
|
"Сгибания ног лежа": "Сгибание ног лежа",
|
||||||
|
"Сгибания рук со штангой стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"Силовой тренажер": "Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Скручивания на мяче": "Скручивания",
|
||||||
|
"Трацепс": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Трицепс вниз у стойки": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Трицепс машина": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Трицепс сидя": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Трицепс-машина (разгибание рук сидя)": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Тяга Т гриф": "Тяга Т-грифа",
|
||||||
|
"Тяга в наклоне": "Тяга штанги в наклоне",
|
||||||
|
"Тяга вертикального блока": "Тяга вертикального блока",
|
||||||
|
"Тяга вертикального блока обратным хватом": "Тяга вертикального блока (обратный хват)",
|
||||||
|
"Тяга верхнего блока": "Тяга вертикального блока",
|
||||||
|
"Тяга верхнего блока обратным хватом": "Тяга вертикального блока (обратный хват)",
|
||||||
|
"Тяга вниз обратным хватом сидя (фитнес станция)": "Тяга вертикального блока (обратный хват)",
|
||||||
|
"Тяга вниз сидя": "Тяга вертикального блока",
|
||||||
|
"Тяга гантелей в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантелей к поясу лёжа на скамейке 40⁰": "Тяга гантелей на скамье",
|
||||||
|
"Тяга гантелей к поясу стоя в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантелей лежа на животе на скамье 80°": "Тяга гантелей на скамье",
|
||||||
|
"Тяга гантели в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне (гантеля поочередно)": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне (к поясу одной рукой)": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне одной рукой": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели к корпусу в наклоне же": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели к поясу": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели к поясу в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели к поясу в наклоне одной рукой": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели к поясу в стойке": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели к поясу одной рукой у стойки": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели одной рукой в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели одной рукой в стойке": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга горизонтально блока": "Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блок": "Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блока": "Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блока (1 рука)": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга горизонтального блока дю": "Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блока одной рукой": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга горизонтального блока одной рукой (поочерёдно)": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга горизонтального блокай": "Тяга горизонтального блока",
|
||||||
|
"Тяга на себя": "Тяга горизонтального блока",
|
||||||
|
"Тяга на себя с упором в грудь": "Гребная тяга с упором в грудь",
|
||||||
|
"Тяга на себя сидя": "Тяга горизонтального блока",
|
||||||
|
"Тяга ногами": "Жим ногами",
|
||||||
|
"Тяга ногами вниз": "Жим ногами",
|
||||||
|
"Тяга обратным хватом штанги к поясу": "Тяга штанги в наклоне",
|
||||||
|
"Тяга одной рукой в кроссовере": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга одной рукой в кроссовере на колене": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга руки в кроссовере до": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга рычага к груди": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга сидя вниз обратным хватом": "Тяга вертикального блока (обратный хват)",
|
||||||
|
"Тяга т грифа": "Тяга Т-грифа",
|
||||||
|
"Тяга штанги в наклоне": "Тяга штанги в наклоне",
|
||||||
|
"Тяга штанги в наклоне к груди": "Тяга штанги в наклоне",
|
||||||
|
"Тяга штанги в наклоне к поясу": "Тяга штанги в наклоне",
|
||||||
|
"Тяга штанги в наклоне к поясу обратным хватом": "Тяга штанги в наклоне (обратным хватом)",
|
||||||
|
"Тяга штанги в наклоне обратным хватом": "Тяга штанги в наклоне (обратным хватом)",
|
||||||
|
"Тяга штанги к поясу в наклоне": "Тяга штанги в наклоне (обратным хватом)",
|
||||||
|
"Тяга штанги к поясу стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"Тяга штанги стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"Штанга": "Жим штанги лежа",
|
||||||
|
"Штанга в наклоне": "Тяга штанги в наклоне",
|
||||||
|
"Штанга лежа": "Жим штанги лежа",
|
||||||
|
"Штанга стоя": "Подъем штанги на бицепс стоя",
|
||||||
|
"тяга горизонтального блока": "Тяга горизонтального блока",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
backup = {
|
||||||
|
"Батерфляй": 1,
|
||||||
|
"Баттерфляй": 16,
|
||||||
|
"Баттерфляй дю": 1,
|
||||||
|
"Бицепс на лавке 45⁰": 1,
|
||||||
|
"Болгарский присед": 1,
|
||||||
|
"Брусья": 1,
|
||||||
|
"Брусья (гравитрон)": 1,
|
||||||
|
"Брусья в тренажере": 1,
|
||||||
|
"Брусья прямые ноги": 1,
|
||||||
|
"Брусья узким хватом": 1,
|
||||||
|
"Брусья узким хватом за": 1,
|
||||||
|
"Брусья широким хватом": 3,
|
||||||
|
"Брусья-прямые ноги": 1,
|
||||||
|
"ГАК машина": 1,
|
||||||
|
"Гакк машина": 3,
|
||||||
|
"Гакк присед": 2,
|
||||||
|
"Гантели": 1,
|
||||||
|
"Гантели к поясу лежа на скамье": 1,
|
||||||
|
"Гантели молот": 1,
|
||||||
|
"Гантели на лавках": 1,
|
||||||
|
"Гантели-молот": 1,
|
||||||
|
"Гипекстензия": 1,
|
||||||
|
"Гиперэкстензия": 13,
|
||||||
|
"Горизонтальна тяга на себя": 1,
|
||||||
|
"Горизонтальная тяга блока": 1,
|
||||||
|
"Гравитрон": 30,
|
||||||
|
"Гравитрор": 1,
|
||||||
|
"Гребная тяга": 2,
|
||||||
|
"Гребная тяга с упором в грудь": 7,
|
||||||
|
"Гребная тяга с упором в грудь как": 1,
|
||||||
|
"Гребная тяга с упором на грудь": 5,
|
||||||
|
"Гребная тяга сидя (одна рука)": 1,
|
||||||
|
"Гребная тяга сидя одной рукой": 1,
|
||||||
|
"Гребная тяга сидя с упором в грудт": 1,
|
||||||
|
"Гребная тяга сидя с упором в грудь": 1,
|
||||||
|
"Гребная тяга сидя с упором в грудь (одной рукой рычаг)": 1,
|
||||||
|
"Гребная тяга\xa0 упором в грудьс": 1,
|
||||||
|
"Жим в тренажере вверх": 1,
|
||||||
|
"Жим в тренажере на плечи блочный (3х12)": 1,
|
||||||
|
"Жим в тренажёре на плечи (силовой тренажёр: жим сидя)": 1,
|
||||||
|
"Жим вверх 80⁰": 1,
|
||||||
|
"Жим гантелей": 3,
|
||||||
|
"Жим гантелей 45⁰": 3,
|
||||||
|
"Жим гантелей 60⁰": 1,
|
||||||
|
"Жим гантелей 80⁰": 3,
|
||||||
|
"Жим гантелей 90⁰": 3,
|
||||||
|
"Жим гантелей вверх 80⁰": 1,
|
||||||
|
"Жим гантелей вверх 90⁰": 1,
|
||||||
|
"Жим гантелей вверх сидя 90⁰": 1,
|
||||||
|
"Жим гантелей лежа": 10,
|
||||||
|
"Жим гантелей лежа 15⁰": 1,
|
||||||
|
"Жим гантелей лежа 30⁰": 1,
|
||||||
|
"Жим гантелей лежа на скамье": 1,
|
||||||
|
"Жим гантелей лёжа": 3,
|
||||||
|
"Жим гантелей лёжа на скамье": 2,
|
||||||
|
"Жим гантелей на скамье": 1,
|
||||||
|
"Жим гантелей на скамье 45⁰": 1,
|
||||||
|
"Жим гантелей сидя": 3,
|
||||||
|
"Жим гантелей сидя 80⁰": 2,
|
||||||
|
"Жим гантелей сидя 90⁰": 2,
|
||||||
|
"Жим гантелей сидя на скамейке": 1,
|
||||||
|
"Жим гантелей стоя": 2,
|
||||||
|
"Жим л груди в тренажёре": 1,
|
||||||
|
"Жим лежа": 6,
|
||||||
|
"Жим ногами": 15,
|
||||||
|
"Жим ногами (3х15)": 1,
|
||||||
|
"Жим ногами (медленно вниз)": 1,
|
||||||
|
"Жим ногами лежа": 1,
|
||||||
|
"Жим ногами медленно": 1,
|
||||||
|
"Жим от груди": 2,
|
||||||
|
"Жим от груди (сидя, тренажёр)": 1,
|
||||||
|
"Жим от груди в тренажере сидя": 1,
|
||||||
|
"Жим от груди в тренажёре (кирпичики)": 1,
|
||||||
|
"Жим от груди сидя": 5,
|
||||||
|
"Жим от груди сидя (блинчики)": 2,
|
||||||
|
"Жим от груди сидя в тренажере": 3,
|
||||||
|
"Жим от груди сидя в тренажере (около трицепс машины)": 1,
|
||||||
|
"Жим от груди сидя в тренажере (рычаги)": 1,
|
||||||
|
"Жим от груди сидя в тренажере рычаги": 1,
|
||||||
|
"Жим от груди сидя в тренажёре": 3,
|
||||||
|
"Жим от груди сидя в тренажёре (блинчики)": 1,
|
||||||
|
"Жим от груди сидя в тренажёре (рычаги)": 1,
|
||||||
|
"Жим от плеч (рычаги)": 1,
|
||||||
|
"Жим от плеч вверх": 12,
|
||||||
|
"Жим от плеч вверх в тренажёре": 1,
|
||||||
|
"Жим от плеч вверх сидя": 1,
|
||||||
|
"Жим от плеч вверх сидя 80⁰": 1,
|
||||||
|
"Жим от плеч вверх сидя в тренажере": 1,
|
||||||
|
"Жим от плеч сидя": 2,
|
||||||
|
"Жим от плеч сидя (рычаги)": 3,
|
||||||
|
"Жим от плеч сидя зэ": 1,
|
||||||
|
"Жим от плеч сидя хз": 1,
|
||||||
|
"Жим от плечей вверх": 1,
|
||||||
|
"Жим плечами вверх сидя": 1,
|
||||||
|
"Жим сидя 45⁰": 1,
|
||||||
|
"Жим штанги 45⁰": 2,
|
||||||
|
"Жим штанги в наклоне": 1,
|
||||||
|
"Жим штанги лежа": 1,
|
||||||
|
"Жим штанги сидя 45⁰": 1,
|
||||||
|
"Жим штанги стля": 1,
|
||||||
|
"Жим штанги стоя": 1,
|
||||||
|
"Жис гантелей лежа": 1,
|
||||||
|
"Жис сидя в тренажёре": 1,
|
||||||
|
"Махи в наклоне с упором": 1,
|
||||||
|
"Молот назад двумя руками": 1,
|
||||||
|
"Молот трицепс стоя": 1,
|
||||||
|
"Молоты": 1,
|
||||||
|
"Наклонная тяга (скамья)": 1,
|
||||||
|
"Наклоны с прямой спиной": 1,
|
||||||
|
"Отведение в кроссовере одной рукой": 1,
|
||||||
|
"Отведение в рук в наклоне": 1,
|
||||||
|
"Отведение назад в пек дек": 1,
|
||||||
|
"Отведение назад в тренажере пек дек": 1,
|
||||||
|
"Отведение назад в тренажере пэк дэк (3х12)": 1,
|
||||||
|
"Отведение рук в кроссовере": 1,
|
||||||
|
"Отведение рук в стороны с гантелями стоя": 1,
|
||||||
|
"Отведение рук в стороны стоя с гантелями": 1,
|
||||||
|
"Отведение рук назад в пек дек": 1,
|
||||||
|
"Отведение рук с гантелями стоя": 2,
|
||||||
|
"Отведение рук стоя с гантелями": 1,
|
||||||
|
"Отведение руки в кроссовере": 2,
|
||||||
|
"Отведение руки в кроссовере (одной рукой)": 1,
|
||||||
|
"Отведение руки в кроссовере (по одной руке)": 2,
|
||||||
|
"Отведение руки в кроссовере на каждую руку": 1,
|
||||||
|
"Отведение руки в кроссовкре": 1,
|
||||||
|
"Отведение руки в сторону": 1,
|
||||||
|
"Отведение руки в сторону в кроссовере (каждая рука)": 1,
|
||||||
|
"Отведение руки стоя": 2,
|
||||||
|
"Отведение руки стоя снизу вверх": 1,
|
||||||
|
"Отжимания": 16,
|
||||||
|
"Отжимания на брусьях": 7,
|
||||||
|
"Отжимания на брусьях узким хватом": 1,
|
||||||
|
"Отжимания на брусьях широким хватом": 3,
|
||||||
|
"Пек дек (отведение назад)": 1,
|
||||||
|
"Пек дек разведение рук в стороны": 1,
|
||||||
|
"Подтягивание на заднюю дельту в петлях": 1,
|
||||||
|
"Подтягивание ног на ручнике": 1,
|
||||||
|
"Подтягивание ног на турнике": 2,
|
||||||
|
"Подтягивание ног прямых вися на турнике": 1,
|
||||||
|
"Подтягивания": 8,
|
||||||
|
"Подтягивания в гравитроне": 1,
|
||||||
|
"Подтягивания на резинке": 1,
|
||||||
|
"Подтягивания обратным хватом": 8,
|
||||||
|
"Подтяотвания": 1,
|
||||||
|
"Подъем коленей на турнике": 1,
|
||||||
|
"Подъем ног на турнике": 4,
|
||||||
|
"Подъем штанги стоя": 2,
|
||||||
|
"Подъёмы ног на турнике": 1,
|
||||||
|
"Подьем штанги стоя": 1,
|
||||||
|
"Присд на одну ногу (по очереди)": 1,
|
||||||
|
"Присед на одну ногу": 1,
|
||||||
|
"Присед на одну ногу (каждая)": 1,
|
||||||
|
"Приседания": 16,
|
||||||
|
"Приседания на одной ноге": 1,
|
||||||
|
"Разведение рук в кроссовере на трицепс": 1,
|
||||||
|
"Разведение рук в наклоне": 2,
|
||||||
|
"Разведение рук в налоне": 1,
|
||||||
|
"Разведение рук в пек дек": 6,
|
||||||
|
"Разведение рук в стороны": 14,
|
||||||
|
"Разведение рук в стороны (дельт-машина)": 3,
|
||||||
|
"Разведение рук в стороны (дельта-машина)": 1,
|
||||||
|
"Разведение рук в стороны (пек дек)": 1,
|
||||||
|
"Разведение рук в стороны в наклоне 90⁰": 2,
|
||||||
|
"Разведение рук в стороны в наклоне с гантелями": 1,
|
||||||
|
"Разведение рук в стороны в пекдек": 1,
|
||||||
|
"Разведение рук в стороны в тренажёре": 1,
|
||||||
|
"Разведение рук в стороны в тренажёре Дж": 1,
|
||||||
|
"Разведение рук в стороны пек дек": 2,
|
||||||
|
"Разведение рук в стороны с гантелям": 1,
|
||||||
|
"Разведение рук в стороны стоя": 2,
|
||||||
|
"Разведение рук в стороны стоя с гантелями": 2,
|
||||||
|
"Разведение рук в стрроны": 1,
|
||||||
|
"Разведение рук назад в пек дек": 1,
|
||||||
|
"Разведение рук назад пек дек": 1,
|
||||||
|
"Разведение рук пек дек": 4,
|
||||||
|
"Разведение рук сидя": 3,
|
||||||
|
"Разведение рук сидя с прямыми руками в тренажере": 1,
|
||||||
|
"Разведение рук стоя с гантелями": 1,
|
||||||
|
"Разгибание из за головы": 1,
|
||||||
|
"Разгибание кик-бек": 1,
|
||||||
|
"Разгибание локтей в наклоне": 1,
|
||||||
|
"Разгибание ног": 5,
|
||||||
|
"Разгибание ног сидя": 22,
|
||||||
|
"Разгибание ног сидя (4х10)": 1,
|
||||||
|
"Разгибание прямых рук сидя": 1,
|
||||||
|
"Разгибание рук в кроссовере": 1,
|
||||||
|
"Разгибание рук в тренажёре для трицепса": 1,
|
||||||
|
"Разгибание рук в трицепс машине (3х10)": 1,
|
||||||
|
"Разгибание рук сидя": 5,
|
||||||
|
"Разгибание рук сидя (локти в стороны)": 1,
|
||||||
|
"Разгибание рук сидя (трицепс машина)": 1,
|
||||||
|
"Разгибание рук стоя с канатом": 1,
|
||||||
|
"Разгибание спины": 1,
|
||||||
|
"Румынская тяга": 5,
|
||||||
|
"Румынская тяга с гантелями": 1,
|
||||||
|
"Румынская тяна": 2,
|
||||||
|
"Румынская тяоа": 1,
|
||||||
|
"Сведение на скамейке": 1,
|
||||||
|
"Сведение рук в пек дек": 8,
|
||||||
|
"Сведение рук в пек дек зэ": 1,
|
||||||
|
"Сведение рук в тренажере": 1,
|
||||||
|
"Сведение рук в тренажёре пёк дек": 1,
|
||||||
|
"Сведение рук пек дек": 7,
|
||||||
|
"Сведение рук пек дек (бабочка)": 1,
|
||||||
|
"Сведение рук сидя": 3,
|
||||||
|
"Сведение рук сидя пек дек": 1,
|
||||||
|
"Сведения рук пек дек": 1,
|
||||||
|
"Сгибание гантелей в стиле молот одновременно": 1,
|
||||||
|
"Сгибание ног": 2,
|
||||||
|
"Сгибание ног лежа": 14,
|
||||||
|
"Сгибание ног лежа (медленно разгибать)": 1,
|
||||||
|
"Сгибание ног лёжа": 2,
|
||||||
|
"Сгибание ног сидя": 8,
|
||||||
|
"Сгибание ног сидя (3х12)": 1,
|
||||||
|
"Сгибание рук с гантелями стоя": 1,
|
||||||
|
"Сгибание рук с гантелями стоя ям": 1,
|
||||||
|
"Сгибание со штангой стоя (3х12)": 1,
|
||||||
|
"Сгибания ног лежа": 1,
|
||||||
|
"Сгибания рук со штангой стоя": 1,
|
||||||
|
"Силовой тренажер": 1,
|
||||||
|
"Скручивания на мяче": 2,
|
||||||
|
"Трацепс": 1,
|
||||||
|
"Трицепс вниз у стойки": 1,
|
||||||
|
"Трицепс машина": 4,
|
||||||
|
"Трицепс сидя": 1,
|
||||||
|
"Трицепс-машина (разгибание рук сидя)": 1,
|
||||||
|
"Тяга Т гриф": 1,
|
||||||
|
"Тяга в наклоне": 1,
|
||||||
|
"Тяга вертикального блока": 15,
|
||||||
|
"Тяга вертикального блока обратным хватом": 5,
|
||||||
|
"Тяга верхнего блока": 3,
|
||||||
|
"Тяга верхнего блока обратным хватом": 1,
|
||||||
|
"Тяга вниз обратным хватом сидя (фитнес станция)": 1,
|
||||||
|
"Тяга вниз сидя": 2,
|
||||||
|
"Тяга гантелей в наклоне": 3,
|
||||||
|
"Тяга гантелей к поясу лёжа на скамейке 40⁰": 1,
|
||||||
|
"Тяга гантелей к поясу стоя в наклоне": 1,
|
||||||
|
"Тяга гантелей лежа на животе на скамье 80°": 1,
|
||||||
|
"Тяга гантели в наклоне": 4,
|
||||||
|
"Тяга гантели в наклоне (гантеля поочередно)": 1,
|
||||||
|
"Тяга гантели в наклоне (к поясу одной рукой)": 1,
|
||||||
|
"Тяга гантели в наклоне одной рукой": 1,
|
||||||
|
"Тяга гантели к корпусу в наклоне же": 1,
|
||||||
|
"Тяга гантели к поясу": 1,
|
||||||
|
"Тяга гантели к поясу в наклоне": 1,
|
||||||
|
"Тяга гантели к поясу в наклоне одной рукой": 1,
|
||||||
|
"Тяга гантели к поясу в стойке": 1,
|
||||||
|
"Тяга гантели к поясу одной рукой у стойки": 1,
|
||||||
|
"Тяга гантели одной рукой в наклоне": 1,
|
||||||
|
"Тяга гантели одной рукой в стойке": 1,
|
||||||
|
"Тяга горизонтально блока": 1,
|
||||||
|
"Тяга горизонтального блок": 1,
|
||||||
|
"Тяга горизонтального блока": 14,
|
||||||
|
"Тяга горизонтального блока (1 рука)": 1,
|
||||||
|
"Тяга горизонтального блока дю": 1,
|
||||||
|
"Тяга горизонтального блока одной рукой": 4,
|
||||||
|
"Тяга горизонтального блока одной рукой (поочерёдно)": 1,
|
||||||
|
"Тяга горизонтального блокай": 1,
|
||||||
|
"Тяга на себя": 3,
|
||||||
|
"Тяга на себя с упором в грудь": 1,
|
||||||
|
"Тяга на себя сидя": 3,
|
||||||
|
"Тяга ногами": 1,
|
||||||
|
"Тяга ногами вниз": 1,
|
||||||
|
"Тяга обратным хватом штанги к поясу": 1,
|
||||||
|
"Тяга одной рукой в кроссовере": 1,
|
||||||
|
"Тяга одной рукой в кроссовере на колене": 1,
|
||||||
|
"Тяга руки в кроссовере до": 1,
|
||||||
|
"Тяга рычага к груди": 1,
|
||||||
|
"Тяга сидя вниз обратным хватом": 1,
|
||||||
|
"Тяга т грифа": 1,
|
||||||
|
"Тяга штанги в наклоне": 7,
|
||||||
|
"Тяга штанги в наклоне к груди": 1,
|
||||||
|
"Тяга штанги в наклоне к поясу": 1,
|
||||||
|
"Тяга штанги в наклоне к поясу обратным хватом": 1,
|
||||||
|
"Тяга штанги в наклоне обратным хватом": 1,
|
||||||
|
"Тяга штанги к поясу в наклоне": 1,
|
||||||
|
"Тяга штанги к поясу стоя": 1,
|
||||||
|
"Тяга штанги стоя": 1,
|
||||||
|
"Штанга": 2,
|
||||||
|
"Штанга в наклоне": 1,
|
||||||
|
"Штанга лежа": 1,
|
||||||
|
"Штанга стоя": 1,
|
||||||
|
"тяга горизонтального блока": 1,
|
||||||
|
}
|
144
apple/notes_parser.py
Normal file
144
apple/notes_parser.py
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
from typing import List, Tuple
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from obsidian.py_models import Approach, Exercise, Training
|
||||||
|
from apple.mapper import unique_apple_exercises_mapper
|
||||||
|
|
||||||
|
current_directory = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_path():
|
||||||
|
return current_directory
|
||||||
|
|
||||||
|
|
||||||
|
def get_obsidian_examples_file(example_file_name: str):
|
||||||
|
return os.path.join(get_current_path(), f"examples/{example_file_name}")
|
||||||
|
|
||||||
|
|
||||||
|
def read_example_file(example_file_name: str):
|
||||||
|
path_to_example: str = get_obsidian_examples_file(example_file_name)
|
||||||
|
with open(path_to_example, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def filter_training_data(training_data: str):
|
||||||
|
cleaned_text = re.sub(
|
||||||
|
r"^\|(\s+|-*|\s-*\s)\|(\s+|-*|\s-*\s)\|(\s+|-*|\s-*\s)\|$",
|
||||||
|
"",
|
||||||
|
training_data,
|
||||||
|
flags=re.MULTILINE,
|
||||||
|
)
|
||||||
|
cleaned_text = re.sub(r"^\n", "", cleaned_text, flags=re.MULTILINE)
|
||||||
|
lines = cleaned_text.splitlines()
|
||||||
|
redundant_lines = [
|
||||||
|
"| | | |",
|
||||||
|
"|---|---|---|",
|
||||||
|
"|**Упражнение**|**Вес**|**Подходы**|",
|
||||||
|
]
|
||||||
|
filtered_lines = [line for line in lines if line not in redundant_lines]
|
||||||
|
return "\n".join(filtered_lines)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_training_header(
|
||||||
|
training_data_line: str,
|
||||||
|
) -> Tuple[bool, str, str, str]:
|
||||||
|
pattern: str = (
|
||||||
|
r"^\*\*(?P<date>\d+.\d+.\d+)\s\((?P<trainer>.+)(-(?P<year_counter>.+))?\)\*\*"
|
||||||
|
)
|
||||||
|
match = re.search(pattern, training_data_line)
|
||||||
|
if match:
|
||||||
|
date = match.group("date").strip()
|
||||||
|
trainer = match.group("trainer").strip()
|
||||||
|
if match.group("year_counter"):
|
||||||
|
year_count = match.group("year_counter").strip()
|
||||||
|
else:
|
||||||
|
year_count = 0
|
||||||
|
return True, date, trainer, year_count
|
||||||
|
return False, "", "", ""
|
||||||
|
|
||||||
|
|
||||||
|
def serialize_exercise(reps: str, weight: str, name: str) -> Exercise:
|
||||||
|
# Split reps into array of int's
|
||||||
|
reps: List[int] = [int(rep) for rep in reps.split("-")]
|
||||||
|
weight_splitted: bool = False
|
||||||
|
if weight:
|
||||||
|
weight: List[str] = [weight for weight in weight.split("-")]
|
||||||
|
# Check if weight is splitted
|
||||||
|
if any(split_anchor in weight[0] for split_anchor in ["x", "х"]):
|
||||||
|
weight_splitted = True
|
||||||
|
splitter = "x" if "x" in weight[0] else "х"
|
||||||
|
weight: List[float] = [xweight.split(splitter)[0] for xweight in weight]
|
||||||
|
approaches = []
|
||||||
|
if not weight:
|
||||||
|
for rep_index in range(0, len(reps)):
|
||||||
|
approach = Approach(weight=0, reps=reps[rep_index])
|
||||||
|
approaches.append(approach)
|
||||||
|
else:
|
||||||
|
weight_pointer = 0
|
||||||
|
for rep_index in range(0, len(reps)):
|
||||||
|
approach = Approach(weight=weight[weight_pointer], reps=reps[rep_index])
|
||||||
|
if rep_index < len(weight) - 1:
|
||||||
|
weight_pointer += 1
|
||||||
|
approaches.append(approach)
|
||||||
|
exercise = Exercise(
|
||||||
|
name=name, approaches=approaches, splitted_weight=weight_splitted
|
||||||
|
)
|
||||||
|
return exercise
|
||||||
|
|
||||||
|
|
||||||
|
def parse_training_exercises(exercise_line: str) -> Exercise:
|
||||||
|
stripped: List[str] = [entry.strip() for entry in exercise_line.split("|")][1:-1]
|
||||||
|
for entry in stripped:
|
||||||
|
if entry in ["Упражнение", "Вес", "Подходы"]:
|
||||||
|
raise ValueError
|
||||||
|
if stripped:
|
||||||
|
if "---" in stripped[0]:
|
||||||
|
raise ValueError
|
||||||
|
if len(stripped) != 3:
|
||||||
|
raise ValueError
|
||||||
|
return serialize_exercise(
|
||||||
|
name=stripped[0], weight=stripped[1], reps=stripped[2]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_training_data():
|
||||||
|
training_data: str = filter_training_data(read_example_file("full.txt"))
|
||||||
|
lines = training_data.splitlines()
|
||||||
|
current_training = None
|
||||||
|
trains = []
|
||||||
|
for index, line in enumerate(lines):
|
||||||
|
header_parsed, date, trainer, year_count = parse_training_header(line)
|
||||||
|
if index == len(lines) - 1:
|
||||||
|
trains.append(current_training)
|
||||||
|
if header_parsed:
|
||||||
|
trains.append(current_training)
|
||||||
|
try:
|
||||||
|
current_training = Training(
|
||||||
|
date=datetime.strptime(date, "%d.%m.%Y").date(), exercises=[]
|
||||||
|
)
|
||||||
|
except ValueError:
|
||||||
|
current_training = Training(
|
||||||
|
date=datetime.strptime(date, "%d.%m.%y").date(), exercises=[]
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
exr = parse_training_exercises(line)
|
||||||
|
current_training.exercises.append(exr)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
return trains[1:]
|
||||||
|
|
||||||
|
|
||||||
|
def remap_unique_exercises(apple_trainings: List[Training]) -> List[Training]:
|
||||||
|
for apple_training in apple_trainings:
|
||||||
|
if not apple_training:
|
||||||
|
continue
|
||||||
|
for apple_exercise in apple_training.exercises:
|
||||||
|
if not apple_exercise:
|
||||||
|
continue
|
||||||
|
print(f"{apple_training.date} : {apple_exercise}")
|
||||||
|
apple_exercise.name = unique_apple_exercises_mapper.get(apple_exercise.name)
|
||||||
|
return apple_trainings
|
11
compose.yaml
Normal file
11
compose.yaml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
database:
|
||||||
|
image: 'postgres:latest'
|
||||||
|
ports:
|
||||||
|
- 5433:5432
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: fitness_database
|
0
conftest.py
Normal file
0
conftest.py
Normal file
0
dbapi/__init__.py
Normal file
0
dbapi/__init__.py
Normal file
0
dbapi/context_managers.py
Normal file
0
dbapi/context_managers.py
Normal file
15
dbapi/migrator.py
Normal file
15
dbapi/migrator.py
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
|
||||||
|
from dbapi.tables import metadata_obj
|
||||||
|
|
||||||
|
|
||||||
|
class FitnessDatabseMigrator:
|
||||||
|
"""Class for performing management operations with database"""
|
||||||
|
|
||||||
|
def __init__(self, async_engine: AsyncEngine) -> None:
|
||||||
|
self.engine = async_engine
|
||||||
|
|
||||||
|
async def reset_database(self):
|
||||||
|
"""Method for dropping all tables and create them from tables metadata"""
|
||||||
|
async with self.engine.begin() as conn:
|
||||||
|
await conn.run_sync(metadata_obj.drop_all)
|
||||||
|
await conn.run_sync(metadata_obj.create_all)
|
0
dbapi/repositories/__init__.py
Normal file
0
dbapi/repositories/__init__.py
Normal file
27
dbapi/repositories/approach_repo.py
Normal file
27
dbapi/repositories/approach_repo.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
from dbapi.repositories.utils import DatabaseInterfasesMixin
|
||||||
|
from sqlalchemy import insert
|
||||||
|
from dbapi.tables import approach
|
||||||
|
|
||||||
|
|
||||||
|
class ApproachRepository(DatabaseInterfasesMixin):
|
||||||
|
"""Approach table repository"""
|
||||||
|
|
||||||
|
def create_approach(self, exercise_pk: int, weight: float, reps: int) -> int:
|
||||||
|
"""Method for creating new instance of approach table
|
||||||
|
|
||||||
|
Args:
|
||||||
|
exercise_pk: Primary key of an associated exercise
|
||||||
|
weight: Approach weight
|
||||||
|
reps: Amount of reps in approach
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Primary key of created exercise entry
|
||||||
|
"""
|
||||||
|
new_instance_statement = insert(approach).values(
|
||||||
|
Exercise=exercise_pk, Weight=weight, Reps=reps
|
||||||
|
)
|
||||||
|
with self.engine.connect() as conn:
|
||||||
|
result = conn.execute(new_instance_statement)
|
||||||
|
inserted_entry_pk: int = result.inserted_primary_key[0]
|
||||||
|
conn.commit()
|
||||||
|
return inserted_entry_pk
|
25
dbapi/repositories/exercise_repo.py
Normal file
25
dbapi/repositories/exercise_repo.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
from sqlalchemy import insert
|
||||||
|
from dbapi.repositories.utils import DatabaseInterfasesMixin
|
||||||
|
from dbapi.tables import exercise
|
||||||
|
|
||||||
|
|
||||||
|
class ExerciseRepository(DatabaseInterfasesMixin):
|
||||||
|
"""Exercise table repository"""
|
||||||
|
|
||||||
|
def create_exercise(self, training_pk: int, exercise_name: str) -> int:
|
||||||
|
"""Method for creating new instance of exercise table
|
||||||
|
Args:
|
||||||
|
training_pk: Primary key of associated training instance
|
||||||
|
exercise_name: Name of an exercise
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Primary key of created exercise entry
|
||||||
|
"""
|
||||||
|
new_instance_statement = insert(exercise).values(
|
||||||
|
Training=training_pk, Name=exercise_name
|
||||||
|
)
|
||||||
|
with self.engine.connect() as conn:
|
||||||
|
result = conn.execute(new_instance_statement)
|
||||||
|
inserted_entry_pk: int = result.inserted_primary_key[0]
|
||||||
|
conn.commit()
|
||||||
|
return inserted_entry_pk
|
23
dbapi/repositories/training_repo.py
Normal file
23
dbapi/repositories/training_repo.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
from sqlalchemy import insert
|
||||||
|
from datetime import date
|
||||||
|
from dbapi.repositories.utils import DatabaseInterfasesMixin
|
||||||
|
from dbapi.tables import training
|
||||||
|
|
||||||
|
|
||||||
|
class TrainingRepository(DatabaseInterfasesMixin):
|
||||||
|
"""Training table repository"""
|
||||||
|
|
||||||
|
def create_training(self, date: date) -> int:
|
||||||
|
"""Method for creating new instance of training
|
||||||
|
Args:
|
||||||
|
date: date of a training
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Primary key of created training entry
|
||||||
|
"""
|
||||||
|
new_instance_statement = insert(training).values(Date=date)
|
||||||
|
with self.engine.connect() as conn:
|
||||||
|
result = conn.execute(new_instance_statement)
|
||||||
|
inerted_entry_pk: int = result.inserted_primary_key[0]
|
||||||
|
conn.commit()
|
||||||
|
return inerted_entry_pk
|
8
dbapi/repositories/utils.py
Normal file
8
dbapi/repositories/utils.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
from sqlalchemy import Engine
|
||||||
|
|
||||||
|
|
||||||
|
class DatabaseInterfasesMixin:
|
||||||
|
"""Mixin for interfaces, that works with database"""
|
||||||
|
|
||||||
|
def __init__(self, engine: Engine) -> None:
|
||||||
|
self.engine: Engine = engine
|
37
dbapi/tables.py
Normal file
37
dbapi/tables.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
from sqlalchemy import Float, ForeignKey, String, Table, Column, Integer, MetaData, Date
|
||||||
|
|
||||||
|
# NOTE: MetaData object - object where we place out tables
|
||||||
|
# Essentialy - this is a facade around Python dicts, that stores series of Table objects keyed to their string name
|
||||||
|
metadata_obj = MetaData()
|
||||||
|
|
||||||
|
# Representation of training table
|
||||||
|
training = Table(
|
||||||
|
"training",
|
||||||
|
metadata_obj,
|
||||||
|
Column("Id", Integer, primary_key=True),
|
||||||
|
Column("Date", Date),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Representation of exercise table
|
||||||
|
exercise = Table(
|
||||||
|
"exercise",
|
||||||
|
metadata_obj,
|
||||||
|
Column("Id", Integer, primary_key=True),
|
||||||
|
Column("Training", ForeignKey("training.Id"), nullable=False),
|
||||||
|
Column("Name", String(256)),
|
||||||
|
)
|
||||||
|
|
||||||
|
approach = Table(
|
||||||
|
"approach",
|
||||||
|
metadata_obj,
|
||||||
|
Column("Id", Integer, primary_key=True),
|
||||||
|
Column("Exercise", ForeignKey("exercise.Id"), nullable=False),
|
||||||
|
Column("Weight", Float),
|
||||||
|
Column("Reps", Integer),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# NOTE: We can access table metadata with associative array `c`
|
||||||
|
# print(training.c.keys())
|
||||||
|
# print(training.primary_key)
|
||||||
|
print(training.name)
|
84
elect
Normal file
84
elect
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
1 | 1 | 77 | 12
|
||||||
|
2 | 1 | 86 | 12
|
||||||
|
3 | 1 | 91 | 12
|
||||||
|
4 | 1 | 86 | 12
|
||||||
|
5 | 2 | 47 | 12
|
||||||
|
6 | 2 | 47 | 12
|
||||||
|
7 | 2 | 47 | 11
|
||||||
|
8 | 2 | 47 | 10
|
||||||
|
9 | 3 | 15 | 12
|
||||||
|
10 | 3 | 25 | 12
|
||||||
|
11 | 3 | 27.5 | 12
|
||||||
|
12 | 3 | 30 | 8
|
||||||
|
13 | 4 | 9 | 12
|
||||||
|
14 | 4 | 11 | 12
|
||||||
|
15 | 4 | 12 | 12
|
||||||
|
16 | 5 | 33 | 12
|
||||||
|
17 | 5 | 33 | 12
|
||||||
|
18 | 5 | 33 | 12
|
||||||
|
19 | 5 | 33 | 12
|
||||||
|
20 | 6 | 0 | 9
|
||||||
|
21 | 6 | 0 | 7
|
||||||
|
22 | 6 | 0 | 5
|
||||||
|
23 | 7 | 55 | 12
|
||||||
|
24 | 7 | 59 | 12
|
||||||
|
25 | 7 | 59 | 12
|
||||||
|
26 | 7 | 59 | 10
|
||||||
|
27 | 8 | 18 | 12
|
||||||
|
28 | 8 | 20 | 12
|
||||||
|
29 | 8 | 20 | 11
|
||||||
|
30 | 9 | 47 | 12
|
||||||
|
31 | 9 | 47 | 12
|
||||||
|
32 | 9 | 47 | 12
|
||||||
|
33 | 10 | 77 | 12
|
||||||
|
34 | 10 | 77 | 12
|
||||||
|
35 | 10 | 77 | 12
|
||||||
|
36 | 11 | 0 | 11
|
||||||
|
37 | 11 | 0 | 8
|
||||||
|
38 | 11 | 0 | 6
|
||||||
|
39 | 12 | 22 | 12
|
||||||
|
40 | 12 | 28 | 10
|
||||||
|
41 | 12 | 28 | 10
|
||||||
|
42 | 12 | 28 | 10
|
||||||
|
43 | 13 | 16 | 12
|
||||||
|
44 | 13 | 28 | 10
|
||||||
|
45 | 13 | 28 | 6
|
||||||
|
46 | 13 | 28 | 7
|
||||||
|
47 | 14 | 47 | 12
|
||||||
|
48 | 14 | 47 | 12
|
||||||
|
49 | 14 | 47 | 12
|
||||||
|
50 | 15 | 65 | 12
|
||||||
|
51 | 15 | 82 | 12
|
||||||
|
52 | 15 | 91 | 12
|
||||||
|
53 | 16 | 100 | 12
|
||||||
|
54 | 16 | 150 | 10
|
||||||
|
55 | 16 | 150 | 10
|
||||||
|
56 | 16 | 150 | 10
|
||||||
|
57 | 17 | 15 | 12
|
||||||
|
58 | 17 | 15 | 12
|
||||||
|
59 | 17 | 15 | 12
|
||||||
|
60 | 18 | 12 | 12
|
||||||
|
61 | 18 | 20 | 10
|
||||||
|
62 | 18 | 20 | 10
|
||||||
|
63 | 18 | 20 | 10
|
||||||
|
64 | 19 | 47 | 11
|
||||||
|
65 | 19 | 47 | 11
|
||||||
|
66 | 19 | 47 | 12
|
||||||
|
67 | 20 | 45 | 12
|
||||||
|
68 | 20 | 54 | 12
|
||||||
|
69 | 20 | 59 | 10
|
||||||
|
70 | 20 | 59 | 10
|
||||||
|
71 | 21 | 30 | 10
|
||||||
|
72 | 21 | 32 | 10
|
||||||
|
73 | 21 | 32 | 10
|
||||||
|
74 | 22 | 50 | 12
|
||||||
|
75 | 22 | 50 | 12
|
||||||
|
76 | 22 | 50 | 12
|
||||||
|
77 | 23 | 16 | 12
|
||||||
|
78 | 23 | 24 | 10
|
||||||
|
79 | 23 | 24 | 10
|
||||||
|
80 | 23 | 24 | 10
|
||||||
|
81 | 24 | 47 | 12
|
||||||
|
82 | 24 | 47 | 12
|
||||||
|
83 | 24 | 47 | 12
|
||||||
|
|
3
env_template
Normal file
3
env_template
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
POSTGRES_USER=db_username
|
||||||
|
POSTGRES_PASSWORD=db_password
|
||||||
|
|
18
main.py
Normal file
18
main.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
|
import grpc
|
||||||
|
from api.proto import routes_pb2, routes_pb2_grpc
|
||||||
|
|
||||||
|
|
||||||
|
class RouteApproachesServicer(routes_pb2_grpc.RouteApproachesServicer):
|
||||||
|
def GetApproach(self, request, context):
|
||||||
|
print("Hello")
|
||||||
|
return routes_pb2.Approach(weight=100, reps=12)
|
||||||
|
|
||||||
|
def serve():
|
||||||
|
server = grpc.server(ThreadPoolExecutor(max_workers=10))
|
||||||
|
routes_pb2_grpc.add_RouteApproachesServicer_to_server(RouteApproachesServicer(), server)
|
||||||
|
server.add_insecure_port("[::]:50051")
|
||||||
|
server.start()
|
||||||
|
server.wait_for_termination()
|
||||||
|
|
||||||
|
serve()
|
190
main_backup.py
Normal file
190
main_backup.py
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
import asyncio
|
||||||
|
from collections import defaultdict
|
||||||
|
from pprint import pprint
|
||||||
|
import os
|
||||||
|
from typing import Dict, List
|
||||||
|
from sqlalchemy import Table, create_engine, text, insert
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from sqlalchemy.ext.asyncio import create_async_engine
|
||||||
|
from dbapi.migrator import FitnessDatabseMigrator
|
||||||
|
from dbapi.repositories.approach_repo import ApproachRepository
|
||||||
|
from dbapi.repositories.exercise_repo import ExerciseRepository
|
||||||
|
from dbapi.repositories.training_repo import TrainingRepository
|
||||||
|
from dbapi.tables import metadata_obj, training, exercise, approach
|
||||||
|
from obsidian.notes_parser import parse_training_data, remap_unique_exercises
|
||||||
|
from apple.notes_parser import parse_training_data as apple_parse_training_data
|
||||||
|
from apple.notes_parser import remap_unique_exercises as apple_remaper
|
||||||
|
from obsidian.py_models import Training
|
||||||
|
|
||||||
|
# LOADING DATA
|
||||||
|
|
||||||
|
# load_dotenv()
|
||||||
|
#
|
||||||
|
# DB_USERNAME = os.getenv("POSTGRES_USER")
|
||||||
|
# DB_PASS = os.getenv("POSTGRES_PASSWORD")
|
||||||
|
#
|
||||||
|
# engine = create_engine(
|
||||||
|
# f"postgresql+psycopg2://{DB_USERNAME}:{DB_PASS}@localhost:5433/fitness_database",
|
||||||
|
# echo=True,
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# # Creating async engine for Database connection
|
||||||
|
# async_engine = create_async_engine(
|
||||||
|
# f"postgresql+asyncpg://{DB_USERNAME}:{DB_PASS}@localhost:5433/fitness_database",
|
||||||
|
# echo=True,
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
# NOTE: "Begin once" style - using `.begin` as context creator for SQLAlchemy
|
||||||
|
# with engine.begin() as conn:
|
||||||
|
# result = conn.execute(text("select 'hello world'"))
|
||||||
|
# print(result.all())
|
||||||
|
# conn.execute(
|
||||||
|
# text("INSERT INTO some_table(x, y) VALUES (:x, :y)"),
|
||||||
|
# [{"x": 6, "y": 7}, {"x": 9, "y": 10}],
|
||||||
|
# )
|
||||||
|
|
||||||
|
# NOTE: "Commit as you go" style - after managing transactions we need to call Connection.commit(). Otherwise ROLLBACK
|
||||||
|
# will be executed
|
||||||
|
# with engine.connect() as conn:
|
||||||
|
# result = conn.execute(text("SELECT x, y FROM some_table"))
|
||||||
|
# for row in result:
|
||||||
|
# print(f"x: {row.x} -- y: {row.y}")
|
||||||
|
|
||||||
|
# NOTE : Create all tables from metadata object
|
||||||
|
# metadata_obj.create_all(engine)
|
||||||
|
# TODO: Check how psycopg2 handles duplication of tables
|
||||||
|
# TODO: Check how migrations are done
|
||||||
|
|
||||||
|
# NOTE: Drop all Tables from database
|
||||||
|
metadata_obj.drop_all(engine)
|
||||||
|
metadata_obj.create_all(engine)
|
||||||
|
|
||||||
|
# NOTE: Table reflection - generating table object from existing tables (only tables, that are stored in metadata)
|
||||||
|
# some_table = Table("some_table", metadata_obj, autoload_with=engine)
|
||||||
|
# print(some_table.c)
|
||||||
|
|
||||||
|
# -----
|
||||||
|
|
||||||
|
# Inserting training values into database
|
||||||
|
|
||||||
|
trainings: List[Training] = parse_training_data()
|
||||||
|
for train in trainings:
|
||||||
|
if not train:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
print(train)
|
||||||
|
new_training_pk: int = TrainingRepository(engine).create_training(train.date)
|
||||||
|
for exr in train.exercises:
|
||||||
|
approach_statements = []
|
||||||
|
new_exercise_pk: int = ExerciseRepository(engine).create_exercise(
|
||||||
|
training_pk=new_training_pk, exercise_name=exr.name
|
||||||
|
)
|
||||||
|
for appr in exr.approaches:
|
||||||
|
new_approach_pk: int = ApproachRepository(engine).create_approach(
|
||||||
|
exercise_pk=new_exercise_pk, weight=appr.weight, reps=appr.reps
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
print("-------------------------\n" * 2)
|
||||||
|
print("-------------------------\n" * 2)
|
||||||
|
# -----
|
||||||
|
|
||||||
|
# Calculating unique exercises for obsidian
|
||||||
|
|
||||||
|
# trainings: List[Training] = parse_training_data()
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# unique_exercise_names = defaultdict(int)
|
||||||
|
# counter = 0
|
||||||
|
#
|
||||||
|
# for train in trainings:
|
||||||
|
# if not train:
|
||||||
|
# continue
|
||||||
|
# if train.exercises:
|
||||||
|
# for exr in train.exercises:
|
||||||
|
# counter += 1
|
||||||
|
# unique_exercise_names[exr.name] += 1
|
||||||
|
#
|
||||||
|
# pprint(unique_exercise_names)
|
||||||
|
# print(counter)
|
||||||
|
# parsed_trainings = remap_unique_exercises(trainings)
|
||||||
|
#
|
||||||
|
# print("\n" * 3)
|
||||||
|
#
|
||||||
|
# unique_exercise_parsed_names = defaultdict(int)
|
||||||
|
# p_counter = 0
|
||||||
|
# for train in parsed_trainings:
|
||||||
|
# if not train:
|
||||||
|
# continue
|
||||||
|
# if train.exercises:
|
||||||
|
# for exr in train.exercises:
|
||||||
|
# p_counter += 1
|
||||||
|
# unique_exercise_parsed_names[exr.name] += 1
|
||||||
|
# pprint(unique_exercise_parsed_names)
|
||||||
|
# print(p_counter)
|
||||||
|
|
||||||
|
# Apple notes playground
|
||||||
|
|
||||||
|
# trainings: List[Training] = apple_parse_training_data()
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# unique_exercise_names = defaultdict(int)
|
||||||
|
# counter = 0
|
||||||
|
#
|
||||||
|
# for train in trainings:
|
||||||
|
# if not train:
|
||||||
|
# continue
|
||||||
|
# if train.exercises:
|
||||||
|
# for exr in train.exercises:
|
||||||
|
# if exr:
|
||||||
|
# counter += 1
|
||||||
|
# unique_exercise_names[exr.name] += 1
|
||||||
|
#
|
||||||
|
# pprint(unique_exercise_names)
|
||||||
|
# print(counter)
|
||||||
|
#
|
||||||
|
# parsed_trainings = apple_remaper(trainings)
|
||||||
|
#
|
||||||
|
# print("\n" * 3)
|
||||||
|
#
|
||||||
|
# unique_exercise_parsed_names = defaultdict(int)
|
||||||
|
# p_counter = 0
|
||||||
|
# for train in parsed_trainings:
|
||||||
|
# if not train:
|
||||||
|
# continue
|
||||||
|
# if train.exercises:
|
||||||
|
# for exr in train.exercises:
|
||||||
|
# if exr:
|
||||||
|
# p_counter += 1
|
||||||
|
# unique_exercise_parsed_names[exr.name] += 1
|
||||||
|
# pprint(unique_exercise_parsed_names)
|
||||||
|
# print(p_counter)
|
||||||
|
|
||||||
|
# Combined trainings
|
||||||
|
|
||||||
|
|
||||||
|
# obsidian_trainings: List[Training] = parse_training_data()
|
||||||
|
# obsidian_parsed_trainings = remap_unique_exercises(obsidian_trainings)
|
||||||
|
#
|
||||||
|
# apple_trainings: List[Training] = apple_parse_training_data()
|
||||||
|
# apple_parsed_trainings = apple_remaper(apple_trainings)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# combined_trainings = obsidian_trainings + apple_trainings
|
||||||
|
# unique_exercise_parsed_names = defaultdict(int)
|
||||||
|
# for train in combined_trainings:
|
||||||
|
# if not train:
|
||||||
|
# continue
|
||||||
|
# if train.exercises:
|
||||||
|
# for exr in train.exercises:
|
||||||
|
# if exr:
|
||||||
|
# unique_exercise_parsed_names[exr.name] += 1
|
||||||
|
# pprint(unique_exercise_parsed_names)
|
||||||
|
# print(len(combined_trainings))
|
||||||
|
|
||||||
|
# Async engine playground
|
||||||
|
|
||||||
|
# fbm = FitnessDatabseMigrator(async_engine=async_engine)
|
||||||
|
#
|
||||||
|
# asyncio.run(fbm.reset_database())
|
0
obsidian/__init__.py
Normal file
0
obsidian/__init__.py
Normal file
526
obsidian/examples/full.txt
Normal file
526
obsidian/examples/full.txt
Normal file
|
@ -0,0 +1,526 @@
|
||||||
|
|
||||||
|
# 07.01.2025 (solo-2)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | --------------------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 77-86-91-86 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-11-10 |
|
||||||
|
| Жим от груди (рычаги) | 15х2-25х2-27.5х2-30х2 | 12-12-12-8 |
|
||||||
|
| Отведение руки в кроссовере из за спины | 9-11-12 | 12-12-12 |
|
||||||
|
| Кроссовер - отжимание на трицепс | 33 | 12-12-12-12 |
|
||||||
|
|
||||||
|
# 04.01.2025 (solo-1)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | --------- | -------------- |
|
||||||
|
| Подтягивания | | 9-7-5 |
|
||||||
|
| Тяга горизонтального блока | 55-59 | 12-12-12-10 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 30 | 10х2-10х2-10х2 |
|
||||||
|
| Жим гантелей лежа | 18х2-20х2 | 12-12-11 |
|
||||||
|
| Разведение рук в стороны (дельт машина) | 47 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77 | 12-12-12 |
|
||||||
|
|
||||||
|
|
||||||
|
# 30.12.2024 (c166-115)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------- | --------- | ----------- |
|
||||||
|
| Подтягивания | | 11-8-6 |
|
||||||
|
| Тяга гантелей на скамье | 22х2-28х2 | 12-10-10-10 |
|
||||||
|
| Жим гантелей лежа | 16х2-28х2 | 12-10-6-7 |
|
||||||
|
| Сведение рук пек дек | 47 | 12-12-12 |
|
||||||
|
| Брусья 37 | 11-1011-10-10 |
|
||||||
|
|
||||||
|
# 27.12.2024 (c165-114)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------ | --------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 65-82-91 | 12-12-12 |
|
||||||
|
| Жим ногами | 100-150 | 12-10-10-10 |
|
||||||
|
| Гиперэкстензия | 15 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 12х2-20х2 | 12-10-10-10 |
|
||||||
|
| Разведение рук в стороны | 47 | 11-11-12 |
|
||||||
|
|
||||||
|
# 25.12.2024 (c164-113)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------- | --------- | ----------- |
|
||||||
|
| Тяга вертикального блока | 45-54-59 | 12-12-10-10 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 30-32 | 10-10-10 |
|
||||||
|
| Тяга горизонтального блока | 50 | 12-12-12 |
|
||||||
|
| Жим гантелей лежа | 16х2-24х2 | 12-10-10-10 |
|
||||||
|
| Сведение рук пек дек | 47 | 12-12-12 |
|
||||||
|
| | | |
|
||||||
|
|
||||||
|
# 20.12.2024 (с163-112)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------------------- | ----------- | -------- |
|
||||||
|
| Тяга вертикального блока | 41-59 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 28-32 | 12-8-8 |
|
||||||
|
| Жим гантелей лёжа | 14x14-26x26 | 12-8-8-8 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
| Сгибание рук с гантелями стоя (супинирование?) | 10х2 | 12-12-12 |
|
||||||
|
| Трицепс машина | 67 | 12-12-12 |
|
||||||
|
|
||||||
|
# 18.12.2024 (c162-111)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------------------------------- | --------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 77-91 | 12-12-12-11 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-10 |
|
||||||
|
| Жим гантелей сидя | 12х2-20х2 | 12-12-11-11 |
|
||||||
|
| Отведение руки в сторону (дефоли) в кроссовере | 13.5 | 12-12-12 |
|
||||||
|
| Отведение руки назад в кроссовере (аналог пек дек одной рукой) | 9 | 12-12-12 |
|
||||||
|
|
||||||
|
# 16.12.2024 (c161-110)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------------------------- | ------- | ----------- |
|
||||||
|
| Подтягивания | | 10-7-6 |
|
||||||
|
| Тяга горизонтального блока | 59 | 12-12-12 |
|
||||||
|
| Гребная тяга с упором в грудь (одна рука) | 20-22.5 | 12-11-12 |
|
||||||
|
| Жим от груди сидя (рычаги) | 30-60 | 12-10-11-10 |
|
||||||
|
| Трицепс машина | 77 | 12-12 |
|
||||||
|
|
||||||
|
# 13.12.2024 (c160-109)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------- | ---------- | -------- |
|
||||||
|
| Разгибание ног сидя | 49-81-90 | 12-12-12 |
|
||||||
|
| Жим ногами | 75-125-150 | 12-12-10 |
|
||||||
|
| Гиперэкстензия | 10-15 | 12-12-12 |
|
||||||
|
| Мах руки в кроссовере | 13.9 | 12-12-12 |
|
||||||
|
| Дельт машина | 47 | 12-11-12 |
|
||||||
|
| Разведение рук пек дек | 37 | 9-9-8 |
|
||||||
|
|
||||||
|
# 11.12.2024 (c159-108)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------- | ------- | -------- |
|
||||||
|
| Подтягивания | | 10-7-6 |
|
||||||
|
| Тяга горизонтального блока | 49-58 | 10-12-12 |
|
||||||
|
| Тяга горизонтального блока одной рукой | 31.8-36 | 12-10-10 |
|
||||||
|
| Жим от груди сидя в тренажёре (рычаги) | 50-60 | 12-10-8 |
|
||||||
|
| Сведение рук пёк дек | 47 | 10-9-10 |
|
||||||
|
| Брусья | 37 | 10 |
|
||||||
|
|
||||||
|
# 09.12.2024 (c158-107)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | ----------- | ----------- |
|
||||||
|
| Сгибание ног сидя | 54-77-91-86 | 12-12-11-12 |
|
||||||
|
| Жим ногами ш-ш-ш | 50-125-140 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-12 |
|
||||||
|
| Разведение рук в стороны (дельт-машина) | 37-47 | 12-12-12-12 |
|
||||||
|
| Жим гантелей сидя | 18х2 | 12-11-10 |
|
||||||
|
|
||||||
|
# 06.12.2024 (c157-106)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------- | -------- | -------- |
|
||||||
|
| Тяга вертикального блока | 40-54 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 26-28 | 10-10-10 |
|
||||||
|
| Тяга горизонтального блока | 59 | 12-12-12 |
|
||||||
|
| Жим от груди сидя рычаги | 30-70-60 | 12-6-7-7 |
|
||||||
|
| Баттерфляй | 57 | 12-12-8 |
|
||||||
|
| Трицепс машина | 77 | 12-12-11 |
|
||||||
|
|
||||||
|
# 04.12.2024 (c156-105)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | -------------- | ----------- |
|
||||||
|
| Жим ногами | 50-100-125-150 | 12-12-12-12 |
|
||||||
|
| Разгибание ног сидя | 77-87 | 12-12-12 |
|
||||||
|
| Сгибание ног сидя | 81 | 12-12-12 |
|
||||||
|
| Разведение рук в стороны (дельт-машина) | 37-47 | 12-12-12-12 |
|
||||||
|
| Жим от плеч вверх (тренажёр, рычаги) | 37 | 12-11-10 |
|
||||||
|
|
||||||
|
# 02.12.2024 (c155-104)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------- | --------- | --------- |
|
||||||
|
| Подтягивания | | 10-7-6 |
|
||||||
|
| Тяга горизонтального блока | 59 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 26 | 10-10-10 |
|
||||||
|
| Жим гантелей лёжа | 16х2-24х2 | 12-10-8-5 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
|
||||||
|
# 27.11.2024 (c154-103)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | -------- | ---------- |
|
||||||
|
| Разгибание ног сидя | 72-77-81 | 12-12-12 |
|
||||||
|
| Сгибание ног лежа | 37-47 | 12-12-10 |
|
||||||
|
| Икроножные сидя | 34 | 12-12-12 |
|
||||||
|
| Разведение рук в строоны (дельт-машина) | 37-47 | 12-12-12-9 |
|
||||||
|
| Жим гантелей сидя 85⁰ | 18х2 | 10-8-7 |
|
||||||
|
| Разведение рук назад пёк дек | 27-37 | 12-8 |
|
||||||
|
|
||||||
|
# 22.11.2024 (c153-102)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------- | -------------------- | -------- |
|
||||||
|
| Подтягивания | 0-0-зелёная резинка- | 9-7-7 |
|
||||||
|
| Тяга горизонтально блока одной рукой | 32 | 12-12-12 |
|
||||||
|
| Тяга вертикального блока прямым хватом | 47-57 | 12-9-9 |
|
||||||
|
| Жим от плеч сидя (рычаги наверху) | 77-87-77 | 12-10-11 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77 | 12-12 |
|
||||||
|
|
||||||
|
# 22.11.2024 (c153-102)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------- | -------------------- | ------------ |
|
||||||
|
| Подтягивания | 0-0-зелёная резинка- | 9-7-7 |
|
||||||
|
| Тяга горизонтально блока одной рукой | 32 | 12-12-12 |
|
||||||
|
| Тяга вертикального блока прямым хватом | 47-57 | 12-9-9 |
|
||||||
|
| Жим от плеч сидя (рычаги наверху) | 77-87-77 | 12-10-11 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77 | 12-12-==12== |
|
||||||
|
|
||||||
|
# 20.11.2024 (c152-101)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------- | -------------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 58-72-81 | 12-12-10-10 |
|
||||||
|
| Сгибание ног сидя | 72-81 | 12-12-12 |
|
||||||
|
| Отведение плеча в сторону в кроссовере | 21-23 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 18х2-18х2-16х2 | 9-10-12 |
|
||||||
|
| Разведение рук назад в пек дек | 37 | 9-8-9 |
|
||||||
|
|
||||||
|
# 18.11.2024 (c151-100)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------- | --------- | --------- |
|
||||||
|
| Подтягивания | | 10 |
|
||||||
|
| Подтягивания обратным хватом | | 7-6 |
|
||||||
|
| Вертикальная тяга одной рукой 45⁰ | 31-41 | 12-12-12 |
|
||||||
|
| Тяга горизонтального блока | 63-58-54 | 7-9-12 |
|
||||||
|
| Жим гантелей лёжа на скамейке 45⁰ | 16х2-22х2 | 12-10-8-8 |
|
||||||
|
| Баттерфляй | 47 | 12-12-12 |
|
||||||
|
| Брусья | 37-0-37 | 10-5-8 |
|
||||||
|
|
||||||
|
# 15.11.2024 (c150-99)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------------- | ----------- | --------------- |
|
||||||
|
| Выпады вперед на одну ногу | 0-12х2-16х2 | 8х2-8х2-7х2-7х2 |
|
||||||
|
| Сгибание ног сидя | 77-81 | 12-12-12 |
|
||||||
|
| Разведение рук в стророны (дельт-машина) | 37-47 | 12-12-12-9 |
|
||||||
|
| Жим гантелей сидя 80⁰ | 18х2 | 10-9-8 |
|
||||||
|
| Разведение рук пек дек | 37-27 | 9-12-12 |
|
||||||
|
| Подъём ног в висе | | 10-10-8 |
|
||||||
|
|
||||||
|
# 13.11.2024 (c149-98)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------- | --------- | -------- |
|
||||||
|
| Гравитрон (медленно вниз) | 47-37 | 12-9-7 |
|
||||||
|
| Тяга горизонтального блока | 58 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне | 26х2-28х2 | 12-10-10 |
|
||||||
|
| Жим гантелей на скамье 65⁰ | 14х2-22х2 | 12-9-8-8 |
|
||||||
|
| Баттерфляй | 47 | 12-12-12 |
|
||||||
|
|
||||||
|
# 11.11.2024 (c148-97)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | ---------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 49-72.5-82 | 12-12-12-12 |
|
||||||
|
| Румынская тяга | 22х2 | 12-12-12 |
|
||||||
|
| Икроножные сидя за | 34 | 12-12-12 |
|
||||||
|
| Дельт машина (разведение рук в стороны) | 47 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя 80⁰ | 20х2-18х2 | 7-9-10 |
|
||||||
|
|
||||||
|
# 08.11.2024 (solo-96)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------- | --------- | -------- |
|
||||||
|
| Подтягивания | | 10-7-5 |
|
||||||
|
| Тяга гантели в наклоне | 24-26 | 12-12-12 |
|
||||||
|
| Жим гантелей лежа | 20х2-22х2 | 12-12-9 |
|
||||||
|
| Тяга горизонтального блока | 47-47-57 | 12-12-12 |
|
||||||
|
| Тяга вертикального блока | 47 | 12-12-12 |
|
||||||
|
| Жим от плеч вверх рычаги | 37 | 12-11-8 |
|
||||||
|
|
||||||
|
# 06.11.2024 (c147-95)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------------- | -------------- | ----------- |
|
||||||
|
| Жим ногами | 50-100-100-125 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лёжа | 47 | 12-12-10 |
|
||||||
|
| Жим гантелей сидя на скамье | 12х2-20х2 | 12-9-9-8 |
|
||||||
|
| Разведение рук в стороны сидя | 37 | 12-12-12 |
|
||||||
|
| Разведение рук пек дек | 37-27 | 8-15-12 |
|
||||||
|
|
||||||
|
# 04.11.2024 (c146-94)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------- | -------- | ----------- |
|
||||||
|
| Подтягивания | | 9-7-6 |
|
||||||
|
| Тяга горизонтального блока | 45-54 | 12-12-12 |
|
||||||
|
| Тяга вертикального блока | 49 | 12-12-12 |
|
||||||
|
| Жим от груди рычаги | 57-77-87 | 12-12-12-12 |
|
||||||
|
| Сведение пек дек | 47 | 10-8-8 |
|
||||||
|
| Брусья | 47 | 12-12-12 |
|
||||||
|
|
||||||
|
# 01.11.2024 (c145-93)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | ----------- | --------- |
|
||||||
|
| Выпады с гантелями на одну ногу вперед | 12х12-16х16 | 8-8-8 |
|
||||||
|
| Гиперэкстензия | 10 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 12х2-20х2 | 12-11-9-8 |
|
||||||
|
| Разведение рук в стороны (дельт-машина) | 37-47-37 | 12-8-12 |
|
||||||
|
| Разведение рук пек дек | 27 | 12-12 |
|
||||||
|
|
||||||
|
# 30.10.2024 (c144-92)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------- | ----- | -------- |
|
||||||
|
| Гравитрон | 47-37 | 12-11-9 |
|
||||||
|
| Гребная тяга с упором в грудь | 47 | 12-12-12 |
|
||||||
|
| Тяга горизонтального блока одной рукой | 27 | 12-12-12 |
|
||||||
|
| Отжимания | 15 | 9-7-7 |
|
||||||
|
| Баттерфляй | 57-47 | 10-12-12 |
|
||||||
|
| Брусья | 37 | 12-11 |
|
||||||
|
|
||||||
|
# 28.10.2024 (c143-91)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | ---------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 49-77-90.5 | 12-12-10-10 |
|
||||||
|
| Сгибание ног сидя | 58-72-77 | 12-12-12-12 |
|
||||||
|
| Икроножные сидя | 27-34 | 12-12-12-12 |
|
||||||
|
| Разведение рук пек дек | 27 | 12-12-12 |
|
||||||
|
| Разведение рук в стороны (дельт-машина) | 27 | 12-12-12 |
|
||||||
|
| | | |
|
||||||
|
|
||||||
|
# 26.10.2024 (solo-90)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------------------------- | ----------- | ---------- |
|
||||||
|
| Подтягивания | | 9-7-6 |
|
||||||
|
| Тяга горизонтального блока | 57 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне | 26 | 12-12-12 |
|
||||||
|
| Жим от груди сидя в тренажёре (рычаги) | 40-60-60-40 | 12-11-9-10 |
|
||||||
|
| Разведение рук в стороны с гантелями стоя | 9х2 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77-87 | 12-12-9 |
|
||||||
|
|
||||||
|
# 23.10.2024 (solo-89)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------ | -------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 72-78-81 | 12-12-12-12 |
|
||||||
|
| Икроножные сидя | 27-34 | 12-12-12-12 |
|
||||||
|
| Сгибание штанги стоя на бицепс | 20 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лёжа | 37 | 12-12-11-10 |
|
||||||
|
| Гиперэкстензия | 10 | 12-12-12-12 |
|
||||||
|
|
||||||
|
# 21.10.2024 (c142-88)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------------- | ----- | -------- |
|
||||||
|
| Подтягивания | | 10-6-6 |
|
||||||
|
| Тяга гантели лежа в наклоне на скамье | 22х2 | 12-12-12 |
|
||||||
|
| Тяга вертикального блока обратным хватом | 54.4 | 12-12-12 |
|
||||||
|
| Жим от груди сидя (рычаги) | 67-87 | 12-12-12 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77 | 12-12-12 |
|
||||||
|
|
||||||
|
# 18.10.2024 (c141-87)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------- | --------- | ----------- |
|
||||||
|
| Выпады вперед по очереди каждой ногой | 0-20 | 12-16-16-16 |
|
||||||
|
| Гиперэкстензия | 10 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя 90⁰ | 12х2-18х2 | 12-12-12-10 |
|
||||||
|
| Разведение рук в стороны в тренажаре | 37 | 12-12-12 |
|
||||||
|
| Разведение рук пёк дек | 27 | 12-12-12 |
|
||||||
|
|
||||||
|
# 16.10.2024 (c140-86)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------ | ---------------- | ----------- |
|
||||||
|
| Подтягивания обратным хватом | | 11-8-6 |
|
||||||
|
| Тяга горизонтального блока | 57 | 12-11-12 |
|
||||||
|
| Тяга вертикального блока | 54-59-54 | 12-8-12 |
|
||||||
|
| Жим от груди рычаги | 15х2-25х2-27.5х2 | 12-12-12-11 |
|
||||||
|
| Сведение рук пек дек | 37 | 12-12-12 |
|
||||||
|
| Разгибание рук сидя (трицепс машина) | 77-87 | 12-10-9 |
|
||||||
|
|
||||||
|
# 14.10.2024 (c139-85)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------------- | -------------- | ----------- |
|
||||||
|
| Жим ногами | 75-150 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47-47-37 | 12-10-12 |
|
||||||
|
| Икроножные сидя | 34 | 12-12-12 |
|
||||||
|
| Разведение рук в стороны | 37 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 18х2-18х2-16х2 | 12-10-10 |
|
||||||
|
| Разведение рук в наклоне сидя | 6х2 | 12 |
|
||||||
|
|
||||||
|
# 11.10.2024 (c138-84)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------- | -------------- | --------- |
|
||||||
|
| Подтягивания | | 10-6-6 |
|
||||||
|
| Гребная тяга с упорм в грудь | 47-51 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне | 26-28 | 12-12-12 |
|
||||||
|
| Жим гантелей лёжа | 18х2-24х2-22х2 | 12-10-7-8 |
|
||||||
|
| Сведение рук в пек дек | 37 | 12-12-12 |
|
||||||
|
| Брусья узким хватом | 37 | 12-9-9 |
|
||||||
|
|
||||||
|
# 09.10.2024 (c137-83)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------------- | -------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 62-82-90 | 12-12-11-10 |
|
||||||
|
| Румынская тяга | 40 | 12-12-12 |
|
||||||
|
| Икроножные сидя | 27 | 16-15-14 |
|
||||||
|
| Разведение рук а стороны сидя | 47 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 18х2 | 11-12-12 |
|
||||||
|
| Разведение рук в наклоне | 7х2 | 12-12-12 |
|
||||||
|
|
||||||
|
# 07.10.2024 (c136-82)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------ | -------- | ---------- |
|
||||||
|
| Подтягивания | | 10-7-6 |
|
||||||
|
| Гребная тяга с упорм в грудь | 47 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне 1 рукой | 26 | 12-12-12 |
|
||||||
|
| Жим гантелей лежа на скамье | 40-48 | 12-10-8-7 |
|
||||||
|
| Баттерфляй | 57-67-57 | 12-7-10-10 |
|
||||||
|
| | | |
|
||||||
|
|
||||||
|
# 04.10.2024 (c135-81)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------ | ---------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 59-77-81.5 | 12-12-12-12 |
|
||||||
|
| Румынская тяга | 40 | 12-12-12 |
|
||||||
|
| Икроножные сидя | 27.2 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 32-36 | 12-12-12 |
|
||||||
|
| Разведение рук в стороны | 47 | 12-12-10 |
|
||||||
|
|
||||||
|
# 02.10.2024 (c134-80)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------- | ----- | -------- |
|
||||||
|
| Подтягивания | | 10-7-5 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 24-26 | 12-12-12 |
|
||||||
|
| Тяга верхнего блока | 54-49 | 12-9-12 |
|
||||||
|
| Жим от груди рычаги | 77-87 | 12-12-11 |
|
||||||
|
| Брусья | 0-47 | 4-10 |
|
||||||
|
|
||||||
|
# 25.09.2024 (c133-79)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------- | -------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 67-87-97 | 12-12-12-12 |
|
||||||
|
| Гиперэкстензия | 10 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя 80⁰ | 36 | 12-12-10 |
|
||||||
|
| Отведение руки в пек дек (по очереди) | 11 | 12-12-12 |
|
||||||
|
| Разведение рук пек дек | 27 | 12 |
|
||||||
|
|
||||||
|
# 23.09.2024 (c132-78)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | -------- | ---------- |
|
||||||
|
| Подтянивания | | 10-7-5 |
|
||||||
|
| Тяга горизонтального блока | 47-57 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне к поясу к стойки | 26 | 12-12-12 |
|
||||||
|
| Жим от груди рычаги | 40-60 | 12-12-9-11 |
|
||||||
|
| Сведение рук пек дек | 37-47-37 | 12-9-12 |
|
||||||
|
|
||||||
|
# 11.09.2024 (c131-77)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------- | ----------- | --------- |
|
||||||
|
| Подтягивания | | 11-8-7 |
|
||||||
|
| Гребная тяга с упором в грудь | 47 | 12-12-12 |
|
||||||
|
| Тяга верхнего блока за | 58.9 | 10-10-10 |
|
||||||
|
| Жим от плеч сидя в тренажере (рычаги) | 40-70-70-60 | 12-11-9-9 |
|
||||||
|
| Сведение рук в пек декх | 37-47 | 12-11-10 |
|
||||||
|
| Трицепс машина | 77 | 12-12-12 |
|
||||||
|
|
||||||
|
# 09.09.2024 (c130-76)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------- | ----- | ----------- |
|
||||||
|
| Болгарские приседания на одну ногу | 16-25 | 10-10-10 |
|
||||||
|
| Гиперэкстензия | 15 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя 8⁰ | 16-36 | 10-12-12-12 |
|
||||||
|
| Разведение рук в стороны стоя | 20 | 12-12-12-12 |
|
||||||
|
| Разведение рук в наклоне | 8х8 | 12-12-12 |
|
||||||
|
|
||||||
|
# 06.09.2024 (c129-75)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------------------- | ----------- | -------- |
|
||||||
|
| Подтягивания | 0 | 11-8-7-4 |
|
||||||
|
| Тяга гантелей к поясу лёжа на животе на скамье | 40-52 | 12-12-12 |
|
||||||
|
| Тяга горизонтального блока 1 рукой поочерёдно | 32 | 12-12-12 |
|
||||||
|
| Жим гантелей лежа на скамье | 36-52-52-44 | 12-8-6-8 |
|
||||||
|
| Баттерфляй | 57-47 | 12-9-12 |
|
||||||
|
|
||||||
|
# 04.09.2024 (c128-74)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------------------- | -------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 77-77-95 | 12-12-10-10 |
|
||||||
|
| Приседания | 30 | 12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-10 |
|
||||||
|
| Отведение руки в пек дек (по очереди каждой рукой) | 13.6 | 12-12-12 |
|
||||||
|
| Жим от плеч вверх в тренажёре | 37 | 12-12-10 |
|
||||||
|
| Разведение рук в наклоне | 8х8 | 12-12-12 |
|
||||||
|
# 02.09.2024 (c127-73)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------- | ----------- | --------- |
|
||||||
|
| Подтягивания | 0 | 9-6-6 |
|
||||||
|
| Тяга гантелей в наклоне | 30 | 12-12-10 |
|
||||||
|
| Тяга горизонтального блока | 45.3 | 12-10-12 |
|
||||||
|
| Жим от плеч вверх рычаги | 40-70-70-60 | 12-10-9-9 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
| Брусья узким хватом | 37 | 9-8-10 |
|
||||||
|
# 30.08.2024 (c126-72)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------------------ | -------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 59-77-86 | 12-12-12-12 |
|
||||||
|
| Жим ногами | 150 | 12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-12 |
|
||||||
|
| Разведение рук в стороны сидя спиной к тренажеру | 47 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя на лавке 80⁰ | 18х2 | |
|
||||||
|
# 28.08.2024 (c125-71)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------------- | -------------- | --------- |
|
||||||
|
| Подтягивания | 0 | 9-7-6 |
|
||||||
|
| Тяга горизонтального блока | 57 | 12-12-12 |
|
||||||
|
| Тяга гантели в наклоне одной рукой (каждой) | 24-26 | 12-12-12 |
|
||||||
|
| Жим гантелей лежа на скамье 30⁰ | 18х2-24х2-22х2 | 12-9-10-8 |
|
||||||
|
| Сведение рук пек дек | 47 | 12-12-10 |
|
||||||
|
| | | |
|
||||||
|
|
||||||
|
# 26.08.2024 (с124-70)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| -------------------------------------------------- | ----------- | ----------- |
|
||||||
|
| Сгибание ног лежа | 37-47 | 12-12-12 |
|
||||||
|
| Жим ногами | 100-150-175 | 12-10-10-10 |
|
||||||
|
| Отведение руки в кроссовере по очереди каждую руку | 13.6 | 12-12-12-12 |
|
||||||
|
| Жим от плеч вверх в тренажёре | 37 | 12-12-10 |
|
||||||
|
| Разведение рук в стороны в наклоне с гантелями | 8х2 | 12-12 |
|
||||||
|
|
||||||
|
# 21.08.2024 (с123-69)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------------------------ | -------- | ----------- |
|
||||||
|
| Подтягивания | 0-37-37 | 7-10-7 |
|
||||||
|
| Тяга гантелей лежа на животе на скамье 80° | 36-48 | 12-12-12-12 |
|
||||||
|
| Тяга вертикального блока | 59 | 10-9-10 |
|
||||||
|
| Жим от груди сидя в тренажере (рычаги) | 40-60-60 | 12-12-10 |
|
||||||
|
| Баттерфляй | 57 | 12-12-12 |
|
||||||
|
|
53
obsidian/examples/notes.txt
Normal file
53
obsidian/examples/notes.txt
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# 07.01.2025 (solo-2)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | --------------------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 77-86-91-86 | 12-12-12-12 |
|
||||||
|
| Сгибание ног лежа | 47 | 12-12-11-10 |
|
||||||
|
| Жим от груди (рычаги) | 15х2-25х2-27.5х2-30х2 | 12-12-12-8 |
|
||||||
|
| Отведение руки в кроссовере из за спины | 9-11-12 | 12-12-12 |
|
||||||
|
| Кроссовер - отжимание на трицепс | 33 | 12-12-12-12 |
|
||||||
|
|
||||||
|
# 04.01.2025 (solo-1)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| --------------------------------------- | --------- | -------------- |
|
||||||
|
| Подтягивания | | 9-7-5 |
|
||||||
|
| Тяга горизонтального блока | 55-59 | 12-12-12-10 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 30 | 10х2-10х2-10х2 |
|
||||||
|
| Жим гантелей лежа | 18х2-20х2 | 12-12-11 |
|
||||||
|
| Разведение рук в стороны (дельт машина) | 47 | 12-12-12 |
|
||||||
|
| Трицепс машина | 77 | 12-12-12 |
|
||||||
|
|
||||||
|
|
||||||
|
# 30.12.2024 (c166-115)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ----------------------- | --------- | ----------- |
|
||||||
|
| Подтягивания | | 11-8-6 |
|
||||||
|
| Тяга гантелей на скамье | 22х2-28х2 | 12-10-10-10 |
|
||||||
|
| Жим гантелей лежа | 16х2-28х2 | 12-10-6-7 |
|
||||||
|
| Сведение рук пек дек | 47 | 12-12-12 |
|
||||||
|
| Брусья 37 | 11-1011-10-10 |
|
||||||
|
|
||||||
|
# 27.12.2024 (c165-114)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ------------------------ | --------- | ----------- |
|
||||||
|
| Разгибание ног сидя | 65-82-91 | 12-12-12 |
|
||||||
|
| Жим ногами | 100-150 | 12-10-10-10 |
|
||||||
|
| Гиперэкстензия | 15 | 12-12-12 |
|
||||||
|
| Жим гантелей сидя | 12х2-20х2 | 12-10-10-10 |
|
||||||
|
| Разведение рук в стороны | 47 | 11-11-12 |
|
||||||
|
|
||||||
|
# 25.12.2024 (c164-113)
|
||||||
|
|
||||||
|
| Упражнение | Вес | Подходы |
|
||||||
|
| ---------------------------------- | --------- | ----------- |
|
||||||
|
| Тяга вертикального блока | 45-54-59 | 12-12-10-10 |
|
||||||
|
| Тяга гантели в наклоне одной рукой | 30-32 | 10-10-10 |
|
||||||
|
| Тяга горизонтального блока | 50 | 12-12-12 |
|
||||||
|
| Жим гантелей лежа | 16х2-24х2 | 12-10-10-10 |
|
||||||
|
| Сведение рук пек дек | 47 | 12-12-12 |
|
||||||
|
| | | |
|
||||||
|
|
156
obsidian/mapper.py
Normal file
156
obsidian/mapper.py
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
list_of_unique_names = [
|
||||||
|
"Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантелей на скамье",
|
||||||
|
"Тяга вертикального блока",
|
||||||
|
"Тяга вертикального блока (обратный хват)",
|
||||||
|
"Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Подъем штанги на бицепс стоя",
|
||||||
|
"Подъем гантелей на бицепс стоя",
|
||||||
|
"Сгибание ног сидя",
|
||||||
|
"Сгибание ног лежа",
|
||||||
|
"Сведение рук в пек-дек",
|
||||||
|
"Румынская тяга",
|
||||||
|
"Разгибание ног сидя",
|
||||||
|
"Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Приседания",
|
||||||
|
"Подъём ног в висе",
|
||||||
|
"Подтягивания",
|
||||||
|
"Подтягивания обратным хватом",
|
||||||
|
"Отжимания",
|
||||||
|
"Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Разведение рук в пек-дек (по очереди)",
|
||||||
|
"Разведение рук в пек-дек",
|
||||||
|
"Отжимание на трицепс в кроссовере",
|
||||||
|
"Баттерфляй",
|
||||||
|
"Болгарские сплит-приседения",
|
||||||
|
"Брусья",
|
||||||
|
"Вертикальная тяга одной рукой",
|
||||||
|
"Выпады",
|
||||||
|
"Гиперэкстензия",
|
||||||
|
"Гравитрон",
|
||||||
|
"Гребная тяга с упором в грудь (по очереди)",
|
||||||
|
"Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей сидя",
|
||||||
|
"Жим ногами",
|
||||||
|
"Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Икроножные сидя",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
obsidian_unique_exercies_mapping = {
|
||||||
|
"Баттерфляй": "Баттерфляй",
|
||||||
|
"Болгарские приседания на одну ногу": "Болгарские сплит-приседения",
|
||||||
|
"Брусья": "Брусья",
|
||||||
|
"Брусья узким хватом": "Брусья",
|
||||||
|
"Вертикальная тяга одной рукой 45⁰": "Вертикальная тяга одной рукой",
|
||||||
|
"Выпады вперед по очереди каждой ногой": "Выпады",
|
||||||
|
"Выпады с гантелями на одну ногу вперед": "Выпады",
|
||||||
|
"Гиперэкстензия": "Гиперэкстензия",
|
||||||
|
"Гравитрон": "Гравитрон",
|
||||||
|
"Гравитрон (медленно вниз)": "Гравитрон",
|
||||||
|
"Гребная тяга с упорм в грудь": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга с упором в грудь": "Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга с упором в грудь (одна рука)": "Гребная тяга с упором в грудь (по очереди)",
|
||||||
|
"Дельт машина": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Дельт машина (разведение рук в стороны)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Жим гантелей лежа": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа на скамье": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа на скамье 30⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей лёжа": "Жим гантелей лежа",
|
||||||
|
"Жим гантелей лёжа на скамейке 45⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей на скамье 65⁰": "Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей сидя": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя 80⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя 85⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя 8⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя 90⁰": "Жим гантелей сидя",
|
||||||
|
"Жим гантелей сидя на скамье": "Жим гантелей сидя",
|
||||||
|
"Жим ногами": "Жим ногами",
|
||||||
|
"Жим ногами ш-ш-ш": "Жим ногами",
|
||||||
|
"Жим от груди (рычаги)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди рычаги": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя (рычаги)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя в тренажере (рычаги)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя в тренажёре (рычаги)": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от груди сидя рычаги": "Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх (тренажёр, рычаги)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх в тренажёре": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх рычаги": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч сидя (рычаги наверху)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Жим от плеч сидя в тренажере (рычаги)": "Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Икроножные сидя": "Икроножные сидя",
|
||||||
|
"Икроножные сидя за": "Икроножные сидя",
|
||||||
|
"Кроссовер - отжимание на трицепс": "Отжимание на трицепс в кроссовере",
|
||||||
|
"Мах руки в кроссовере": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение плеча в сторону в кроссовере": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в кроссовере из за спины": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в кроссовере по очереди каждую руку": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки в пек дек (по очереди каждой рукой)": "Разведение рук в пек-дек (по очереди)",
|
||||||
|
"Отведение руки в пек дек (по очереди)": "Разведение рук в пек-дек (по очереди)",
|
||||||
|
"Отведение руки в сторону (дефоли) в кроссовере": "Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Отведение руки назад в кроссовере (аналог пек дек одной рукой)": "Разведение рук в пек-дек (по очереди)",
|
||||||
|
"Отжимания": "Отжимания",
|
||||||
|
"Подтягивания": "Подтягивания",
|
||||||
|
"Подтягивания обратным хватом": "Подтягивания обратным хватом",
|
||||||
|
"Подтянивания": "Подтягивания",
|
||||||
|
"Подъём ног в висе": "Подъём ног в висе",
|
||||||
|
"Приседания": "Приседания",
|
||||||
|
"Разведение рук а стороны сидя": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в наклоне": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в наклоне сидя": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в стороны": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны (дельт машина)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны (дельт-машина)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны в наклоне с гантелями": "Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Разведение рук в стороны в тренажаре": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны с гантелями стоя": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в стороны сидя": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны сидя спиной к тренажеру": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стороны стоя": "Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в строоны (дельт-машина)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук в стророны (дельт-машина)": "Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Разведение рук назад в пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук назад пёк дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук пек дек": "Разведение рук в пек-дек",
|
||||||
|
"Разведение рук пёк дек": "Разведение рук в пек-дек",
|
||||||
|
"Разгибание ног сидя": "Разгибание ног сидя",
|
||||||
|
"Разгибание рук сидя (трицепс машина)": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Румынская тяга": "Румынская тяга",
|
||||||
|
"Сведение пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук в пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук в пек декх": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук пек дек": "Сведение рук в пек-дек",
|
||||||
|
"Сведение рук пёк дек": "Сведение рук в пек-дек",
|
||||||
|
"Сгибание ног лежа": "Сгибание ног лежа",
|
||||||
|
"Сгибание ног лёжа": "Сгибание ног лежа",
|
||||||
|
"Сгибание ног сидя": "Сгибание ног сидя",
|
||||||
|
"Сгибание рук с гантелями стоя (супинирование?)": "Подъем гантелей на бицепс стоя",
|
||||||
|
"Сгибание штанги стоя на бицепс": "Подъем штанги на бицепс стоя",
|
||||||
|
"Трицепс машина": "Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Тяга вертикального блока": "Тяга вертикального блока",
|
||||||
|
"Тяга вертикального блока обратным хватом": "Тяга вертикального блока (обратный хват)",
|
||||||
|
"Тяга вертикального блока прямым хватом": "Тяга вертикального блока",
|
||||||
|
"Тяга верхнего блока": "Тяга вертикального блока",
|
||||||
|
"Тяга верхнего блока за": "Тяга вертикального блока",
|
||||||
|
"Тяга гантелей в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантелей к поясу лёжа на животе на скамье": "Тяга гантелей на скамье",
|
||||||
|
"Тяга гантелей лежа на животе на скамье 80°": "Тяга гантелей на скамье",
|
||||||
|
"Тяга гантелей на скамье": "Тяга гантелей на скамье",
|
||||||
|
"Тяга гантели в наклоне": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне 1 рукой": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне к поясу к стойки": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне одной рукой": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели в наклоне одной рукой (каждой)": "Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантели лежа в наклоне на скамье": "Тяга гантелей на скамье",
|
||||||
|
"Тяга горизонтально блока одной рукой": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга горизонтального блока": "Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блока 1 рукой поочерёдно": "Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга горизонтального блока одной рукой": "Тяга горизонтального блока (по очереди)",
|
||||||
|
}
|
||||||
|
|
121
obsidian/notes_parser.py
Normal file
121
obsidian/notes_parser.py
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
from pprint import pprint
|
||||||
|
from typing import List, Tuple
|
||||||
|
from datetime import datetime
|
||||||
|
from obsidian.mapper import obsidian_unique_exercies_mapping
|
||||||
|
|
||||||
|
from obsidian.py_models import Approach, Exercise, Training
|
||||||
|
|
||||||
|
current_directory = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_path():
|
||||||
|
return current_directory
|
||||||
|
|
||||||
|
|
||||||
|
def get_obsidian_examples_file(example_file_name: str):
|
||||||
|
return os.path.join(get_current_path(), f"examples/{example_file_name}")
|
||||||
|
|
||||||
|
|
||||||
|
def read_example_file(example_file_name: str):
|
||||||
|
path_to_example: str = get_obsidian_examples_file(example_file_name)
|
||||||
|
with open(path_to_example, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def serialize_exercise(reps: str, weight: str, name: str) -> Exercise:
|
||||||
|
# Split reps into array of int's
|
||||||
|
reps: List[int] = [int(rep) for rep in reps.split("-")]
|
||||||
|
weight_splitted: bool = False
|
||||||
|
if weight:
|
||||||
|
weight: List[str] = [weight for weight in weight.split("-")]
|
||||||
|
# Check if weight is splitted
|
||||||
|
if any(split_anchor in weight[0] for split_anchor in ["x", "х"]):
|
||||||
|
weight_splitted = True
|
||||||
|
splitter = "x" if "x" in weight[0] else "х"
|
||||||
|
weight: List[float] = [xweight.split(splitter)[0] for xweight in weight]
|
||||||
|
approaches = []
|
||||||
|
if not weight:
|
||||||
|
for rep_index in range(0, len(reps)):
|
||||||
|
approach = Approach(weight=0, reps=reps[rep_index])
|
||||||
|
approaches.append(approach)
|
||||||
|
else:
|
||||||
|
weight_pointer = 0
|
||||||
|
for rep_index in range(0, len(reps)):
|
||||||
|
approach = Approach(weight=weight[weight_pointer], reps=reps[rep_index])
|
||||||
|
if rep_index < len(weight) - 1:
|
||||||
|
weight_pointer += 1
|
||||||
|
approaches.append(approach)
|
||||||
|
exercise = Exercise(
|
||||||
|
name=name, approaches=approaches, splitted_weight=weight_splitted
|
||||||
|
)
|
||||||
|
return exercise
|
||||||
|
|
||||||
|
|
||||||
|
def parse_training_exercises(exercise_line: str) -> Exercise:
|
||||||
|
stripped: List[str] = [entry.strip() for entry in exercise_line.split("|")][1:-1]
|
||||||
|
for entry in stripped:
|
||||||
|
if entry in ["Упражнение", "Вес", "Подходы"]:
|
||||||
|
raise ValueError
|
||||||
|
if stripped:
|
||||||
|
if "---" in stripped[0]:
|
||||||
|
raise ValueError
|
||||||
|
if len(stripped) != 3:
|
||||||
|
raise ValueError
|
||||||
|
return serialize_exercise(
|
||||||
|
name=stripped[0], weight=stripped[1], reps=stripped[2]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_training_header(
|
||||||
|
training_data_line: str,
|
||||||
|
) -> Tuple[bool, str, str, str]:
|
||||||
|
pattern: str = r"#\s(?P<date>\d+.\d+.\d+)\s\((?P<trainer>.+)-(?P<year_counter>.+)\)"
|
||||||
|
match = re.search(pattern, training_data_line)
|
||||||
|
if match:
|
||||||
|
date = match.group("date").strip()
|
||||||
|
trainer = match.group("trainer").strip()
|
||||||
|
year_count = match.group("year_counter").strip()
|
||||||
|
return True, date, trainer, year_count
|
||||||
|
return False, "", "", ""
|
||||||
|
|
||||||
|
|
||||||
|
def filter_training_data(training_data: str):
|
||||||
|
cleaned_text = re.sub(r"^\s*?\n", "", training_data, flags=re.MULTILINE)
|
||||||
|
return cleaned_text
|
||||||
|
|
||||||
|
|
||||||
|
def parse_training_data():
|
||||||
|
training_data: str = filter_training_data(read_example_file("full.txt"))
|
||||||
|
lines = training_data.splitlines()
|
||||||
|
current_training = None
|
||||||
|
trains = []
|
||||||
|
for index, line in enumerate(lines):
|
||||||
|
header_parsed, date, trainer, year_count = parse_training_header(line)
|
||||||
|
if index == len(lines) - 1:
|
||||||
|
trains.append(current_training)
|
||||||
|
if header_parsed:
|
||||||
|
trains.append(current_training)
|
||||||
|
current_training = Training(
|
||||||
|
date=datetime.strptime(date, "%d.%m.%Y").date(), exercises=[]
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
exr = parse_training_exercises(line)
|
||||||
|
current_training.exercises.append(exr)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
return trains
|
||||||
|
|
||||||
|
|
||||||
|
def remap_unique_exercises(obsidian_trainings: List[Training]) -> List[Training]:
|
||||||
|
for obsidian_training in obsidian_trainings:
|
||||||
|
if not obsidian_training:
|
||||||
|
continue
|
||||||
|
for obsidian_exercise in obsidian_training.exercises:
|
||||||
|
obsidian_exercise.name = obsidian_unique_exercies_mapping.get(
|
||||||
|
obsidian_exercise.name
|
||||||
|
)
|
||||||
|
return obsidian_trainings
|
22
obsidian/py_models.py
Normal file
22
obsidian/py_models.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
from typing import List, Optional
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from datetime import date
|
||||||
|
|
||||||
|
|
||||||
|
class Approach(BaseModel):
|
||||||
|
weight: float
|
||||||
|
reps: int
|
||||||
|
|
||||||
|
|
||||||
|
class Exercise(BaseModel):
|
||||||
|
name: str
|
||||||
|
splitted_weight: bool = False
|
||||||
|
approaches: List[Approach]
|
||||||
|
|
||||||
|
|
||||||
|
class Training(BaseModel):
|
||||||
|
date: date
|
||||||
|
exercises: Optional[List[Exercise]]
|
||||||
|
|
||||||
|
class Coach(BaseModel):
|
||||||
|
name: str
|
72
obsidian/tests/test_obsidian_parser.py
Normal file
72
obsidian/tests/test_obsidian_parser.py
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
from obsidian.notes_parser import serialize_exercise
|
||||||
|
from obsidian.py_models import Approach, Exercise
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"reps, weight, name, expected",
|
||||||
|
[
|
||||||
|
(
|
||||||
|
"12-12-12-10",
|
||||||
|
"55-59",
|
||||||
|
"test_exercise",
|
||||||
|
Exercise(
|
||||||
|
name="test_exercise",
|
||||||
|
splitted_weight=False,
|
||||||
|
approaches=[
|
||||||
|
Approach(weight=55, reps=12),
|
||||||
|
Approach(weight=59, reps=12),
|
||||||
|
Approach(weight=59, reps=12),
|
||||||
|
Approach(weight=59, reps=10),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"11-9-7",
|
||||||
|
"",
|
||||||
|
"test_exercise",
|
||||||
|
Exercise(
|
||||||
|
name="test_exercise",
|
||||||
|
splitted_weight=False,
|
||||||
|
approaches=[
|
||||||
|
Approach(weight=0, reps=11),
|
||||||
|
Approach(weight=0, reps=9),
|
||||||
|
Approach(weight=0, reps=7),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"12-12-12-12",
|
||||||
|
"15х2-25х2-27.5х2-30х2",
|
||||||
|
"test_exercise",
|
||||||
|
Exercise(
|
||||||
|
name="test_exercise",
|
||||||
|
splitted_weight=True,
|
||||||
|
approaches=[
|
||||||
|
Approach(weight=15, reps=12),
|
||||||
|
Approach(weight=25, reps=12),
|
||||||
|
Approach(weight=27.5, reps=12),
|
||||||
|
Approach(weight=30, reps=12),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"12-12-12-12",
|
||||||
|
"15х2-25х2",
|
||||||
|
"test_exercise",
|
||||||
|
Exercise(
|
||||||
|
name="test_exercise",
|
||||||
|
splitted_weight=True,
|
||||||
|
approaches=[
|
||||||
|
Approach(weight=15, reps=12),
|
||||||
|
Approach(weight=25, reps=12),
|
||||||
|
Approach(weight=25, reps=12),
|
||||||
|
Approach(weight=25, reps=12),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_approach_parsing(reps, weight, name, expected):
|
||||||
|
exercise = serialize_exercise(reps, weight, name)
|
||||||
|
assert expected == exercise
|
0
parser.py
Normal file
0
parser.py
Normal file
3
playground/README.md
Normal file
3
playground/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Directory for testing hypotheses
|
||||||
|
## context.py
|
||||||
|
File for testing context operations
|
66
playground/contexts.py
Normal file
66
playground/contexts.py
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
class ContextPlayground:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.keka = "Hi, i am keka"
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
print("Entered context")
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
|
if exc_type:
|
||||||
|
print(f"\tException raised. Type: {exc_type}")
|
||||||
|
if exc_val:
|
||||||
|
print(f"\tException raised. Value: {exc_val}")
|
||||||
|
if exc_tb:
|
||||||
|
print(f"\tException raised. Traceback: {exc_tb}")
|
||||||
|
print("\tExiting context")
|
||||||
|
# Returning True means that context manager will supress the exception and it will not be propagated outside
|
||||||
|
# the with block. IOW it indicated, that exception is going to be handled inside context
|
||||||
|
return True
|
||||||
|
# Returning False means that the exception will be propagated and it will be raised outside the with block
|
||||||
|
# IOW it means that the exception will not be handled inside context manager and must be handled by the caller
|
||||||
|
# Note from documentation: __exit__() methods should not reraise the passed-in exception;
|
||||||
|
# this is the caller’s responsibility.
|
||||||
|
# return False # Or return None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with ContextPlayground() as kek:
|
||||||
|
print(f"\t\t{kek.keka}")
|
||||||
|
print("\t\tInside context")
|
||||||
|
|
||||||
|
print("Outside context")
|
||||||
|
|
||||||
|
class AsyncContextPlayground:
|
||||||
|
"""Asyncio version of ContextPlayground"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.keka = "Hi, i am async Keka"
|
||||||
|
|
||||||
|
async def __aenter__(self) -> None:
|
||||||
|
print("\tEntered async context")
|
||||||
|
return self
|
||||||
|
|
||||||
|
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
||||||
|
if exc_type:
|
||||||
|
print(f"\t\tException raised. Type: {exc_type}")
|
||||||
|
if exc_val:
|
||||||
|
print(f"\t\tException raised. Value: {exc_val}")
|
||||||
|
if exc_tb:
|
||||||
|
print(f"\t\tException raised. Traceback: {exc_tb}")
|
||||||
|
print("\tExiting async context")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
async def async_main():
|
||||||
|
async with AsyncContextPlayground() as kek:
|
||||||
|
print(f"\t\t{kek.keka}")
|
||||||
|
print("\t\tInside async context")
|
||||||
|
raise ValueError("An error occurred") # Uncomment to test exception handling
|
||||||
|
|
||||||
|
print("Outside async context")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(async_main())
|
||||||
|
|
773
poetry.lock
generated
Normal file
773
poetry.lock
generated
Normal file
|
@ -0,0 +1,773 @@
|
||||||
|
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "annotated-types"
|
||||||
|
version = "0.7.0"
|
||||||
|
description = "Reusable constraint types to use with typing.Annotated"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
|
||||||
|
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-timeout"
|
||||||
|
version = "5.0.1"
|
||||||
|
description = "Timeout context manager for asyncio programs"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"},
|
||||||
|
{file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "asyncpg"
|
||||||
|
version = "0.30.0"
|
||||||
|
description = "An asyncio PostgreSQL driver"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8.0"
|
||||||
|
files = [
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfb4dd5ae0699bad2b233672c8fc5ccbd9ad24b89afded02341786887e37927e"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc1f62c792752a49f88b7e6f774c26077091b44caceb1983509edc18a2222ec0"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3152fef2e265c9c24eec4ee3d22b4f4d2703d30614b0b6753e9ed4115c8a146f"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7255812ac85099a0e1ffb81b10dc477b9973345793776b128a23e60148dd1af"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:578445f09f45d1ad7abddbff2a3c7f7c291738fdae0abffbeb737d3fc3ab8b75"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c42f6bb65a277ce4d93f3fba46b91a265631c8df7250592dd4f11f8b0152150f"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-win32.whl", hash = "sha256:aa403147d3e07a267ada2ae34dfc9324e67ccc4cdca35261c8c22792ba2b10cf"},
|
||||||
|
{file = "asyncpg-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb622c94db4e13137c4c7f98834185049cc50ee01d8f657ef898b6407c7b9c50"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3326e6d7381799e9735ca2ec9fd7be4d5fef5dcbc3cb555d8a463d8460607956"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51da377487e249e35bd0859661f6ee2b81db11ad1f4fc036194bc9cb2ead5056"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc6d84136f9c4d24d358f3b02be4b6ba358abd09f80737d1ac7c444f36108454"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-win32.whl", hash = "sha256:574156480df14f64c2d76450a3f3aaaf26105869cad3865041156b38459e935d"},
|
||||||
|
{file = "asyncpg-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:3356637f0bd830407b5597317b3cb3571387ae52ddc3bca6233682be88bbbc1f"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c902a60b52e506d38d7e80e0dd5399f657220f24635fee368117b8b5fce1142e"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aca1548e43bbb9f0f627a04666fedaca23db0a31a84136ad1f868cb15deb6e3a"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c2a2ef565400234a633da0eafdce27e843836256d40705d83ab7ec42074efb3"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1292b84ee06ac8a2ad8e51c7475aa309245874b61333d97411aab835c4a2f737"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5712350388d0cd0615caec629ad53c81e506b1abaaf8d14c93f54b35e3595a"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db9891e2d76e6f425746c5d2da01921e9a16b5a71a1c905b13f30e12a257c4af"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-win32.whl", hash = "sha256:68d71a1be3d83d0570049cd1654a9bdfe506e794ecc98ad0873304a9f35e411e"},
|
||||||
|
{file = "asyncpg-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a0292c6af5c500523949155ec17b7fe01a00ace33b68a476d6b5059f9630305"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05b185ebb8083c8568ea8a40e896d5f7af4b8554b64d7719c0eaa1eb5a5c3a70"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c47806b1a8cbb0a0db896f4cd34d89942effe353a5035c62734ab13b9f938da3"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b6fde867a74e8c76c71e2f64f80c64c0f3163e687f1763cfaf21633ec24ec33"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46973045b567972128a27d40001124fbc821c87a6cade040cfcd4fa8a30bcdc4"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9110df111cabc2ed81aad2f35394a00cadf4f2e0635603db6ebbd0fc896f46a4"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04ff0785ae7eed6cc138e73fc67b8e51d54ee7a3ce9b63666ce55a0bf095f7ba"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-win32.whl", hash = "sha256:ae374585f51c2b444510cdf3595b97ece4f233fde739aa14b50e0d64e8a7a590"},
|
||||||
|
{file = "asyncpg-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:f59b430b8e27557c3fb9869222559f7417ced18688375825f8f12302c34e915e"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:29ff1fc8b5bf724273782ff8b4f57b0f8220a1b2324184846b39d1ab4122031d"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64e899bce0600871b55368b8483e5e3e7f1860c9482e7f12e0a771e747988168"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b290f4726a887f75dcd1b3006f484252db37602313f806e9ffc4e5996cfe5cb"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f86b0e2cd3f1249d6fe6fd6cfe0cd4538ba994e2d8249c0491925629b9104d0f"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:393af4e3214c8fa4c7b86da6364384c0d1b3298d45803375572f415b6f673f38"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fd4406d09208d5b4a14db9a9dbb311b6d7aeeab57bded7ed2f8ea41aeef39b34"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-win32.whl", hash = "sha256:0b448f0150e1c3b96cb0438a0d0aa4871f1472e58de14a3ec320dbb2798fb0d4"},
|
||||||
|
{file = "asyncpg-0.30.0-cp38-cp38-win_amd64.whl", hash = "sha256:f23b836dd90bea21104f69547923a02b167d999ce053f3d502081acea2fba15b"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f4e83f067b35ab5e6371f8a4c93296e0439857b4569850b178a01385e82e9ad"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5df69d55add4efcd25ea2a3b02025b669a285b767bfbf06e356d68dbce4234ff"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3479a0d9a852c7c84e822c073622baca862d1217b10a02dd57ee4a7a081f708"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26683d3b9a62836fad771a18ecf4659a30f348a561279d6227dab96182f46144"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1b982daf2441a0ed314bd10817f1606f1c28b1136abd9e4f11335358c2c631cb"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1c06a3a50d014b303e5f6fc1e5f95eb28d2cee89cf58384b700da621e5d5e547"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-win32.whl", hash = "sha256:1b11a555a198b08f5c4baa8f8231c74a366d190755aa4f99aacec5970afe929a"},
|
||||||
|
{file = "asyncpg-0.30.0-cp39-cp39-win_amd64.whl", hash = "sha256:8b684a3c858a83cd876f05958823b68e8d14ec01bb0c0d14a6704c5bf9711773"},
|
||||||
|
{file = "asyncpg-0.30.0.tar.gz", hash = "sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
async-timeout = {version = ">=4.0.3", markers = "python_version < \"3.11.0\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
docs = ["Sphinx (>=8.1.3,<8.2.0)", "sphinx-rtd-theme (>=1.2.2)"]
|
||||||
|
gssauth = ["gssapi", "sspilib"]
|
||||||
|
test = ["distro (>=1.9.0,<1.10.0)", "flake8 (>=6.1,<7.0)", "flake8-pyi (>=24.1.0,<24.2.0)", "gssapi", "k5test", "mypy (>=1.8.0,<1.9.0)", "sspilib", "uvloop (>=0.15.3)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorama"
|
||||||
|
version = "0.4.6"
|
||||||
|
description = "Cross-platform colored terminal text."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||||
|
files = [
|
||||||
|
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||||
|
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "exceptiongroup"
|
||||||
|
version = "1.2.2"
|
||||||
|
description = "Backport of PEP 654 (exception groups)"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
|
||||||
|
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
test = ["pytest (>=6)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "greenlet"
|
||||||
|
version = "3.1.1"
|
||||||
|
description = "Lightweight in-process concurrent programming"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"},
|
||||||
|
{file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"},
|
||||||
|
{file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"},
|
||||||
|
{file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"},
|
||||||
|
{file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"},
|
||||||
|
{file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"},
|
||||||
|
{file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"},
|
||||||
|
{file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"},
|
||||||
|
{file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
docs = ["Sphinx", "furo"]
|
||||||
|
test = ["objgraph", "psutil"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "grpcio"
|
||||||
|
version = "1.70.0"
|
||||||
|
description = "HTTP/2-based RPC framework"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:95469d1977429f45fe7df441f586521361e235982a0b39e33841549143ae2851"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:ed9718f17fbdb472e33b869c77a16d0b55e166b100ec57b016dc7de9c8d236bf"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:374d014f29f9dfdb40510b041792e0e2828a1389281eb590df066e1cc2b404e5"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2af68a6f5c8f78d56c145161544ad0febbd7479524a59c16b3e25053f39c87f"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7df14b2dcd1102a2ec32f621cc9fab6695effef516efbc6b063ad749867295"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c78b339869f4dbf89881e0b6fbf376313e4f845a42840a7bdf42ee6caed4b11f"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58ad9ba575b39edef71f4798fdb5c7b6d02ad36d47949cd381d4392a5c9cbcd3"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-win32.whl", hash = "sha256:2b0d02e4b25a5c1f9b6c7745d4fa06efc9fd6a611af0fb38d3ba956786b95199"},
|
||||||
|
{file = "grpcio-1.70.0-cp310-cp310-win_amd64.whl", hash = "sha256:0de706c0a5bb9d841e353f6343a9defc9fc35ec61d6eb6111802f3aa9fef29e1"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:17325b0be0c068f35770f944124e8839ea3185d6d54862800fc28cc2ffad205a"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:dbe41ad140df911e796d4463168e33ef80a24f5d21ef4d1e310553fcd2c4a386"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:5ea67c72101d687d44d9c56068328da39c9ccba634cabb336075fae2eab0d04b"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb5277db254ab7586769e490b7b22f4ddab3876c490da0a1a9d7c695ccf0bf77"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7831a0fc1beeeb7759f737f5acd9fdcda520e955049512d68fda03d91186eea"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:27cc75e22c5dba1fbaf5a66c778e36ca9b8ce850bf58a9db887754593080d839"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d63764963412e22f0491d0d32833d71087288f4e24cbcddbae82476bfa1d81fd"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-win32.whl", hash = "sha256:bb491125103c800ec209d84c9b51f1c60ea456038e4734688004f377cfacc113"},
|
||||||
|
{file = "grpcio-1.70.0-cp311-cp311-win_amd64.whl", hash = "sha256:d24035d49e026353eb042bf7b058fb831db3e06d52bee75c5f2f3ab453e71aca"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:ef4c14508299b1406c32bdbb9fb7b47612ab979b04cf2b27686ea31882387cff"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:aa47688a65643afd8b166928a1da6247d3f46a2784d301e48ca1cc394d2ffb40"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:880bfb43b1bb8905701b926274eafce5c70a105bc6b99e25f62e98ad59cb278e"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e654c4b17d07eab259d392e12b149c3a134ec52b11ecdc6a515b39aceeec898"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2394e3381071045a706ee2eeb6e08962dd87e8999b90ac15c55f56fa5a8c9597"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b3c76701428d2df01964bc6479422f20e62fcbc0a37d82ebd58050b86926ef8c"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac073fe1c4cd856ebcf49e9ed6240f4f84d7a4e6ee95baa5d66ea05d3dd0df7f"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-win32.whl", hash = "sha256:cd24d2d9d380fbbee7a5ac86afe9787813f285e684b0271599f95a51bce33528"},
|
||||||
|
{file = "grpcio-1.70.0-cp312-cp312-win_amd64.whl", hash = "sha256:0495c86a55a04a874c7627fd33e5beaee771917d92c0e6d9d797628ac40e7655"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa573896aeb7d7ce10b1fa425ba263e8dddd83d71530d1322fd3a16f31257b4a"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:d405b005018fd516c9ac529f4b4122342f60ec1cee181788249372524e6db429"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:f32090238b720eb585248654db8e3afc87b48d26ac423c8dde8334a232ff53c9"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa089a734f24ee5f6880c83d043e4f46bf812fcea5181dcb3a572db1e79e01c"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f19375f0300b96c0117aca118d400e76fede6db6e91f3c34b7b035822e06c35f"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:7c73c42102e4a5ec76608d9b60227d917cea46dff4d11d372f64cbeb56d259d0"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:0a5c78d5198a1f0aa60006cd6eb1c912b4a1520b6a3968e677dbcba215fabb40"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-win32.whl", hash = "sha256:fe9dbd916df3b60e865258a8c72ac98f3ac9e2a9542dcb72b7a34d236242a5ce"},
|
||||||
|
{file = "grpcio-1.70.0-cp313-cp313-win_amd64.whl", hash = "sha256:4119fed8abb7ff6c32e3d2255301e59c316c22d31ab812b3fbcbaf3d0d87cc68"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:8058667a755f97407fca257c844018b80004ae8035565ebc2812cc550110718d"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-macosx_10_14_universal2.whl", hash = "sha256:879a61bf52ff8ccacbedf534665bb5478ec8e86ad483e76fe4f729aaef867cab"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0ba0a173f4feacf90ee618fbc1a27956bfd21260cd31ced9bc707ef551ff7dc7"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558c386ecb0148f4f99b1a65160f9d4b790ed3163e8610d11db47838d452512d"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:412faabcc787bbc826f51be261ae5fa996b21263de5368a55dc2cf824dc5090e"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3b0f01f6ed9994d7a0b27eeddea43ceac1b7e6f3f9d86aeec0f0064b8cf50fdb"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7385b1cb064734005204bc8994eed7dcb801ed6c2eda283f613ad8c6c75cf873"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-win32.whl", hash = "sha256:07269ff4940f6fb6710951116a04cd70284da86d0a4368fd5a3b552744511f5a"},
|
||||||
|
{file = "grpcio-1.70.0-cp38-cp38-win_amd64.whl", hash = "sha256:aba19419aef9b254e15011b230a180e26e0f6864c90406fdbc255f01d83bc83c"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:4f1937f47c77392ccd555728f564a49128b6a197a05a5cd527b796d36f3387d0"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:0cd430b9215a15c10b0e7d78f51e8a39d6cf2ea819fd635a7214fae600b1da27"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:e27585831aa6b57b9250abaf147003e126cd3a6c6ca0c531a01996f31709bed1"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1af8e15b0f0fe0eac75195992a63df17579553b0c4af9f8362cc7cc99ccddf4"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbce24409beaee911c574a3d75d12ffb8c3e3dd1b813321b1d7a96bbcac46bf4"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ff4a8112a79464919bb21c18e956c54add43ec9a4850e3949da54f61c241a4a6"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5413549fdf0b14046c545e19cfc4eb1e37e9e1ebba0ca390a8d4e9963cab44d2"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-win32.whl", hash = "sha256:b745d2c41b27650095e81dea7091668c040457483c9bdb5d0d9de8f8eb25e59f"},
|
||||||
|
{file = "grpcio-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:a31d7e3b529c94e930a117b2175b2efd179d96eb3c7a21ccb0289a8ab05b645c"},
|
||||||
|
{file = "grpcio-1.70.0.tar.gz", hash = "sha256:8d1584a68d5922330025881e63a6c1b54cc8117291d382e4fa69339b6d914c56"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
protobuf = ["grpcio-tools (>=1.70.0)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "grpcio-tools"
|
||||||
|
version = "1.70.0"
|
||||||
|
description = "Protobuf code generator for gRPC"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:4d456521290e25b1091975af71604facc5c7db162abdca67e12a0207b8bbacbe"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d50080bca84f53f3a05452e06e6251cbb4887f5a1d1321d1989e26d6e0dc398d"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:02e3bf55fb569fe21b54a32925979156e320f9249bb247094c4cbaa60c23a80d"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88a3ec6fa2381f616d567f996503e12ca353777941b61030fd9733fd5772860e"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6034a0579fab2aed8685fa1a558de084668b1e9b01a82a4ca7458b9bedf4654c"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:701bbb1ff406a21a771f5b1df6be516c0a59236774b6836eaad7696b1d128ea8"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eeb86864e1432fc1ab61e03395a2a4c04e9dd9c89db07e6fe68c7c2ac8ec24f"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-win32.whl", hash = "sha256:d53c8c45e843b5836781ad6b82a607c72c2f9a3f556e23d703a0e099222421fa"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp310-cp310-win_amd64.whl", hash = "sha256:22024caee36ab65c2489594d718921dcbb5bd18d61c5417a9ede94fd8dc8a589"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:5f5aba12d98d25c7ab2dd983939e2c21556a7d15f903b286f24d88d2c6e30c0a"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:d47a6c6cfc526b290b7b53a37dd7e6932983f7a168b56aab760b4b597c47f30f"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5a9beadd1e24772ffa2c70f07d72f73330d356b78b246e424f4f2ed6c6713f3"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb8135eef160a62505f074bf7a3d62f3b13911c3c14037c5392bf877114213b5"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7ac9b3e13ace8467a586c53580ee22f9732c355583f3c344ef8c6c0666219cc"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:63f367363a4a1489a0046b19f9d561216ea0d206c40a6f1bf07a58ccfb7be480"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54ceffef59a059d2c7304554a8bbb20eedb05a3f937159ab1c332c1b28e12c9f"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-win32.whl", hash = "sha256:7a90a66a46821140a2a2b0be787dfabe42e22e9a5ba9cc70726b3e5c71a3b785"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp311-cp311-win_amd64.whl", hash = "sha256:4ebf09733545a69c166b02caa14c34451e38855544820dab7fdde5c28e2dbffe"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:ec5d6932c3173d7618267b3b3fd77b9243949c5ec04302b7338386d4f8544e0b"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:f22852da12f53b02a3bdb29d0c32fcabab9c7c8f901389acffec8461083f110d"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:7d45067e6efd20881e98a0e1d7edd7f207b1625ad7113321becbfe0a6ebee46c"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3020c97f03b30eee3c26aa2a55fbe003f1729c6f879a378507c2c78524db7c12"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7fd472fce3b33bdf7fbc24d40da7ab10d7a088bcaf59c37433c2c57330fbcb6"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3875543d74ce1a698a11f498f83795216ce929cb29afa5fac15672c7ba1d6dd2"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a130c24d617a3a57369da784080dfa8848444d41b7ae1250abc06e72e706a8d9"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-win32.whl", hash = "sha256:8eae17c920d14e2e451dbb18f5d8148f884e10228061941b33faa8fceee86e73"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp312-cp312-win_amd64.whl", hash = "sha256:99caa530242a0a832d8b6a6ab94b190c9b449d3e237f953911b4d56207569436"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:f024688d04e7a9429489ed695b85628075c3c6d655198ba3c6ccbd1d8b7c333b"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:1fa9a81621d7178498dedcf94eb8f276a7594327faf3dd5fd1935ce2819a2bdb"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:c6da2585c0950cdb650df1ff6d85b3fe31e22f8370b9ee11f8fe641d5b4bf096"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70234b592af17050ec30cf35894790cef52aeae87639efe6db854a7fa783cc8c"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c021b040d0a9f5bb96a725c4d2b95008aad127d6bed124a7bbe854973014f5b"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:114a42e566e5b16a47e98f7910a6c0074b37e2d1faacaae13222e463d0d0d43c"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:4cae365d7e3ba297256216a9a256458b286f75c64603f017972b3ad1ee374437"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-win32.whl", hash = "sha256:ae139a8d3ddd8353f62af3af018e99ebcd2f4a237bd319cb4b6f58dd608aaa54"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp313-cp313-win_amd64.whl", hash = "sha256:04bf30c0eb2741defe3ab6e0a6102b022d69cfd39d68fab9b954993ceca8d346"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:076f71c6d5adcf237ebca63f1ed51098293261dab9f301e3dfd180e896e5fa89"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-macosx_10_14_universal2.whl", hash = "sha256:d1fc2112e9c40167086e2e6a929b253e5281bffd070fab7cd1ae019317ffc11d"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:904f13d2d04f88178b09d8ef89549b90cbf8792b684a7c72540fc1a9887697e2"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1de6c71833d36fb8cc8ac10539681756dc2c5c67e5d4aa4d05adb91ecbdd8474"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab788afced2d2c59bef86479967ce0b28485789a9f2cc43793bb7aa67f9528b"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:836293dcbb1e59fa52aa8aa890bd7a32a8eea7651cd614e96d86de4f3032fe73"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:740b3741d124c5f390dd50ad1c42c11788882baf3c202cd3e69adee0e3dde559"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-win32.whl", hash = "sha256:b9e4a12b862ba5e42d8028da311e8d4a2c307362659b2f4141d0f940f8c12b49"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp38-cp38-win_amd64.whl", hash = "sha256:fd04c93af460b1456cd12f8f85502503e1db6c4adc1b7d4bd775b12c1fd94fee"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:52d7e7ef11867fe7de577076b1f2ac6bf106b2325130e3de66f8c364c96ff332"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:0f7ed0372afd9f5eb938334e84681396257015ab92e03de009aa3170e64b24d0"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:24a5b0328ffcfe0c4a9024f302545abdb8d6f24921409a5839f2879555b96fea"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9387b30f3b2f46942fb5718624d7421875a6ce458620d6e15817172d78db1e1a"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4545264e06e1cd7fb21b9447bb5126330bececb4bc626c98f793fda2fd910bf8"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79b723ce30416e8e1d7ff271f97ade79aaf30309a595d80c377105c07f5b20fd"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1c0917dce12af04529606d437def83962d51c59dcde905746134222e94a2ab1b"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-win32.whl", hash = "sha256:5cb0baa52d4d44690fac6b1040197c694776a291a90e2d3c369064b4d5bc6642"},
|
||||||
|
{file = "grpcio_tools-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:840ec536ab933db2ef8d5acaa6b712d0e9e8f397f62907c852ec50a3f69cdb78"},
|
||||||
|
{file = "grpcio_tools-1.70.0.tar.gz", hash = "sha256:e578fee7c1c213c8e471750d92631d00f178a15479fb2cb3b939a07fc125ccd3"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
grpcio = ">=1.70.0"
|
||||||
|
protobuf = ">=5.26.1,<6.0dev"
|
||||||
|
setuptools = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iniconfig"
|
||||||
|
version = "2.0.0"
|
||||||
|
description = "brain-dead simple config-ini parsing"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
|
||||||
|
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "packaging"
|
||||||
|
version = "24.2"
|
||||||
|
description = "Core utilities for Python packages"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
|
||||||
|
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pluggy"
|
||||||
|
version = "1.5.0"
|
||||||
|
description = "plugin and hook calling mechanisms for python"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
|
||||||
|
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["pre-commit", "tox"]
|
||||||
|
testing = ["pytest", "pytest-benchmark"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "protobuf"
|
||||||
|
version = "5.29.3"
|
||||||
|
description = ""
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "protobuf-5.29.3-cp310-abi3-win32.whl", hash = "sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888"},
|
||||||
|
{file = "protobuf-5.29.3-cp310-abi3-win_amd64.whl", hash = "sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a"},
|
||||||
|
{file = "protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e"},
|
||||||
|
{file = "protobuf-5.29.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84"},
|
||||||
|
{file = "protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f"},
|
||||||
|
{file = "protobuf-5.29.3-cp38-cp38-win32.whl", hash = "sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252"},
|
||||||
|
{file = "protobuf-5.29.3-cp38-cp38-win_amd64.whl", hash = "sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107"},
|
||||||
|
{file = "protobuf-5.29.3-cp39-cp39-win32.whl", hash = "sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7"},
|
||||||
|
{file = "protobuf-5.29.3-cp39-cp39-win_amd64.whl", hash = "sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da"},
|
||||||
|
{file = "protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f"},
|
||||||
|
{file = "protobuf-5.29.3.tar.gz", hash = "sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "psycopg2"
|
||||||
|
version = "2.9.10"
|
||||||
|
description = "psycopg2 - Python-PostgreSQL Database Adapter"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "psycopg2-2.9.10-cp310-cp310-win32.whl", hash = "sha256:5df2b672140f95adb453af93a7d669d7a7bf0a56bcd26f1502329166f4a61716"},
|
||||||
|
{file = "psycopg2-2.9.10-cp310-cp310-win_amd64.whl", hash = "sha256:c6f7b8561225f9e711a9c47087388a97fdc948211c10a4bccbf0ba68ab7b3b5a"},
|
||||||
|
{file = "psycopg2-2.9.10-cp311-cp311-win32.whl", hash = "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2"},
|
||||||
|
{file = "psycopg2-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4"},
|
||||||
|
{file = "psycopg2-2.9.10-cp312-cp312-win32.whl", hash = "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067"},
|
||||||
|
{file = "psycopg2-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e"},
|
||||||
|
{file = "psycopg2-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:91fd603a2155da8d0cfcdbf8ab24a2d54bca72795b90d2a3ed2b6da8d979dee2"},
|
||||||
|
{file = "psycopg2-2.9.10-cp39-cp39-win32.whl", hash = "sha256:9d5b3b94b79a844a986d029eee38998232451119ad653aea42bb9220a8c5066b"},
|
||||||
|
{file = "psycopg2-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:88138c8dedcbfa96408023ea2b0c369eda40fe5d75002c0964c78f46f11fa442"},
|
||||||
|
{file = "psycopg2-2.9.10.tar.gz", hash = "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pydantic"
|
||||||
|
version = "2.10.5"
|
||||||
|
description = "Data validation using Python type hints"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"},
|
||||||
|
{file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
annotated-types = ">=0.6.0"
|
||||||
|
pydantic-core = "2.27.2"
|
||||||
|
typing-extensions = ">=4.12.2"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
email = ["email-validator (>=2.0.0)"]
|
||||||
|
timezone = ["tzdata"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pydantic-core"
|
||||||
|
version = "2.27.2"
|
||||||
|
description = "Core functionality for Pydantic validation and serialization"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"},
|
||||||
|
{file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"},
|
||||||
|
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"},
|
||||||
|
{file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest"
|
||||||
|
version = "8.3.4"
|
||||||
|
description = "pytest: simple powerful testing with Python"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"},
|
||||||
|
{file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
||||||
|
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
|
||||||
|
iniconfig = "*"
|
||||||
|
packaging = "*"
|
||||||
|
pluggy = ">=1.5,<2"
|
||||||
|
tomli = {version = ">=1", markers = "python_version < \"3.11\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "python-dotenv"
|
||||||
|
version = "1.0.1"
|
||||||
|
description = "Read key-value pairs from a .env file and set them as environment variables"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"},
|
||||||
|
{file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
cli = ["click (>=5.0)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "setuptools"
|
||||||
|
version = "75.8.0"
|
||||||
|
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.9"
|
||||||
|
files = [
|
||||||
|
{file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"},
|
||||||
|
{file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"]
|
||||||
|
core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
|
||||||
|
cover = ["pytest-cov"]
|
||||||
|
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
|
||||||
|
enabler = ["pytest-enabler (>=2.2)"]
|
||||||
|
test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
|
||||||
|
type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.14.0,<1.15.0)", "pytest-mypy"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sqlalchemy"
|
||||||
|
version = "2.0.37"
|
||||||
|
description = "Database Abstraction Library"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6f5d254a22394847245f411a2956976401e84da4288aa70cbcd5190744062c1"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41296bbcaa55ef5fdd32389a35c710133b097f7b2609d8218c0eabded43a1d84"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bedee60385c1c0411378cbd4dc486362f5ee88deceea50002772912d798bb00f"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6c67415258f9f3c69867ec02fea1bf6508153709ecbd731a982442a590f2b7e4"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-win32.whl", hash = "sha256:650dcb70739957a492ad8acff65d099a9586b9b8920e3507ca61ec3ce650bb72"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp310-cp310-win_amd64.whl", hash = "sha256:93d1543cd8359040c02b6614421c8e10cd7a788c40047dbc507ed46c29ae5636"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:78361be6dc9073ed17ab380985d1e45e48a642313ab68ab6afa2457354ff692c"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b661b49d0cb0ab311a189b31e25576b7ac3e20783beb1e1817d72d9d02508bf5"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d57bafbab289e147d064ffbd5cca2d7b1394b63417c0636cea1f2e93d16eb9e8"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa2c0913f02341d25fb858e4fb2031e6b0813494cca1ba07d417674128ce11b"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9df21b8d9e5c136ea6cde1c50d2b1c29a2b5ff2b1d610165c23ff250e0704087"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db18ff6b8c0f1917f8b20f8eca35c28bbccb9f83afa94743e03d40203ed83de9"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-win32.whl", hash = "sha256:46954173612617a99a64aee103bcd3f078901b9a8dcfc6ae80cbf34ba23df989"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp311-cp311-win_amd64.whl", hash = "sha256:7b7e772dc4bc507fdec4ee20182f15bd60d2a84f1e087a8accf5b5b7a0dcf2ba"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2952748ecd67ed3b56773c185e85fc084f6bdcdec10e5032a7c25a6bc7d682ef"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3151822aa1db0eb5afd65ccfafebe0ef5cda3a7701a279c8d0bf17781a793bb4"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaa8039b6d20137a4e02603aba37d12cd2dde7887500b8855356682fc33933f4"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cdba1f73b64530c47b27118b7053b8447e6d6f3c8104e3ac59f3d40c33aa9fd"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1b2690456528a87234a75d1a1644cdb330a6926f455403c8e4f6cad6921f9098"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf5ae8a9dcf657fd72144a7fd01f243236ea39e7344e579a121c4205aedf07bb"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-win32.whl", hash = "sha256:ea308cec940905ba008291d93619d92edaf83232ec85fbd514dcb329f3192761"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp312-cp312-win_amd64.whl", hash = "sha256:635d8a21577341dfe4f7fa59ec394b346da12420b86624a69e466d446de16aff"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8c4096727193762e72ce9437e2a86a110cf081241919ce3fab8e89c02f6b6658"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e4fb5ac86d8fe8151966814f6720996430462e633d225497566b3996966b9bdb"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e56a139bfe136a22c438478a86f8204c1eb5eed36f4e15c4224e4b9db01cb3e4"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f95fc8e3f34b5f6b3effb49d10ac97c569ec8e32f985612d9b25dd12d0d2e94"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c505edd429abdfe3643fa3b2e83efb3445a34a9dc49d5f692dd087be966020e0"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:12b0f1ec623cccf058cf21cb544f0e74656618165b083d78145cafde156ea7b6"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-win32.whl", hash = "sha256:293f9ade06b2e68dd03cfb14d49202fac47b7bb94bffcff174568c951fbc7af2"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp313-cp313-win_amd64.whl", hash = "sha256:d70f53a0646cc418ca4853da57cf3ddddbccb8c98406791f24426f2dd77fd0e2"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:44f569d0b1eb82301b92b72085583277316e7367e038d97c3a1a899d9a05e342"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2eae3423e538c10d93ae3e87788c6a84658c3ed6db62e6a61bb9495b0ad16bb"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfff7be361048244c3aa0f60b5e63221c5e0f0e509f4e47b8910e22b57d10ae7"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:5bc3339db84c5fb9130ac0e2f20347ee77b5dd2596ba327ce0d399752f4fce39"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:84b9f23b0fa98a6a4b99d73989350a94e4a4ec476b9a7dfe9b79ba5939f5e80b"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-win32.whl", hash = "sha256:51bc9cfef83e0ac84f86bf2b10eaccb27c5a3e66a1212bef676f5bee6ef33ebb"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp37-cp37m-win_amd64.whl", hash = "sha256:8e47f1af09444f87c67b4f1bb6231e12ba6d4d9f03050d7fc88df6d075231a49"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6b788f14c5bb91db7f468dcf76f8b64423660a05e57fe277d3f4fad7b9dcb7ce"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521ef85c04c33009166777c77e76c8a676e2d8528dc83a57836b63ca9c69dcd1"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75311559f5c9881a9808eadbeb20ed8d8ba3f7225bef3afed2000c2a9f4d49b9"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cce918ada64c956b62ca2c2af59b125767097ec1dca89650a6221e887521bfd7"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9d087663b7e1feabea8c578d6887d59bb00388158e8bff3a76be11aa3f748ca2"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cf95a60b36997dad99692314c4713f141b61c5b0b4cc5c3426faad570b31ca01"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-win32.whl", hash = "sha256:d75ead7dd4d255068ea0f21492ee67937bd7c90964c8f3c2bea83c7b7f81b95f"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp38-cp38-win_amd64.whl", hash = "sha256:74bbd1d0a9bacf34266a7907d43260c8d65d31d691bb2356f41b17c2dca5b1d0"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:648ec5acf95ad59255452ef759054f2176849662af4521db6cb245263ae4aa33"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:35bd2df269de082065d4b23ae08502a47255832cc3f17619a5cea92ce478b02b"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f581d365af9373a738c49e0c51e8b18e08d8a6b1b15cc556773bcd8a192fa8b"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82df02816c14f8dc9f4d74aea4cb84a92f4b0620235daa76dde002409a3fbb5a"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94b564e38b344d3e67d2e224f0aec6ba09a77e4582ced41e7bfd0f757d926ec9"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:955a2a765aa1bd81aafa69ffda179d4fe3e2a3ad462a736ae5b6f387f78bfeb8"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-win32.whl", hash = "sha256:03f0528c53ca0b67094c4764523c1451ea15959bbf0a8a8a3096900014db0278"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-cp39-cp39-win_amd64.whl", hash = "sha256:4b12885dc85a2ab2b7d00995bac6d967bffa8594123b02ed21e8eb2205a7584b"},
|
||||||
|
{file = "SQLAlchemy-2.0.37-py3-none-any.whl", hash = "sha256:a8998bf9f8658bd3839cbc44ddbe982955641863da0c1efe5b00c1ab4f5c16b1"},
|
||||||
|
{file = "sqlalchemy-2.0.37.tar.gz", hash = "sha256:12b28d99a9c14eaf4055810df1001557176716de0167b91026e648e65229bffb"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
greenlet = {version = "!=0.4.17", markers = "python_version < \"3.14\" and platform_machine == \"aarch64\" or python_version < \"3.14\" and platform_machine == \"ppc64le\" or python_version < \"3.14\" and platform_machine == \"x86_64\" or python_version < \"3.14\" and platform_machine == \"amd64\" or python_version < \"3.14\" and platform_machine == \"AMD64\" or python_version < \"3.14\" and platform_machine == \"win32\" or python_version < \"3.14\" and platform_machine == \"WIN32\""}
|
||||||
|
typing-extensions = ">=4.6.0"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"]
|
||||||
|
aioodbc = ["aioodbc", "greenlet (!=0.4.17)"]
|
||||||
|
aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"]
|
||||||
|
asyncio = ["greenlet (!=0.4.17)"]
|
||||||
|
asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"]
|
||||||
|
mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"]
|
||||||
|
mssql = ["pyodbc"]
|
||||||
|
mssql-pymssql = ["pymssql"]
|
||||||
|
mssql-pyodbc = ["pyodbc"]
|
||||||
|
mypy = ["mypy (>=0.910)"]
|
||||||
|
mysql = ["mysqlclient (>=1.4.0)"]
|
||||||
|
mysql-connector = ["mysql-connector-python"]
|
||||||
|
oracle = ["cx_oracle (>=8)"]
|
||||||
|
oracle-oracledb = ["oracledb (>=1.0.1)"]
|
||||||
|
postgresql = ["psycopg2 (>=2.7)"]
|
||||||
|
postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"]
|
||||||
|
postgresql-pg8000 = ["pg8000 (>=1.29.1)"]
|
||||||
|
postgresql-psycopg = ["psycopg (>=3.0.7)"]
|
||||||
|
postgresql-psycopg2binary = ["psycopg2-binary"]
|
||||||
|
postgresql-psycopg2cffi = ["psycopg2cffi"]
|
||||||
|
postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"]
|
||||||
|
pymysql = ["pymysql"]
|
||||||
|
sqlcipher = ["sqlcipher3_binary"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tomli"
|
||||||
|
version = "2.2.1"
|
||||||
|
description = "A lil' TOML parser"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"},
|
||||||
|
{file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"},
|
||||||
|
{file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"},
|
||||||
|
{file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"},
|
||||||
|
{file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"},
|
||||||
|
{file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typing-extensions"
|
||||||
|
version = "4.12.2"
|
||||||
|
description = "Backported and Experimental Type Hints for Python 3.8+"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
|
||||||
|
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
lock-version = "2.0"
|
||||||
|
python-versions = "^3.10"
|
||||||
|
content-hash = "f590636643c34629bbb6f7b9bc0b20975fe3c6f86807ebb6408da99aae5a90b6"
|
23
pyproject.toml
Normal file
23
pyproject.toml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
[tool.poetry]
|
||||||
|
name = "f1tness-parser"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["pro100ton <pro100ton@gmail.com>"]
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.10"
|
||||||
|
pydantic = "^2.10.5"
|
||||||
|
pytest = "^8.3.4"
|
||||||
|
sqlalchemy = "^2.0.37"
|
||||||
|
psycopg2 = "^2.9.10"
|
||||||
|
python-dotenv = "^1.0.1"
|
||||||
|
asyncpg = "^0.30.0"
|
||||||
|
grpcio = "^1.70.0"
|
||||||
|
grpcio-tools = "^1.70.0"
|
||||||
|
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry-core"]
|
||||||
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
0
utils/__init__.py
Normal file
0
utils/__init__.py
Normal file
61
utils/enums.py
Normal file
61
utils/enums.py
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
list_of_unique_names = [
|
||||||
|
# Apple
|
||||||
|
"Жим штанги лежа",
|
||||||
|
"Жим штанги сидя (45 градусов)",
|
||||||
|
"Жим ногами (гакк-машина)",
|
||||||
|
"Подъем ног на турнике",
|
||||||
|
"Гантели молот",
|
||||||
|
"Гантели молот (по очереди)",
|
||||||
|
"Жим от груди сидя в тренажере (блоки)",
|
||||||
|
"Наклоны с прямой спиной",
|
||||||
|
"Разгибание спины",
|
||||||
|
"Скручивания",
|
||||||
|
"Тяга Т-грифа",
|
||||||
|
"Тяга штанги в наклоне",
|
||||||
|
"Тяга штанги в наклоне (обратным хватом)",
|
||||||
|
"Разгибание рук в наклоне (кик-бек)",
|
||||||
|
# Obsidian
|
||||||
|
"Тяга горизонтального блока",
|
||||||
|
"Тяга горизонтального блока (по очереди)",
|
||||||
|
"Тяга гантелей в наклоне (по очереди)",
|
||||||
|
"Тяга гантелей на скамье",
|
||||||
|
"Тяга вертикального блока",
|
||||||
|
"Тяга вертикального блока (обратный хват)",
|
||||||
|
"Разгибание рук сидя (трицепс машина)",
|
||||||
|
"Подъем штанги на бицепс стоя",
|
||||||
|
"Подъем гантелей на бицепс стоя",
|
||||||
|
"Подъем гантелей на бицепс сидя",
|
||||||
|
"Сгибание ног сидя",
|
||||||
|
"Сгибание ног лежа",
|
||||||
|
"Сведение рук в пек-дек",
|
||||||
|
"Румынская тяга",
|
||||||
|
"Разгибание ног сидя",
|
||||||
|
"Разведение рук в стороны стоя (гантели)",
|
||||||
|
"Разведение рук в стороны в наклоне (гантели)",
|
||||||
|
"Приседания",
|
||||||
|
"Подъём ног в висе",
|
||||||
|
"Подтягивания",
|
||||||
|
"Подтягивания обратным хватом",
|
||||||
|
"Отжимания",
|
||||||
|
"Отведение рук в кроссовере (по очереди)",
|
||||||
|
"Разведение рук в пек-дек (по очереди)",
|
||||||
|
"Разведение рук в пек-дек",
|
||||||
|
"Отжимание на трицепс в кроссовере",
|
||||||
|
"Баттерфляй",
|
||||||
|
"Болгарские сплит-приседения",
|
||||||
|
"Брусья",
|
||||||
|
"Вертикальная тяга одной рукой",
|
||||||
|
"Выпады",
|
||||||
|
"Гиперэкстензия",
|
||||||
|
"Гравитрон",
|
||||||
|
"Гребная тяга с упором в грудь",
|
||||||
|
"Гребная тяга с упором в грудь (по очереди)",
|
||||||
|
"Разведение рук в стороны (дельт-машина)",
|
||||||
|
"Жим гантелей лежа",
|
||||||
|
"Жим гантелей лежа (Под углом 45 градусов)",
|
||||||
|
"Жим гантелей сидя",
|
||||||
|
"Жим ногами",
|
||||||
|
"Жим от груди сидя в тренажере (рычаги)",
|
||||||
|
"Жим от плеч вверх в тренажере (рычаги)",
|
||||||
|
"Икроножные сидя",
|
||||||
|
]
|
Loading…
Reference in a new issue