## Introduction
Halo is an open-source OSM (OpenStreetMap) route optimization engine. Built on FastAPI, this RESTful backend provides efficient route calculation and data processing. Leveraging SQLAlchemy for database management and Redis for fast data access, the project maximizes performance.
## Key Features
- **Route Optimization**: Utilizes OSM data to provide accurate route optimization.
- **High-Performance Backend**: Developed with FastAPI for fast and efficient service.
- **Data Management**: Supports structured database management with SQLAlchemy.
- **Caching Mechanism**: Enhances repetitive data request processing speeds using Redis.
## Technology Stack
- **FastAPI**: A modern, fast web framework for easy API development.
- **SQLAlchemy**: Offers powerful SQL toolkit and ORM (Object-Relational Mapping).
- **Redis**: A high-performance key-value store used for data caching.
- **OpenStreetMap**: Provides map data necessary for route optimization, free to use.
## Installation and Execution
```bash
git clone https://github.com/yourusername/halo.git
cd halo
docker-compose up -d
```
## Example ERD
- https://www.erdcloud.com/p/f5MEA63DBzZb7cCJ9
Raw data
{
"_id": null,
"home_page": "https://github.com/lavi02/Halo",
"name": "route-halo",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "route,optimizer,tsp",
"author": "Hoil Jeong",
"author_email": "me@haoyi.dev",
"download_url": "",
"platform": null,
"description": "## Introduction\n\nHalo is an open-source OSM (OpenStreetMap) route optimization engine. Built on FastAPI, this RESTful backend provides efficient route calculation and data processing. Leveraging SQLAlchemy for database management and Redis for fast data access, the project maximizes performance.\n\n## Key Features\n\n- **Route Optimization**: Utilizes OSM data to provide accurate route optimization.\n- **High-Performance Backend**: Developed with FastAPI for fast and efficient service.\n- **Data Management**: Supports structured database management with SQLAlchemy.\n- **Caching Mechanism**: Enhances repetitive data request processing speeds using Redis.\n\n## Technology Stack\n\n- **FastAPI**: A modern, fast web framework for easy API development.\n- **SQLAlchemy**: Offers powerful SQL toolkit and ORM (Object-Relational Mapping).\n- **Redis**: A high-performance key-value store used for data caching.\n- **OpenStreetMap**: Provides map data necessary for route optimization, free to use.\n\n## Installation and Execution\n\n```bash\ngit clone https://github.com/yourusername/halo.git\ncd halo\ndocker-compose up -d\n```\n\n## Example ERD\n- https://www.erdcloud.com/p/f5MEA63DBzZb7cCJ9\n\n",
"bugtrack_url": null,
"license": "",
"summary": "Halo the route optimizer tool",
"version": "0.1.2",
"project_urls": {
"Homepage": "https://github.com/lavi02/Halo"
},
"split_keywords": [
"route",
"optimizer",
"tsp"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1687bf9ddbcc5574995d6c45d668ae8c8b221ceb14356e7d7b5af2e525239167",
"md5": "0b2f51487fdf74ed4b016adf3fec5844",
"sha256": "daf8e2b1b50ec634e41f5f4f6aead2bcb7474fda041f9404f8b4feabc692ed64"
},
"downloads": -1,
"filename": "route_halo-0.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0b2f51487fdf74ed4b016adf3fec5844",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 16250,
"upload_time": "2024-01-02T15:24:55",
"upload_time_iso_8601": "2024-01-02T15:24:55.692463Z",
"url": "https://files.pythonhosted.org/packages/16/87/bf9ddbcc5574995d6c45d668ae8c8b221ceb14356e7d7b5af2e525239167/route_halo-0.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-02 15:24:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lavi02",
"github_project": "Halo",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "absl-py",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "aiohttp",
"specs": [
[
"==",
"3.9.1"
]
]
},
{
"name": "aiosignal",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "annotated-types",
"specs": [
[
"==",
"0.6.0"
]
]
},
{
"name": "anyio",
"specs": [
[
"==",
"3.7.1"
]
]
},
{
"name": "async-timeout",
"specs": [
[
"==",
"4.0.3"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"23.1.0"
]
]
},
{
"name": "autopep8",
"specs": [
[
"==",
"2.0.4"
]
]
},
{
"name": "bcrypt",
"specs": [
[
"==",
"4.1.1"
]
]
},
{
"name": "build",
"specs": [
[
"==",
"1.0.3"
]
]
},
{
"name": "Cerberus",
"specs": [
[
"==",
"1.3.5"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2023.11.17"
]
]
},
{
"name": "cffi",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.3.2"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"8.1.7"
]
]
},
{
"name": "click-plugins",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "cligj",
"specs": [
[
"==",
"0.7.2"
]
]
},
{
"name": "colorama",
"specs": [
[
"==",
"0.4.6"
]
]
},
{
"name": "contourpy",
"specs": [
[
"==",
"1.0.7"
]
]
},
{
"name": "cryptography",
"specs": [
[
"==",
"41.0.7"
]
]
},
{
"name": "cycler",
"specs": [
[
"==",
"0.12.1"
]
]
},
{
"name": "dependency-injector",
"specs": [
[
"==",
"4.41.0"
]
]
},
{
"name": "dephell",
"specs": [
[
"==",
"0.8.3"
]
]
},
{
"name": "dephell-archive",
"specs": [
[
"==",
"0.1.7"
]
]
},
{
"name": "dephell-argparse",
"specs": [
[
"==",
"0.1.3"
]
]
},
{
"name": "dephell-changelogs",
"specs": [
[
"==",
"0.0.1"
]
]
},
{
"name": "dephell-discover",
"specs": [
[
"==",
"0.2.10"
]
]
},
{
"name": "dephell-licenses",
"specs": [
[
"==",
"0.1.7"
]
]
},
{
"name": "dephell-links",
"specs": [
[
"==",
"0.1.5"
]
]
},
{
"name": "dephell-markers",
"specs": [
[
"==",
"1.0.3"
]
]
},
{
"name": "dephell-pythons",
"specs": [
[
"==",
"0.1.15"
]
]
},
{
"name": "dephell-setuptools",
"specs": [
[
"==",
"0.2.5"
]
]
},
{
"name": "dephell-shells",
"specs": [
[
"==",
"0.1.5"
]
]
},
{
"name": "dephell-specifier",
"specs": [
[
"==",
"0.3.0"
]
]
},
{
"name": "dephell-venvs",
"specs": [
[
"==",
"0.1.18"
]
]
},
{
"name": "dephell-versioning",
"specs": [
[
"==",
"0.1.2"
]
]
},
{
"name": "docutils",
"specs": [
[
"==",
"0.20.1"
]
]
},
{
"name": "ecdsa",
"specs": [
[
"==",
"0.18.0"
]
]
},
{
"name": "exceptiongroup",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "fastapi",
"specs": [
[
"==",
"0.104.1"
]
]
},
{
"name": "fiona",
"specs": [
[
"==",
"1.9.5"
]
]
},
{
"name": "fonttools",
"specs": [
[
"==",
"4.46.0"
]
]
},
{
"name": "frozenlist",
"specs": [
[
"==",
"1.4.0"
]
]
},
{
"name": "geopandas",
"specs": [
[
"==",
"0.13.2"
]
]
},
{
"name": "greenlet",
"specs": [
[
"==",
"3.0.1"
]
]
},
{
"name": "h11",
"specs": [
[
"==",
"0.14.0"
]
]
},
{
"name": "httptools",
"specs": [
[
"==",
"0.6.1"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.6"
]
]
},
{
"name": "importlib-metadata",
"specs": [
[
"==",
"6.9.0"
]
]
},
{
"name": "importlib-resources",
"specs": [
[
"==",
"6.1.1"
]
]
},
{
"name": "jaraco.classes",
"specs": [
[
"==",
"3.3.0"
]
]
},
{
"name": "jeepney",
"specs": [
[
"==",
"0.8.0"
]
]
},
{
"name": "Jinja2",
"specs": [
[
"==",
"3.1.2"
]
]
},
{
"name": "keyring",
"specs": [
[
"==",
"24.3.0"
]
]
},
{
"name": "kiwisolver",
"specs": [
[
"==",
"1.4.5"
]
]
},
{
"name": "m2r",
"specs": [
[
"==",
"0.3.1"
]
]
},
{
"name": "markdown-it-py",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "MarkupSafe",
"specs": [
[
"==",
"2.1.3"
]
]
},
{
"name": "matplotlib",
"specs": [
[
"==",
"3.7.4"
]
]
},
{
"name": "mdurl",
"specs": [
[
"==",
"0.1.2"
]
]
},
{
"name": "mistune",
"specs": [
[
"==",
"0.8.4"
]
]
},
{
"name": "more-itertools",
"specs": [
[
"==",
"10.1.0"
]
]
},
{
"name": "multidict",
"specs": [
[
"==",
"6.0.4"
]
]
},
{
"name": "networkx",
"specs": [
[
"==",
"2.8.8"
]
]
},
{
"name": "nh3",
"specs": [
[
"==",
"0.2.15"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"1.24.4"
]
]
},
{
"name": "ortools",
"specs": [
[
"==",
"9.8.3296"
]
]
},
{
"name": "osmnx",
"specs": [
[
"==",
"1.8.0"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"23.2"
]
]
},
{
"name": "pandas",
"specs": [
[
"==",
"2.0.3"
]
]
},
{
"name": "passlib",
"specs": [
[
"==",
"1.7.4"
]
]
},
{
"name": "pexpect",
"specs": [
[
"==",
"4.9.0"
]
]
},
{
"name": "Pillow",
"specs": [
[
"==",
"10.1.0"
]
]
},
{
"name": "pkginfo",
"specs": [
[
"==",
"1.9.6"
]
]
},
{
"name": "protobuf",
"specs": [
[
"==",
"4.25.1"
]
]
},
{
"name": "ptyprocess",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "pyasn1",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "pycodestyle",
"specs": [
[
"==",
"2.11.1"
]
]
},
{
"name": "pycparser",
"specs": [
[
"==",
"2.21"
]
]
},
{
"name": "pydantic",
"specs": [
[
"==",
"2.5.2"
]
]
},
{
"name": "pydantic-core",
"specs": [
[
"==",
"2.14.5"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.17.2"
]
]
},
{
"name": "PyJWT",
"specs": [
[
"==",
"2.8.0"
]
]
},
{
"name": "PyMySQL",
"specs": [
[
"==",
"1.1.0"
]
]
},
{
"name": "pyparsing",
"specs": [
[
"==",
"3.1.1"
]
]
},
{
"name": "pyproj",
"specs": [
[
"==",
"3.5.0"
]
]
},
{
"name": "pyproject-hooks",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.8.2"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "python-jose",
"specs": [
[
"==",
"3.3.0"
]
]
},
{
"name": "pytz",
"specs": [
[
"==",
"2023.3.post1"
]
]
},
{
"name": "PyYAML",
"specs": [
[
"==",
"6.0.1"
]
]
},
{
"name": "readme-renderer",
"specs": [
[
"==",
"42.0"
]
]
},
{
"name": "redis",
"specs": [
[
"==",
"5.0.1"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.31.0"
]
]
},
{
"name": "requests-toolbelt",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "rfc3986",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "rich",
"specs": [
[
"==",
"13.7.0"
]
]
},
{
"name": "rsa",
"specs": [
[
"==",
"4.9"
]
]
},
{
"name": "ruamel.yaml",
"specs": [
[
"==",
"0.18.5"
]
]
},
{
"name": "ruamel.yaml.clib",
"specs": [
[
"==",
"0.2.8"
]
]
},
{
"name": "SecretStorage",
"specs": [
[
"==",
"3.3.3"
]
]
},
{
"name": "shapely",
"specs": [
[
"==",
"2.0.2"
]
]
},
{
"name": "shellingham",
"specs": [
[
"==",
"1.5.4"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "sniffio",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "SQLAlchemy",
"specs": [
[
"==",
"2.0.23"
]
]
},
{
"name": "starlette",
"specs": [
[
"==",
"0.27.0"
]
]
},
{
"name": "termcolor",
"specs": [
[
"==",
"2.4.0"
]
]
},
{
"name": "tomli",
"specs": [
[
"==",
"2.0.1"
]
]
},
{
"name": "tomlkit",
"specs": [
[
"==",
"0.12.3"
]
]
},
{
"name": "twine",
"specs": [
[
"==",
"4.0.2"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.8.0"
]
]
},
{
"name": "tzdata",
"specs": [
[
"==",
"2023.3"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "uvicorn",
"specs": [
[
"==",
"0.24.0.post1"
]
]
},
{
"name": "watchfiles",
"specs": [
[
"==",
"0.21.0"
]
]
},
{
"name": "websockets",
"specs": [
[
"==",
"12.0"
]
]
},
{
"name": "yarl",
"specs": [
[
"==",
"1.9.4"
]
]
},
{
"name": "yaspin",
"specs": [
[
"==",
"2.5.0"
]
]
},
{
"name": "zipp",
"specs": [
[
"==",
"3.17.0"
]
]
}
],
"lcname": "route-halo"
}