Package: django-cities-light
django-cities-light –Simple django-cities alternativeThis add-on provides models and commands to import country, subregion, region/state, and
city data in your database.The data is pulled fromGeoNamesand contains cities, subregions, regions/states and countries.Spatial query support is not required by this application.This application is very simple and is useful if you want to make a simple
address book for example. If you intend to build a fully featured spatial
database, you should usedjango-cities.Requirements:Python >= 3.8Django >= 3.2MySQL or PostgreSQL or SQLite.Yes, for some reason, code that used to work on MySQL (not without pain xD)
does not work anymore. So we’re now using django.db.transaction.atomic which
comes from Django 1.6 just to support MySQL quacks.FeaturesGraphQL supportBuilt-in admin supportRest-Framework supportAjax Select Lookup supportUpgradeSee CHANGELOG.InstallationInstall django-cities-light:pip install django-cities-lightOr the development version:pip install -e git+git@github.com:yourlabs/django-cities-light.git#egg=cities_lightAddcities_lightto yourINSTALLED_APPS.Configure filters to exclude data you don’t want, ie.:CITIES_LIGHT_TRANSLATION_LANGUAGES = ['fr', 'en']
CITIES_LIGHT_INCLUDE_COUNTRIES = ['FR']
CITIES_LIGHT_INCLUDE_CITY_TYPES = ['PPL', 'PPLA', 'PPLA2', 'PPLA3', 'PPLA4', 'PPLC', 'PPLF', 'PPLG', 'PPLL', 'PPLR', 'PPLS', 'STLMT',]Now, run migrations, it will only create tables for models that are not
disabled:./manage.py migrateData import/updateFinally, populate your database with command:./manage.py cities_lightThis command is well documented, consult the help with:./manage.py help cities_lightBy default, update procedure attempts to update all fields, including Country/Region/Subregion/City slugs. But there is an option to keep them intact:./manage.py cities_light --keep-slugsGet more citiesThe configuration parameter CITIES_LIGHT_CITY_SOURCES, comes with the default valuehttp://download.geonames.org/export/dump/cities15000.zipthat has cities with a population
over 15000, if you need to load cities with less population please use another source. For the list
of available source please check here:http://download.geonames.org/export/dump/readme.txtUsing fixturesGeonames.org is updated on daily basis and its full import is quite slow, so
if you want to import the same data multiple times (for example on different
servers) it is convenient to use fixtures with the helper management command:./manage.py cities_light_fixtures dump
./manage.py cities_light_fixtures loadTo reduce space, JSON fixtures are compressed with bzip2 and can be fetched
from any HTTP server or local filesystem.Consult the help with:./manage.py help cities_light_fixturesDevelopmentCreate development virtualenv (you need to have tox installed in your base system):tox -e dev
source .tox/dev/bin/activateTo run the test project, with the folder of the project as the current directory, run:export PYTHONPATH="${PYTHONPATH}:/app/src"
docker run  -d postgres -p 5432:5432Then run the full import:test_project/manage.py migrate
test_project/manage.py cities_lightThere are several environment variables which affect project settings (like DB_ENGINE and CI), you can find them all in test_project/settings.py.For example to change the database engine, you can run:export DB_ENGINE=postgresql
export DB_HOST=192.168.0.118
export DB_NAME=app
export DB_USER=postgres
export DB_PORT=5432To run the test suite you need to have postgresql or mysql installed with passwordless login, or just use sqlite. Otherwise the tests which try to create/drop database will fail.Running the full test suite:toxTo run the tests in specific environment use the following command:tox -e py37-django31-sqliteAnd to run one specific test use this one:tox -e py37-django31-sqlite -- cities_light/tests/test_form.py::FormTestCase::testCountryFormNameAndContinentAloneTo run it even faster, you can switch to specific tox virtualenv:source .tox/py37-django18-sqlite/bin/activate
CI=true test_project/manage.py test cities_light.tests.test_form.FormTestCase.testCountryFormNameAndContinentAloneIf you want to build the docs, use the following steps:source .tox/dev/bin/activate
cd docs
make htmlTODOSAdd ruff for formattingImprove the performance of the import commandImprove the local development environment withhttps://tox.wiki/en/legacy/example/devenv.htmlResourcesYou could subscribe to the mailing list ask questions or just be informed of
package updates.Git graciously hostedbyGitHub,Documentation graciously hostedbyRTFD,Package graciously hostedbyPyPi,Continuous integration graciously hostedbyTravis-ci