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
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
Prometheus exporter for several chia node statistics

prometheus-chia-exporter Prometheus exporter for several chia node statistics It's assumed that the full node, the harvester and the wallet run on the

30 Sep 19, 2022
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
Learn to deploy a FastAPI application into production DigitalOcean App Platform

Learn to deploy a FastAPI application into production DigitalOcean App Platform. This is a microservice for our Try Django 3.2 project. The goal is to extract any and all text from images using a tec

Coding For Entrepreneurs 59 Nov 29, 2022
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

Koudai Aono 632 Jan 05, 2023
API Simples com python utilizando a biblioteca FastApi

api-fastapi-python API Simples com python utilizando a biblioteca FastApi Para rodar esse script sΓ£o necessΓ‘rias duas bibliotecas: Fastapi: Comando de

Leonardo Grava 0 Apr 29, 2022
Generate Class & Decorators for your FastAPI project βœ¨πŸš€

Classes and Decorators to use FastAPI with class based routing. In particular this allows you to construct an instance of a class and have methods of that instance be route handlers for FastAPI & Pyt

Yasser Tahiri 34 Oct 27, 2022
Easy and secure implementation of Azure AD for your FastAPI APIs πŸ”’

FastAPI-Azure-auth Azure AD Authentication for FastAPI apps made easy. πŸš€ Description FastAPI is a modern, fast (high-performance), web framework for

Intility 216 Dec 27, 2022
A FastAPI Middleware of joerick/pyinstrument to check your service performance.

fastapi_profiler A FastAPI Middleware of joerick/pyinstrument to check your service performance. πŸ“£ Info A FastAPI Middleware of pyinstrument to check

LeoSun 107 Jan 05, 2023
Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application.

Flask-Bcrypt Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application. Due to the recent increased prevelance of

Max Countryman 310 Dec 14, 2022
FastAPI IPyKernel Sandbox

FastAPI IPyKernel Sandbox This repository is a light-weight FastAPI project that is meant to provide a wrapper around IPyKernel interactions. It is in

Nick Wold 2 Oct 25, 2021
API for Submarino store

submarino-api API for the submarino e-commerce documentation read the documentation in: https://submarino-api.herokuapp.com/docs or in https://submari

Miguel 1 Oct 14, 2021
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

Dean Way 472 Jan 02, 2023
flask extension for integration with the awesome pydantic package

flask extension for integration with the awesome pydantic package

249 Jan 06, 2023
🐍 Simple FastAPI template with factory pattern architecture

Description This is a minimalistic and extensible FastAPI template that incorporates factory pattern architecture with divisional folder structure. It

Redowan Delowar 551 Dec 24, 2022
fastapi-cache is a tool to cache fastapi response and function result, with backends support redis and memcached.

fastapi-cache Introduction fastapi-cache is a tool to cache fastapi response and function result, with backends support redis, memcache, and dynamodb.

long2ice 551 Jan 08, 2023
πŸš€ 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

Gabriel Abud 1.4k Jan 02, 2023
Prometheus exporter for Starlette and FastAPI

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

Steve Hillier 225 Jan 05, 2023
Feature rich robust FastAPI template.

Flexible and Lightweight general-purpose template for FastAPI. Usage ⚠️ Git, Python and Poetry must be installed and accessible ⚠️ Poetry version must

Pavel Kirilin 588 Jan 04, 2023
Prometheus integration for Starlette.

Starlette Prometheus Introduction Prometheus integration for Starlette. Requirements Python 3.6+ Starlette 0.9+ Installation $ pip install starlette-p

JosΓ© Antonio Perdiguero 229 Dec 21, 2022