Town / City geolocations with FastAPI & Mongo

Overview

Makefile CI

geolocations-api

United Kingdom Town / City geolocations with FastAPI & Mongo

Build container

To build a custom image or extend the api run the following cmds

# update the following variables as required
API_PORT=7000
API_HOST=locahost
# API variables
API_DB_NAME=towns_db
API_DB_USERNAME=admin
API_DB_PASSWORD=admin
API_DB_HOST=host.docker.internal
API_DB_PORT=27017

# Then build & run
make docker-build
make docker-run

Build locally instructions

Open Makefile in your ide & update the following varables as required:

DB_NAME=<YOUR_DB_NAME>
DB_USERNAME=<YOUR_DB_USERNAME>
DB_PASSWORD=<YOUR_DB_PASSWORD>

Make sure you have mongoimport command available & run the below command to import the towns JSON dump

make mongo-import-towns
You might also like...
Adds simple SQLAlchemy support to FastAPI

FastAPI-SQLAlchemy FastAPI-SQLAlchemy provides a simple integration between FastAPI and SQLAlchemy in your application. It gives access to useful help

Opinionated set of utilities on top of FastAPI

FastAPI Contrib Opinionated set of utilities on top of FastAPI Free software: MIT license Documentation: https://fastapi-contrib.readthedocs.io. Featu

Reusable utilities for FastAPI

Reusable utilities for FastAPI Documentation: https://fastapi-utils.davidmontague.xyz Source Code: https://github.com/dmontagu/fastapi-utils FastAPI i

This code generator creates FastAPI app from an openapi file.

fastapi-code-generator This code generator creates FastAPI app from an openapi file. This project is an experimental phase. fastapi-code-generator use

FastAPI framework plugins

Plugins for FastAPI framework, high performance, easy to learn, fast to code, ready for production fastapi-plugins FastAPI framework plugins Cache Mem

Prometheus exporter for Starlette and FastAPI

starlette_exporter Prometheus exporter for Starlette and FastAPI. The middleware collects basic metrics: Counter: starlette_requests_total Histogram:

🚀   Cookiecutter Template for FastAPI + React Projects.  Using PostgreSQL, SQLAlchemy, and Docker
🚀 Cookiecutter Template for FastAPI + React Projects. Using PostgreSQL, SQLAlchemy, and Docker

FastAPI + React · A cookiecutter template for bootstrapping a FastAPI and React project using a modern stack. Features FastAPI (Python 3.8) JWT authen

A rate limiter for Starlette and FastAPI

SlowApi A rate limiting library for Starlette and FastAPI adapted from flask-limiter. Note: this is alpha quality code still, the API may change, and

api versioning for fastapi web applications

fastapi-versioning api versioning for fastapi web applications Installation pip install fastapi-versioning Examples from fastapi import FastAPI from f

Comments
  • Error calling make mongo-import-towns

    Error calling make mongo-import-towns

    logs:

    [email protected]:~/Projects/geolocations-api$ make mongo-import-towns
    mongoimport -d bn_database -c towns --file ./towns.json --authenticationDatabase admin --username admin --password admin --host localhost --port 27017
    2022-01-11T11:34:12.832+0000	Failed: error connecting to db server: server returned error on SASL authentication step: BSON field 'saslContinue.mechanism' is an unknown field.
    2022-01-11T11:34:12.832+0000	imported 0 documents
    make: *** [Makefile:30: mongo-import-towns] Error 1
    
    
    bug 
    opened by joegasewicz 1
  • Running on Linux

    Running on Linux

    Error running on Ubuntu 20.04.3 LTS

    geolocations_1  | ERROR:    Exception in ASGI application
    geolocations_1  | Traceback (most recent call last):
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 376, in run_asgi
    geolocations_1  |     result = await app(self.scope, self.receive, self.send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
    geolocations_1  |     return await self.app(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/fastapi/applications.py", line 208, in __call__
    geolocations_1  |     await super().__call__(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/applications.py", line 112, in __call__
    geolocations_1  |     await self.middleware_stack(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/middleware/errors.py", line 181, in __call__
    geolocations_1  |     raise exc
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
    geolocations_1  |     await self.app(scope, receive, _send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/middleware/cors.py", line 84, in __call__
    geolocations_1  |     await self.app(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
    geolocations_1  |     raise exc
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
    geolocations_1  |     await self.app(scope, receive, sender)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
    geolocations_1  |     await route.handle(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
    geolocations_1  |     await self.app(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
    geolocations_1  |     response = await func(request)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/fastapi/routing.py", line 226, in app
    geolocations_1  |     raw_response = await run_endpoint_function(
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/fastapi/routing.py", line 161, in run_endpoint_function
    geolocations_1  |     return await run_in_threadpool(dependant.call, **values)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
    geolocations_1  |     return await anyio.to_thread.run_sync(func, *args)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/anyio/to_thread.py", line 28, in run_sync
    geolocations_1  |     return await get_asynclib().run_sync_in_worker_thread(func, *args, cancellable=cancellable,
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 818, in run_sync_in_worker_thread
    geolocations_1  |     return await future
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 754, in run
    geolocations_1  |     result = context.run(func, *args)
    geolocations_1  |   File "/geolocations-api/./api/main.py", line 65, in locations
    geolocations_1  |     serialized_towns = mongo_id.multiple(towns)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/mongo_id_marshaller/mongo_id.py", line 31, in multiple
    geolocations_1  |     for query_data in _doc_generator(query_list):
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/mongo_id_marshaller/mongo_id.py", line 5, in _doc_generator
    geolocations_1  |     for doc in mongo_docs:
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/cursor.py", line 1159, in next
    geolocations_1  |     if len(self.__data) or self._refresh():
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/cursor.py", line 1057, in _refresh
    geolocations_1  |     self.__session = self.__collection.database.client._ensure_session()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1603, in _ensure_session
    geolocations_1  |     return self.__start_session(True, causal_consistency=False)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1553, in __start_session
    geolocations_1  |     server_session = self._get_server_session()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1589, in _get_server_session
    geolocations_1  |     return self._topology.get_server_session()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/topology.py", line 530, in get_server_session
    geolocations_1  |     session_timeout = self._check_session_support()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/topology.py", line 514, in _check_session_support
    geolocations_1  |     self._select_servers_loop(
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/topology.py", line 216, in _select_servers_loop
    geolocations_1  |     raise ServerSelectionTimeoutError(
    geolocations_1  | pymongo.errors.ServerSelectionTimeoutError: host.docker.internal:27017: [Errno -2] Name or service not known, Timeout: 30s, Topology Description: <TopologyDescription id: 61dd85923abcec01d811f834, topology_type: Unknown, servers: [<ServerDescription ('host.docker.internal', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('host.docker.internal:27017: [Errno -2] Name or service not known')>]>
    geolocations_1  | ERROR:    Exception in ASGI application
    geolocations_1  | Traceback (most recent call last):
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 376, in run_asgi
    geolocations_1  |     result = await app(self.scope, self.receive, self.send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
    geolocations_1  |     return await self.app(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/fastapi/applications.py", line 208, in __call__
    geolocations_1  |     await super().__call__(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/applications.py", line 112, in __call__
    geolocations_1  |     await self.middleware_stack(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/middleware/errors.py", line 181, in __call__
    geolocations_1  |     raise exc
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
    geolocations_1  |     await self.app(scope, receive, _send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/middleware/cors.py", line 84, in __call__
    geolocations_1  |     await self.app(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
    geolocations_1  |     raise exc
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
    geolocations_1  |     await self.app(scope, receive, sender)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
    geolocations_1  |     await route.handle(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
    geolocations_1  |     await self.app(scope, receive, send)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
    geolocations_1  |     response = await func(request)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/fastapi/routing.py", line 226, in app
    geolocations_1  |     raw_response = await run_endpoint_function(
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/fastapi/routing.py", line 161, in run_endpoint_function
    geolocations_1  |     return await run_in_threadpool(dependant.call, **values)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
    geolocations_1  |     return await anyio.to_thread.run_sync(func, *args)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/anyio/to_thread.py", line 28, in run_sync
    geolocations_1  |     return await get_asynclib().run_sync_in_worker_thread(func, *args, cancellable=cancellable,
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 818, in run_sync_in_worker_thread
    geolocations_1  |     return await future
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 754, in run
    geolocations_1  |     result = context.run(func, *args)
    geolocations_1  |   File "/geolocations-api/./api/main.py", line 65, in locations
    geolocations_1  |     serialized_towns = mongo_id.multiple(towns)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/mongo_id_marshaller/mongo_id.py", line 31, in multiple
    geolocations_1  |     for query_data in _doc_generator(query_list):
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/mongo_id_marshaller/mongo_id.py", line 5, in _doc_generator
    geolocations_1  |     for doc in mongo_docs:
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/cursor.py", line 1159, in next
    geolocations_1  |     if len(self.__data) or self._refresh():
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/cursor.py", line 1057, in _refresh
    geolocations_1  |     self.__session = self.__collection.database.client._ensure_session()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1603, in _ensure_session
    geolocations_1  |     return self.__start_session(True, causal_consistency=False)
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1553, in __start_session
    geolocations_1  |     server_session = self._get_server_session()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/mongo_client.py", line 1589, in _get_server_session
    geolocations_1  |     return self._topology.get_server_session()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/topology.py", line 530, in get_server_session
    geolocations_1  |     session_timeout = self._check_session_support()
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/topology.py", line 514, in _check_session_support
    geolocations_1  |     self._select_servers_loop(
    geolocations_1  |   File "/root/.local/share/virtualenvs/geolocations-api-NPGMF1o2/lib/python3.10/site-packages/pymongo/topology.py", line 216, in _select_servers_loop
    geolocations_1  |     raise ServerSelectionTimeoutError(
    geolocations_1  | pymongo.errors.ServerSelectionTimeoutError: host.docker.internal:27017: [Errno -2] Name or service not known, Timeout: 30s, Topology Description: <TopologyDescription id: 61dd85923abcec01d811f834, topology_type: Unknown, servers: [<ServerDescription ('host.docker.internal', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('host.docker.internal:27017: [Errno -2] Name or service not known')>]>
    
    
    bug 
    opened by joegasewicz 0
Releases(v1.0.0)
Owner
Joe Gasewicz
I'm a Go, Python, Typescript, Swift & C full stack developer.. I'm a Jazz bassist & prefer cats.
Joe Gasewicz
京东图片点击验证码识别

京东图片验证码识别 本项目是@yqchilde 大佬的 JDMemberCloseAccount 识别图形验证码(#45)思路验证,若你也有思路可以提交Issue和PR也可以在 @yqchilde 的 TG群 找到我 声明 本脚本只是为了学习研究使用 本脚本除了采集处理验证码图片没有其他任何功能,也

AntonVanke 37 Dec 22, 2022
Keepalive - Discord Bot to keep threads from expiring

keepalive Discord Bot to keep threads from expiring Installation Create a new Di

Francesco Pierfederici 5 Mar 14, 2022
A dynamic FastAPI router that automatically creates CRUD routes for your models

⚡ Create CRUD routes with lighting speed ⚡ A dynamic FastAPI router that automatically creates CRUD routes for your models Documentation: https://fast

Adam Watkins 943 Jan 01, 2023
Flask-vs-FastAPI - Understanding Flask vs FastAPI Web Framework. A comparison of two different RestAPI frameworks.

Flask-vs-FastAPI Understanding Flask vs FastAPI Web Framework. A comparison of two different RestAPI frameworks. IntroductionIn Flask is a popular mic

Mithlesh Navlakhe 1 Jan 01, 2022
Slack webhooks API served by FastAPI

Slackers Slack webhooks API served by FastAPI What is Slackers Slackers is a FastAPI implementation to handle Slack interactions and events. It serves

Niels van Huijstee 68 Jan 05, 2023
Redis-based rate-limiting for FastAPI

Redis-based rate-limiting for FastAPI

Glib 6 Nov 14, 2022
API using python and Fastapi framework

Welcome 👋 CFCApi is a API DEVELOPMENT PROJECT UNDER CODE FOR COMMUNITY ! Project Walkthrough 🚀 CFCApi run on Python using FASTapi Framework Docs The

Abhishek kushwaha 7 Jan 02, 2023
Adds integration of the Chameleon template language to FastAPI.

fastapi-chameleon Adds integration of the Chameleon template language to FastAPI. If you are interested in Jinja instead, see the sister project: gith

Michael Kennedy 124 Nov 26, 2022
FastAPI native extension, easy and simple JWT auth

fastapi-jwt FastAPI native extension, easy and simple JWT auth

Konstantin Chernyshev 19 Dec 12, 2022
Get MODBUS data from Sofar (K-TLX) inverter through LSW-3 or LSE module

SOFAR Inverter + LSW-3/LSE Small utility to read data from SOFAR K-TLX inverters through the Solarman (LSW-3/LSE) datalogger. Two scripts to get inver

58 Dec 29, 2022
Asynchronous event dispatching/handling library for FastAPI and Starlette

fastapi-events An event dispatching/handling library for FastAPI, and Starlette. Features: straightforward API to emit events anywhere in your code ev

Melvin 238 Jan 07, 2023
Simple web app example serving a PyTorch model using streamlit and FastAPI

streamlit-fastapi-model-serving Simple example of usage of streamlit and FastAPI for ML model serving described on this blogpost and PyConES 2020 vide

Davide Fiocco 291 Jan 06, 2023
Cube-CRUD is a simple example of a REST API CRUD in a context of rubik's cube review service.

Cube-CRUD is a simple example of a REST API CRUD in a context of rubik's cube review service. It uses Sqlalchemy ORM to manage the connection and database operations.

Sebastian Andrade 1 Dec 11, 2021
A request rate limiter for fastapi

fastapi-limiter Introduction FastAPI-Limiter is a rate limiting tool for fastapi routes. Requirements redis Install Just install from pypi pip insta

long2ice 200 Jan 08, 2023
🚢 Docker images and utilities to power your Python APIs and help you ship faster. With support for Uvicorn, Gunicorn, Starlette, and FastAPI.

🚢 inboard 🐳 Docker images and utilities to power your Python APIs and help you ship faster. Description This repository provides Docker images and a

Brendon Smith 112 Dec 30, 2022
Github timeline htmx based web app rewritten from Common Lisp to Python FastAPI

python-fastapi-github-timeline Rewrite of Common Lisp htmx app _cl-github-timeline into Python using FastAPI. This project tries to prove, that with h

Jan Vlčinský 4 Mar 25, 2022
Local Telegram Bot With FastAPI & Ngrok

An easy local telegram bot server with python, fastapi and ngrok.

Ömer Faruk Özdemir 7 Dec 25, 2022
Mixer -- Is a fixtures replacement. Supported Django, Flask, SqlAlchemy and custom python objects.

The Mixer is a helper to generate instances of Django or SQLAlchemy models. It's useful for testing and fixture replacement. Fast and convenient test-

Kirill Klenov 871 Dec 25, 2022
MQTT FastAPI Wrapper With Python

mqtt-fastapi-wrapper Quick start Create mosquitto.conf with the following content: ➜ /tmp cat mosquitto.conf persistence false allow_anonymous true

Vitalii Kulanov 3 May 09, 2022
A server hosts a FastAPI application and multiple clients can be connected to it via SocketIO.

FastAPI_and_SocketIO A server hosts a FastAPI application and multiple clients can be connected to it via SocketIO. Executing server.py sets up the se

Ankit Rana 2 Mar 04, 2022