A lightweight, performant, and scalable Python package for Kenyan counties, constituencies, and wards, optimized for FastAPI and Django.
Project description
Kenyan Counties
A lightweight, performant Python package providing data for all 47 counties, constituencies, and wards in Kenya. Optimized for speed with zero I/O overhead at runtime.
Installation
# Core only
pip install kenyan-counties
# With FastAPI / Pydantic support
pip install kenyan-counties[fastapi]
# With Django support
pip install kenyan-counties[django]
# Everything
pip install kenyan-counties[all]
Usage
Core API
from kenyan_counties import (
get_all_counties,
get_county_by_code,
get_county_by_name,
get_constituencies_for_county,
get_wards_for_constituency,
)
# All 47 counties
counties = get_all_counties()
# Lookup by code (1-47)
mombasa = get_county_by_code(1)
print(mombasa) # <County: Mombasa (1)>
# Lookup by name (case-insensitive)
nairobi = get_county_by_name("nairobi")
print(nairobi.code) # 47
# Constituencies in a county
constituencies = get_constituencies_for_county(1)
# Wards in a constituency
wards = get_wards_for_constituency(1, "Changamwe")
print(wards[0].name) # Port Reitz
FastAPI
from fastapi import FastAPI
from kenyan_counties.fastapi import router
app = FastAPI()
app.include_router(router)
The router exposes ready-to-use endpoints. To add custom logic, import the Pydantic models and core functions directly:
from kenyan_counties.fastapi import CountyModel, ConstituencyModel, WardModel
from kenyan_counties.core import get_county_by_name, get_wards_for_constituency
@app.get("/search", response_model=CountyModel)
def search_county(name: str):
county = get_county_by_name(name)
if not county:
raise HTTPException(status_code=404, detail="County not found")
return CountyModel(
code=county.code,
name=county.name,
constituencies=[
ConstituencyModel(
name=c.name,
wards=[WardModel(name=w.name) for w in c.wards]
)
for c in county.constituencies
]
)
This adds the following endpoints:
| Method | Path | Description |
|---|---|---|
| GET | /counties/ |
List all 47 counties |
| GET | /counties/{code} |
Get a county by code |
| GET | /counties/{code}/constituencies |
List constituencies for a county |
Django
Add to INSTALLED_APPS:
INSTALLED_APPS = [
...
"kenyan_counties",
]
Run migrations and seed the database:
python manage.py migrate
python manage.py load_kenya_counties
This creates County, Constituency, and Ward records you can query via the Django ORM.
Using the models in views or serializers:
from kenyan_counties.models import County, Constituency, Ward
# In a view
def county_list(request):
counties = County.objects.all()
...
# In a DRF serializer
class WardSerializer(serializers.ModelSerializer):
class Meta:
model = Ward
fields = ["id", "name"]
class ConstituencySerializer(serializers.ModelSerializer):
wards = WardSerializer(many=True, read_only=True)
class Meta:
model = Constituency
fields = ["id", "name", "wards"]
class CountySerializer(serializers.ModelSerializer):
constituencies = ConstituencySerializer(many=True, read_only=True)
class Meta:
model = County
fields = ["code", "name", "constituencies"]
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kenyan_counties-0.3.1.tar.gz.
File metadata
- Download URL: kenyan_counties-0.3.1.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.13.5 Darwin/25.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6fbba74b45066f9148b01a9cdb907b4637305578586eeb1962ed038fc2ca59a
|
|
| MD5 |
f292eff4e022d23a3b7d96cc30c7b61f
|
|
| BLAKE2b-256 |
042b0e2c6f4c93da86e8bf139d6133c890feb7596a0faf91f0dec45f6abfe473
|
File details
Details for the file kenyan_counties-0.3.1-py3-none-any.whl.
File metadata
- Download URL: kenyan_counties-0.3.1-py3-none-any.whl
- Upload date:
- Size: 19.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.13.5 Darwin/25.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8feacd1c246367ad80bd667cc682afcc6d76b9d4be5ec1d373b6372bad06adb
|
|
| MD5 |
7288d4017f674bf2f802c87a56df6a9e
|
|
| BLAKE2b-256 |
84ee1bf2e5d040737b0754a5e267d76613114382347b3ae1faa3436ac4af5950
|