Skip to main content

Simple alternative to django-cities

Project description

https://secure.travis-ci.org/yourlabs/django-cities-light.svg?branch=master https://img.shields.io/pypi/dm/django-cities-light.svg https://img.shields.io/pypi/v/django-cities-light.svg https://codecov.io/github/yourlabs/django-cities-light/coverage.svg

django-cities-light – Simple django-cities alternative

This add-on provides models and commands to import country, subregion, region/state, and city data in your database.

The data is pulled from GeoNames and 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 use django-cities.

Requirements:

  • Python >= 3.8

  • Django >= 3.0

  • MySQL 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.

Upgrade

See CHANGELOG.

Installation

Install django-cities-light:

pip install django-cities-light

Or the development version:

pip install -e git+git@github.com:yourlabs/django-cities-light.git#egg=cities_light

Add cities_light to your INSTALLED_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 migrate

Data import/update

Finally, populate your database with command:

./manage.py cities_light

This command is well documented, consult the help with:

./manage.py help cities_light

By 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-slugs

Get more cities

The configuration parameter CITIES_LIGHT_CITY_SOURCES, comes with the default value http://download.geonames.org/export/dump/cities15000.zip that 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.txt

Using fixtures

Geonames.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 load

To 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_fixtures

Development

Create development virtualenv (you need to have tox installed in your base system):

tox -e dev
source .tox/dev/bin/activate

Then run the full import:

test_project/manage.py migrate
test_project/manage.py cities_light

There are several environment variables which affect project settings (like DB_ENGINE and CI), you can find them all in test_project/settings.py.

To 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:

tox

To run the tests in specific environment use the following command:

tox -e py37-django31-sqlite

And to run one specific test use this one:

tox -e py37-django31-sqlite -- cities_light/tests/test_form.py::FormTestCase::testCountryFormNameAndContinentAlone

To 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.testCountryFormNameAndContinentAlone

If you want to build the docs, use the following steps:

source .tox/dev/bin/activate
cd docs
make html

Resources

You could subscribe to the mailing list ask questions or just be informed of package updates.

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

django-cities-light-3.9.1.tar.gz (100.6 kB view details)

Uploaded Source

Built Distribution

django_cities_light-3.9.1-py3-none-any.whl (117.8 kB view details)

Uploaded Python 3

File details

Details for the file django-cities-light-3.9.1.tar.gz.

File metadata

  • Download URL: django-cities-light-3.9.1.tar.gz
  • Upload date:
  • Size: 100.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for django-cities-light-3.9.1.tar.gz
Algorithm Hash digest
SHA256 d4ed47256f999a619e61b77aa2fd789be897f9307eb0640f0d5b3e1db403e0b6
MD5 6b87971febe3495a758cfeefe715e040
BLAKE2b-256 98b56eaa8a209227169b15ca33b8af13ed4441a2e4093aa10a9928b39382d9db

See more details on using hashes here.

File details

Details for the file django_cities_light-3.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_cities_light-3.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6f55a0ce42a04c8e5df3ae0a08ced1ef59643a6da2973ddaa60149a7a33b1f9f
MD5 ad38e99f5500e8dc013d25e36d6b01b3
BLAKE2b-256 41e4d5d8f77707c27467fed8838544653e1e94d0b659007a4ea1c9779e3ef793

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page