The lino_xl.lib.statbel.countries plugin

Side note: Code snippets (lines starting with >>>) in this document get tested as part of our development workflow. The following initialization snippet tells you which demo project is being used in this document.

>>> from lino import startup
>>> startup('lino_welfare.projects.gerd.settings.doctests')
>>> from lino.api.doctest import *
>>> from django.db.models import Q
>>> dd.plugins.countries
<lino_xl.lib.statbel.countries.Plugin lino_xl.lib.statbel.countries(needs ['lino.modlib.office', 'lino_xl.lib.xl'])>
>>> dd.plugins.countries.extends_models
['Country', 'Place']

Refugee statuses and former country

The demo database comes with 224 known countries, but some of them are not real countries because they actually represent for example a refugee status or a former country.

Lino knows them because their actual_country field points to another (the “real”) country.

>>> countries.Country.objects.all().count()
224
>>> countries.Country.objects.filter(actual_country__isnull=True).count()
220
>>> countries.Country.objects.filter(actual_country__isnull=False).count()
4
>>> rt.show(countries.Countries,
...     filter=Q(actual_country__isnull=False),
...     column_names="isocode name inscode actual_country actual_country__isocode")
========== ============================================ ========== ================ ==========
 ISO-Code   Bezeichnung                                  INS code   Actual country   ISO-Code
---------- -------------------------------------------- ---------- ---------------- ----------
 BYAA       Byelorussian SSR Soviet Socialist Republic              Belarus          BY
 DDDE       German Democratic Republic                   170        Deutschland      DE
 DEDE       German Federal Republic                      103        Deutschland      DE
 SUHH       USSR, Union of Soviet Socialist Republics               Russland         RU
========== ============================================ ========== ================ ==========

The following database fields refer to a country:

>>> for m, f in rt.models.countries.Country._lino_ddh.fklist:
...     print ("{} {}".format(dd.full_model_name(m), f.name))
addresses.Address country
contacts.Partner country
countries.Country actual_country
countries.Place country
cv.Experience country
cv.Study country
cv.Training country
pcsw.Client birth_country
pcsw.Client nationality
>>> kw = dict()
>>> fields = 'count rows'
>>> demo_get(
...    'rolf', 'choices/addresses/Address/country', fields, 220, **kw)
>>> demo_get(
...    'rolf', 'choices/contacts/Partners/country', fields, 220, **kw)
>>> demo_get(
...    'rolf', 'choices/pcsw/Clients/country', fields, 220, **kw)
>>> demo_get(
...    'rolf', 'choices/countries/Countries/actual_country', fields, 220, **kw)
>>> demo_get(
...    'rolf', 'choices/cv/Training/country', fields, 220, **kw)

The following fields have the full list, including fake countries)

>>> demo_get(
...    'rolf', 'choices/pcsw/Clients/nationality', fields, 224, **kw)
>>> demo_get(
...    'rolf', 'choices/countries/Places/country', fields, 224, **kw)