Compare commits
4 Commits
96b0718081
...
132aa5a19b
Author | SHA1 | Date | |
---|---|---|---|
132aa5a19b | |||
19b0c37a97 | |||
ecdef605a7 | |||
e2a918112b |
@@ -18,17 +18,17 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
apt-get update && apt-get install -y python3 python3-pip
|
apt-get update && apt-get install -y python3 python3-pip
|
||||||
pip install pipenv
|
pip install uv
|
||||||
|
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
run: |
|
run: |
|
||||||
ls -la
|
ls -la
|
||||||
# install all packages, including dev-packages
|
# install all packages, including dev-packages
|
||||||
pipenv install --dev
|
uv sync
|
||||||
working-directory: backend
|
working-directory: backend
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: pipenv run pytest src --html=report.html --self-contained-html --log-cli-level=DEBUG
|
run: uv run pytest src --html=report.html --self-contained-html --log-cli-level=DEBUG
|
||||||
working-directory: backend
|
working-directory: backend
|
||||||
|
|
||||||
- name: Upload HTML report
|
- name: Upload HTML report
|
||||||
|
1
backend/.python-version
Normal file
1
backend/.python-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3.12.9
|
@@ -1,11 +1,29 @@
|
|||||||
FROM python:3.11-slim
|
FROM python:3.12-slim-bookworm
|
||||||
|
|
||||||
|
# The installer requires curl (and certificates) to download the release archive
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates
|
||||||
|
|
||||||
|
# Download the latest installer
|
||||||
|
ADD https://astral.sh/uv/install.sh /uv-installer.sh
|
||||||
|
|
||||||
|
# Run the installer then remove it
|
||||||
|
RUN sh /uv-installer.sh && rm /uv-installer.sh
|
||||||
|
|
||||||
|
# Ensure the installed binary is on the `PATH`
|
||||||
|
ENV PATH="/root/.local/bin/:$PATH"
|
||||||
|
|
||||||
|
# Set the working directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY Pipfile Pipfile.lock .
|
|
||||||
|
|
||||||
RUN pip install pipenv
|
# Copy uv files
|
||||||
RUN pipenv install --deploy --system
|
COPY pyproject.toml pyproject.toml
|
||||||
|
COPY uv.lock uv.lock
|
||||||
|
COPY .python-version .python-version
|
||||||
|
|
||||||
|
# Sync the venv
|
||||||
|
RUN uv sync --frozen --no-cache --no-dev
|
||||||
|
|
||||||
|
# Copy application files
|
||||||
COPY src src
|
COPY src src
|
||||||
|
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
@@ -17,4 +35,4 @@ ENV MEMCACHED_HOST_PATH=none
|
|||||||
ENV LOKI_URL=none
|
ENV LOKI_URL=none
|
||||||
|
|
||||||
# explicitly use a string instead of an argument list to force a shell and variable expansion
|
# explicitly use a string instead of an argument list to force a shell and variable expansion
|
||||||
CMD fastapi run src/main.py --port 8000 --workers $NUM_WORKERS
|
CMD uv run fastapi run src/main.py --port 8000 --workers $NUM_WORKERS
|
||||||
|
@@ -1,27 +0,0 @@
|
|||||||
[[source]]
|
|
||||||
url = "https://pypi.org/simple"
|
|
||||||
verify_ssl = true
|
|
||||||
name = "pypi"
|
|
||||||
|
|
||||||
[dev-packages]
|
|
||||||
pylint = "*"
|
|
||||||
pytest = "*"
|
|
||||||
tomli = "*"
|
|
||||||
httpx = "*"
|
|
||||||
exceptiongroup = "*"
|
|
||||||
pytest-html = "*"
|
|
||||||
typing-extensions = "*"
|
|
||||||
dill = "*"
|
|
||||||
|
|
||||||
[packages]
|
|
||||||
numpy = "*"
|
|
||||||
fastapi = "*"
|
|
||||||
pydantic = "*"
|
|
||||||
shapely = "*"
|
|
||||||
pymemcache = "*"
|
|
||||||
fastapi-cli = "*"
|
|
||||||
scikit-learn = "*"
|
|
||||||
loki-logger-handler = "*"
|
|
||||||
pulp = "*"
|
|
||||||
scipy = "*"
|
|
||||||
requests = "*"
|
|
1246
backend/Pipfile.lock
generated
1246
backend/Pipfile.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,363 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"name": "Chinatown",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7554934,
|
|
||||||
4.8444852
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 996515596,
|
|
||||||
"attractiveness": 129,
|
|
||||||
"n_tags": 0,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": null,
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": {},
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "285d159c-68ee-4b37-8d71-f27ee3d38b02",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Galeries Lafayette",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7627107,
|
|
||||||
4.8556833
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 1069872743,
|
|
||||||
"attractiveness": 197,
|
|
||||||
"n_tags": 11,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "http://www.galerieslafayette.com/",
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "28f1bc30-10d3-4944-8861-0ed9abca012d",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Muji",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7615971,
|
|
||||||
4.8543781
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 1044165817,
|
|
||||||
"attractiveness": 259,
|
|
||||||
"n_tags": 14,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "https://www.muji.com/fr/",
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": "Muji",
|
|
||||||
"uuid": "957f86a5-6c00-41a2-815d-d6f739052be4",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "HEMA",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7619133,
|
|
||||||
4.8565239
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 1069872750,
|
|
||||||
"attractiveness": 156,
|
|
||||||
"n_tags": 9,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "https://fr.westfield.com/lapartdieu/store/HEMA/www.hema.fr",
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "8dae9d3e-e4c4-4e80-941d-0b106e22c85b",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cordeliers",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7622752,
|
|
||||||
4.8337998
|
|
||||||
],
|
|
||||||
"osm_type": "node",
|
|
||||||
"osm_id": 5545183519,
|
|
||||||
"attractiveness": 813,
|
|
||||||
"n_tags": 0,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": null,
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": {},
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "ba02adb5-e28f-4645-8c2d-25ead6232379",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Halles de Lyon Paul Bocuse",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7628282,
|
|
||||||
4.8505601
|
|
||||||
],
|
|
||||||
"osm_type": "relation",
|
|
||||||
"osm_id": 971529,
|
|
||||||
"attractiveness": 272,
|
|
||||||
"n_tags": 12,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "https://www.halles-de-lyon-paulbocuse.com/",
|
|
||||||
"wiki_url": "fr:Halles de Lyon-Paul Bocuse",
|
|
||||||
"keywords": {
|
|
||||||
"importance": "national",
|
|
||||||
"height": null,
|
|
||||||
"place_type": "marketplace",
|
|
||||||
"date": null
|
|
||||||
},
|
|
||||||
"description": "Halles de Lyon Paul Bocuse is a marketplace of national importance.",
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "bbd50de3-aa91-425d-90c2-d4abfd1b4abe",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Grand Bazar",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7632141,
|
|
||||||
4.8361975
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 82399951,
|
|
||||||
"attractiveness": 93,
|
|
||||||
"n_tags": 7,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": null,
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "3de9131c-87c5-4efb-9fa8-064896fb8b29",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Shopping Area",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7673452,
|
|
||||||
4.8438683
|
|
||||||
],
|
|
||||||
"osm_type": "node",
|
|
||||||
"osm_id": 0,
|
|
||||||
"attractiveness": 156,
|
|
||||||
"n_tags": 0,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": null,
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": {},
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "df2482a8-7e2e-4536-aad3-564899b2fa65",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cour Oxyg\u00e8ne",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7620905,
|
|
||||||
4.8568873
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 132673030,
|
|
||||||
"attractiveness": 63,
|
|
||||||
"n_tags": 5,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": null,
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "ed134f76-9a02-4bee-9c10-78454f7bc4ce",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "P\u00f4le de Commerces et de Loisirs Confluence",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7410414,
|
|
||||||
4.8171031
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 440270633,
|
|
||||||
"attractiveness": 259,
|
|
||||||
"n_tags": 14,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "https://www.confluence.fr/",
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "dd7e2f5f-0e60-4560-b903-e5ded4b6e36a",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Grand H\u00f4tel-Dieu",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7586955,
|
|
||||||
4.8364597
|
|
||||||
],
|
|
||||||
"osm_type": "relation",
|
|
||||||
"osm_id": 300128,
|
|
||||||
"attractiveness": 546,
|
|
||||||
"n_tags": 22,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "https://grand-hotel-dieu.com",
|
|
||||||
"wiki_url": "fr:H\u00f4tel-Dieu de Lyon",
|
|
||||||
"keywords": {
|
|
||||||
"importance": "international",
|
|
||||||
"height": null,
|
|
||||||
"place_type": "building",
|
|
||||||
"date": "C17"
|
|
||||||
},
|
|
||||||
"description": "Grand H\u00f4tel-Dieu is an internationally famous building. It was constructed in C17.",
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "a91265a8-ffbd-44f7-a7ab-3ff75f08fbab",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Westfield La Part-Dieu",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.761331,
|
|
||||||
4.855676
|
|
||||||
],
|
|
||||||
"osm_type": "way",
|
|
||||||
"osm_id": 62338376,
|
|
||||||
"attractiveness": 546,
|
|
||||||
"n_tags": 22,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": "https://fr.westfield.com/lapartdieu",
|
|
||||||
"wiki_url": "fr:La Part-Dieu (centre commercial)",
|
|
||||||
"keywords": null,
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "7d60316f-d689-4fcf-be68-ffc09353b826",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Ainay",
|
|
||||||
"type": "shopping",
|
|
||||||
"location": [
|
|
||||||
45.7553105,
|
|
||||||
4.8312084
|
|
||||||
],
|
|
||||||
"osm_type": "node",
|
|
||||||
"osm_id": 5545126047,
|
|
||||||
"attractiveness": 132,
|
|
||||||
"n_tags": 0,
|
|
||||||
"image_url": null,
|
|
||||||
"website_url": null,
|
|
||||||
"wiki_url": null,
|
|
||||||
"keywords": {},
|
|
||||||
"description": null,
|
|
||||||
"duration": 30,
|
|
||||||
"name_en": null,
|
|
||||||
"uuid": "ad214f3d-a4b9-4078-876a-446caa7ab01c",
|
|
||||||
"must_do": false,
|
|
||||||
"must_avoid": false,
|
|
||||||
"is_secondary": false,
|
|
||||||
"time_to_reach_next": 0,
|
|
||||||
"next_uuid": null,
|
|
||||||
"is_viewpoint": false,
|
|
||||||
"is_place_of_worship": false
|
|
||||||
}
|
|
||||||
]
|
|
6
backend/main.py
Normal file
6
backend/main.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
def main():
|
||||||
|
print("Hello from backend!")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
55
backend/pyproject.toml
Normal file
55
backend/pyproject.toml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
[project]
|
||||||
|
name = "backend"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Add your description here"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.12"
|
||||||
|
dependencies = [
|
||||||
|
"annotated-types==0.7.0 ; python_full_version >= '3.8'",
|
||||||
|
"anyio==4.8.0 ; python_full_version >= '3.9'",
|
||||||
|
"certifi==2024.12.14 ; python_full_version >= '3.6'",
|
||||||
|
"charset-normalizer==3.4.1 ; python_full_version >= '3.7'",
|
||||||
|
"click==8.1.8 ; python_full_version >= '3.7'",
|
||||||
|
"fastapi==0.115.7 ; python_full_version >= '3.8'",
|
||||||
|
"fastapi-cli==0.0.7 ; python_full_version >= '3.8'",
|
||||||
|
"h11==0.14.0 ; python_full_version >= '3.7'",
|
||||||
|
"httptools==0.6.4",
|
||||||
|
"idna==3.10 ; python_full_version >= '3.6'",
|
||||||
|
"joblib==1.4.2 ; python_full_version >= '3.8'",
|
||||||
|
"loki-logger-handler==1.1.0 ; python_full_version >= '2.7'",
|
||||||
|
"markdown-it-py==3.0.0 ; python_full_version >= '3.8'",
|
||||||
|
"mdurl==0.1.2 ; python_full_version >= '3.7'",
|
||||||
|
"numpy==2.2.2 ; python_full_version >= '3.10'",
|
||||||
|
"pulp==2.9.0 ; python_full_version >= '3.7'",
|
||||||
|
"pydantic==2.10.6 ; python_full_version >= '3.8'",
|
||||||
|
"pydantic-core==2.27.2 ; python_full_version >= '3.8'",
|
||||||
|
"pygments==2.19.1 ; python_full_version >= '3.8'",
|
||||||
|
"pymemcache==4.0.0 ; python_full_version >= '3.7'",
|
||||||
|
"python-dotenv==1.0.1",
|
||||||
|
"pyyaml==6.0.2",
|
||||||
|
"requests==2.32.3 ; python_full_version >= '3.8'",
|
||||||
|
"rich==13.9.4 ; python_full_version >= '3.8'",
|
||||||
|
"rich-toolkit==0.13.2 ; python_full_version >= '3.8'",
|
||||||
|
"scikit-learn==1.6.1 ; python_full_version >= '3.9'",
|
||||||
|
"scipy==1.15.1 ; python_full_version >= '3.10'",
|
||||||
|
"shapely==2.0.6 ; python_full_version >= '3.7'",
|
||||||
|
"shellingham==1.5.4 ; python_full_version >= '3.7'",
|
||||||
|
"sniffio==1.3.1 ; python_full_version >= '3.7'",
|
||||||
|
"starlette==0.45.3 ; python_full_version >= '3.9'",
|
||||||
|
"threadpoolctl==3.5.0 ; python_full_version >= '3.8'",
|
||||||
|
"typer==0.15.1 ; python_full_version >= '3.7'",
|
||||||
|
"typing-extensions==4.12.2 ; python_full_version >= '3.8'",
|
||||||
|
"urllib3==2.3.0 ; python_full_version >= '3.9'",
|
||||||
|
"uvicorn[standard]==0.34.0 ; python_full_version >= '3.9'",
|
||||||
|
"uvloop==0.21.0",
|
||||||
|
"watchfiles==1.0.4",
|
||||||
|
"websockets==14.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"httpx>=0.28.1",
|
||||||
|
"ipykernel>=6.30.0",
|
||||||
|
"pytest>=8.4.1",
|
||||||
|
"pytest-html>=4.1.1",
|
||||||
|
]
|
@@ -114,9 +114,11 @@ def optimize_trip(
|
|||||||
|
|
||||||
# Second stage optimization
|
# Second stage optimization
|
||||||
try :
|
try :
|
||||||
refined_tour = refiner.refine_optimization(landmarks, base_tour,
|
refined_tour = refiner.refine_optimization(
|
||||||
preferences.max_time_minute,
|
landmarks, base_tour,
|
||||||
preferences.detour_tolerance_minute)
|
preferences.max_time_minute,
|
||||||
|
preferences.detour_tolerance_minute
|
||||||
|
)
|
||||||
except Exception as exc :
|
except Exception as exc :
|
||||||
logger.warning(f"Refiner failed. Proceeding with base trip {str(exc)}")
|
logger.warning(f"Refiner failed. Proceeding with base trip {str(exc)}")
|
||||||
refined_tour = base_tour
|
refined_tour = base_tour
|
||||||
|
@@ -6,7 +6,6 @@ from shapely import buffer, LineString, Point, Polygon, MultiPoint, concave_hull
|
|||||||
|
|
||||||
from ..structs.landmark import Landmark
|
from ..structs.landmark import Landmark
|
||||||
from ..utils.get_time_distance import get_time
|
from ..utils.get_time_distance import get_time
|
||||||
from ..utils.take_most_important import take_most_important
|
|
||||||
from .optimizer import Optimizer
|
from .optimizer import Optimizer
|
||||||
from ..constants import OPTIMIZER_PARAMETERS_PATH
|
from ..constants import OPTIMIZER_PARAMETERS_PATH
|
||||||
|
|
||||||
@@ -238,7 +237,7 @@ class Refiner :
|
|||||||
if self.is_in_area(area, landmark.location) and landmark.name not in visited_names:
|
if self.is_in_area(area, landmark.location) and landmark.name not in visited_names:
|
||||||
second_order_landmarks.append(landmark)
|
second_order_landmarks.append(landmark)
|
||||||
|
|
||||||
return take_most_important(second_order_landmarks, int(self.max_landmarks_refiner*0.75))
|
return sorted(second_order_landmarks, key=lambda x: x.attractiveness, reverse=True)[:int(self.max_landmarks_refiner*0.75)]
|
||||||
|
|
||||||
|
|
||||||
# Try fix the shortest path using shapely
|
# Try fix the shortest path using shapely
|
||||||
|
1330
backend/uv.lock
generated
Normal file
1330
backend/uv.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user