Skip to content
Snippets Groups Projects
Commit d7b8f2f6 authored by Daniel Levy's avatar Daniel Levy
Browse files

Merge branch 'add_south_sudan_importer' of...

Merge branch 'add_south_sudan_importer' of git.coop:aptivate/client-projects/internewshid into add_south_sudan_importer
parents 993e2f58 cfb416ed
No related branches found
No related tags found
3 merge requests!176Staging,!172Add south sudan importer,!169Change importer to handle protection concern
Pipeline #10559 passed
Showing
with 370 additions and 200 deletions
---
image: python:3.6
services:
- mysql:5.7
variables:
DJANGO_SECRET_KEY: foobarbazbazbarfoo
MYSQL_ROOT_PASSWORD: internewshid
MYSQL_DATABASE: internewshid
before_script:
- ln -srf internewshid/local_settings.py.gitlab internewshid/local_settings.py
- echo "SECRET_KEY = '$DJANGO_SECRET_KEY'" >> internewshid/private_settings.py
- echo "DB_PASSWORD = '$MYSQL_ROOT_PASSWORD'" >> internewshid/private_settings.py
- apt update && apt install -y default-libmysqlclient-dev python-pymysql python-mysqldb nodejs node-less
- pip install pipenv && pipenv sync --dev
cache:
paths:
- "$CI_PROJECT_DIR/.cache/pip"
- "$CI_PROJECT_DIR/.cache/pipenv"
stages:
- sanity
- lint
- test
gitlab-ci:
code-sanity:
image: python:3.6
services:
- mysql:5.7
stage: sanity
before_script:
- ln -srf internewshid/local_settings.py.gitlab internewshid/local_settings.py
- ln -srf internewshid/language_settings.py.english internewshid/language_settings.py
- echo "SECRET_KEY = '$DJANGO_SECRET_KEY'" >> internewshid/private_settings.py
- echo "DB_PASSWORD = '$MYSQL_ROOT_PASSWORD'" >> internewshid/private_settings.py
- apt update && apt install -y default-libmysqlclient-dev python-pymysql python-mysqldb nodejs node-less
- pip install pipenv && pipenv sync --dev
script:
- pipenv run safety check --bare
- pipenv run python manage.py check
- pipenv run python manage.py makemigrations --check
- pipenv run python manage.py migrate --noinput
code-lint:
image: python:3.6
services:
- mysql:5.7
stage: lint
before_script:
- ln -srf internewshid/local_settings.py.gitlab internewshid/local_settings.py
- ln -srf internewshid/language_settings.py.english internewshid/language_settings.py
- echo "SECRET_KEY = '$DJANGO_SECRET_KEY'" >> internewshid/private_settings.py
- echo "DB_PASSWORD = '$MYSQL_ROOT_PASSWORD'" >> internewshid/private_settings.py
- apt update && apt install -y default-libmysqlclient-dev python-pymysql python-mysqldb nodejs node-less
- pip install pipenv && pipenv sync --dev
script:
- pipenv run pylava -o setup.cfg
- pipenv run isort -q -rc -c -df -sp setup.cfg
unit-test:
image: python:3.6
services:
- mysql:5.7
stage: test
before_script:
- ln -srf internewshid/local_settings.py.gitlab internewshid/local_settings.py
- ln -srf internewshid/language_settings.py.english internewshid/language_settings.py
- echo "SECRET_KEY = '$DJANGO_SECRET_KEY'" >> internewshid/private_settings.py
- echo "DB_PASSWORD = '$MYSQL_ROOT_PASSWORD'" >> internewshid/private_settings.py
- apt update && apt install -y default-libmysqlclient-dev python-pymysql python-mysqldb nodejs node-less
- pip install pipenv && pipenv sync --dev
script:
- pipenv run pytest -v --cov
......@@ -7,9 +7,10 @@ verify_ssl = true
python_version = "3.6"
[packages]
asgiref = "*"
"django-bootstrap3" = "*"
"django-tables2" = "*"
"django.js" = {editable = true,git = "https://git@github.com/aptivate/django.js.git",ref = "ca328a94b00023bd64f4fc1c908675edaaf2ac19"}
"django.js" = {ref = "ca328a94b00023bd64f4fc1c908675edaaf2ac19",git = "https://git@github.com/aptivate/django.js.git",editable = true}
"linecache2" = "*"
Django = ">2.2.8,<3.0"
Pillow = "*"
......@@ -48,3 +49,4 @@ pytest-pythonpath = "*"
werkzeug = "*"
pydocstyle = "*"
django-dynamic-fixture = "*"
safety = "*"
{
"_meta": {
"hash": {
"sha256": "055641fba96483e962cb6694740ae3899da572d1da746c73accceab1a7e98008"
"sha256": "8a5bc8f5d57faebea7b5e6fc4f117b54ae9dbc2410c85feca8332dc7831aa7dd"
},
"pipfile-spec": 6,
"requires": {
......@@ -21,6 +21,7 @@
"sha256:7e06d934a7718bf3975acbf87780ba678957b87c7adc056f13b6215d610695a0",
"sha256:ea448f92fc35a0ef4b1508f53a04c4670255a3f33d22a81c8fc9c872036adbe5"
],
"index": "pypi",
"version": "==3.2.3"
},
"cssmin": {
......@@ -32,12 +33,11 @@
},
"django": {
"hashes": [
"sha256:1226168be1b1c7efd0e66ee79b0e0b58b2caa7ed87717909cd8a57bb13a7079a",
"sha256:9a4635813e2d498a3c01b10c701fe4a515d76dd290aaa792ccb65ca4ccb6b038"
"sha256:65e2387e6bde531d3bb803244a2b74e0253550a9612c64a60c8c5be267b30f50",
"sha256:b51c9c548d5c3b3ccbb133d0bebc992e8ec3f14899bce8936e6fdda6b23a1881"
],
"index": "pypi",
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==2.2.10"
"version": "==2.2.11"
},
"django-assets": {
"hashes": [
......@@ -64,11 +64,13 @@
"version": "==1.14.0"
},
"django-constance": {
"extras": [
"database"
],
"hashes": [
"sha256:12d827f9d5552ee39884fb6fb356f231f32b1ab8958acc715e3d1a6ecf913653"
],
"index": "pypi",
"markers": null,
"version": "==2.6.0"
},
"django-debug-toolbar": {
......@@ -109,6 +111,11 @@
"index": "pypi",
"version": "==1.0.3"
},
"django-js": {
"editable": true,
"git": "https://git@github.com/aptivate/django.js.git",
"ref": "ca328a94b00023bd64f4fc1c908675edaaf2ac19"
},
"django-picklefield": {
"hashes": [
"sha256:67a5e156343e3b032cac2f65565f0faa81635a99c7da74b0f07a0f5db467b646",
......@@ -174,11 +181,11 @@
},
"jsonfield": {
"hashes": [
"sha256:1a17efe9a26850e9175900cb37cf30c6182fc2251989f8af44ef47fbbf48eaff",
"sha256:a6616f38db42542d1f2434f5eae1a91550e5cc15dff27edd87b4358493ef2a92"
"sha256:7e4e84597de21eeaeeaaa7cc5da08c61c48a9b64d0c446b2d71255d01812887a",
"sha256:df857811587f252b97bafba42e02805e70a398a7a47870bc6358a0308dd689ed"
],
"index": "pypi",
"version": "==3.0.0"
"version": "==3.1.0"
},
"linecache2": {
"hashes": [
......@@ -222,7 +229,6 @@
"sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474",
"sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5"
],
"markers": "python_version >= '3.5'",
"version": "==1.18.1"
},
"openpyxl": {
......@@ -249,7 +255,6 @@
"sha256:d10e83866b48c0cdb83281f786564e2a2b51a7ae7b8a950c3442ad3c9e36b48c",
"sha256:e2140e1bbf9c46db9936ee70f4be6584d15ff8dc3dfff1da022d71227d53bad3"
],
"markers": "python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==1.0.1"
},
"pillow": {
......@@ -278,7 +283,6 @@
"sha256:ff3797f2f16bf9d17d53257612da84dd0758db33935777149b3334c01ff68865"
],
"index": "pypi",
"markers": "python_version >= '3.5'",
"version": "==7.0.0"
},
"python-dateutil": {
......@@ -310,16 +314,14 @@
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
],
"markers": "python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==1.14.0"
},
"sqlparse": {
"hashes": [
"sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177",
"sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"
"sha256:022fb9c87b524d1f7862b3037e541f68597a730a8843245c349fc93e1643dc4e",
"sha256:e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548"
],
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==0.3.0"
"version": "==0.3.1"
},
"webassets": {
"hashes": [
......@@ -335,6 +337,7 @@
"sha256:7e06d934a7718bf3975acbf87780ba678957b87c7adc056f13b6215d610695a0",
"sha256:ea448f92fc35a0ef4b1508f53a04c4670255a3f33d22a81c8fc9c872036adbe5"
],
"index": "pypi",
"version": "==3.2.3"
},
"attrs": {
......@@ -342,9 +345,29 @@
"sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
"sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
],
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==19.3.0"
},
"certifi": {
"hashes": [
"sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
"sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
],
"version": "==2019.11.28"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"click": {
"hashes": [
"sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
"sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
],
"version": "==7.0"
},
"coverage": {
"hashes": [
"sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3",
......@@ -379,17 +402,15 @@
"sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37",
"sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0"
],
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version != '3.4.*' and python_version < '4' and python_version >= '2.7'",
"version": "==5.0.3"
},
"django": {
"hashes": [
"sha256:1226168be1b1c7efd0e66ee79b0e0b58b2caa7ed87717909cd8a57bb13a7079a",
"sha256:9a4635813e2d498a3c01b10c701fe4a515d76dd290aaa792ccb65ca4ccb6b038"
"sha256:65e2387e6bde531d3bb803244a2b74e0253550a9612c64a60c8c5be267b30f50",
"sha256:b51c9c548d5c3b3ccbb133d0bebc992e8ec3f14899bce8936e6fdda6b23a1881"
],
"index": "pypi",
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==2.2.10"
"version": "==2.2.11"
},
"django-debug-toolbar": {
"hashes": [
......@@ -400,10 +421,10 @@
},
"django-dynamic-fixture": {
"hashes": [
"sha256:78cfa4c32b39ce38dc0647c97e460d206a2e97affc34ab2a1986812cd65dfbc0"
"sha256:cb6fac74b60ced901ce1f8f9e4dd8c438ab6e9021301a5ce2550fb424add4c33"
],
"index": "pypi",
"version": "==3.0.2"
"version": "==3.0.3"
},
"django-extensions": {
"hashes": [
......@@ -413,12 +434,19 @@
"index": "pypi",
"version": "==2.2.8"
},
"dparse": {
"hashes": [
"sha256:00a5fdfa900629e5159bf3600d44905b333f4059a3366f28e0dbd13eeab17b19",
"sha256:cef95156fa0adedaf042cd42f9990974bec76f25dfeca4dc01f381a243d5aa5b"
],
"version": "==0.4.1"
},
"factory-boy": {
"hashes": [
"sha256:728df59b372c9588b83153facf26d3d28947fc750e8e3c95cefa9bed0e6394ee",
"sha256:faf48d608a1735f0d0a3c9cbf536d64f9132b547dae7ba452c4d99a79e84a370"
],
"markers": "python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"index": "pypi",
"version": "==2.12.0"
},
"faker": {
......@@ -426,9 +454,15 @@
"sha256:440d68fe0e46c1658b1975b2497abe0c24a7f772e3892253f31e713ffcc48965",
"sha256:ee24608768549c2c69e593e9d7a3b53c9498ae735534243ec8390cae5d529f8b"
],
"markers": "python_version >= '2.7' and python_version != '3.2.*' and python_version != '3.1.*' and python_version != '3.0.*'",
"version": "==4.0.1"
},
"idna": {
"hashes": [
"sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
"sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
],
"version": "==2.9"
},
"importlib-metadata": {
"hashes": [
"sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302",
......@@ -465,23 +499,20 @@
"sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c",
"sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
],
"markers": "python_version >= '3.5'",
"version": "==8.2.0"
},
"packaging": {
"hashes": [
"sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73",
"sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334"
"sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
"sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
],
"markers": "python_version != '3.0.*' and python_version >= '2.7' and python_version != '3.2.*' and python_version != '3.1.*'",
"version": "==20.1"
"version": "==20.3"
},
"pluggy": {
"hashes": [
"sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
"sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
],
"markers": "python_version >= '3.5'",
"version": "==0.13.1"
},
"py": {
......@@ -497,7 +528,6 @@
"sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56",
"sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
],
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==2.5.0"
},
"pydocstyle": {
......@@ -513,7 +543,6 @@
"sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
"sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
],
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==2.1.1"
},
"pylava": {
......@@ -537,7 +566,6 @@
"sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d",
"sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6"
],
"markers": "python_version >= '3.6'",
"version": "==5.3.5"
},
"pytest-cov": {
......@@ -586,12 +614,42 @@
"index": "pypi",
"version": "==2019.3"
},
"pyyaml": {
"hashes": [
"sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6",
"sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf",
"sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5",
"sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e",
"sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811",
"sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e",
"sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d",
"sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20",
"sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689",
"sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994",
"sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615"
],
"version": "==5.3"
},
"requests": {
"hashes": [
"sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
"sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
],
"version": "==2.23.0"
},
"safety": {
"hashes": [
"sha256:0a3a8a178a9c96242b224f033ee8d1d130c0448b0e6622d12deaf37f6c3b4e59",
"sha256:5059f3ffab3648330548ea9c7403405bbfaf085b11235770825d14c58f24cb78"
],
"index": "pypi",
"version": "==1.8.5"
},
"six": {
"hashes": [
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
],
"markers": "python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==1.14.0"
},
"snowballstemmer": {
......@@ -603,11 +661,10 @@
},
"sqlparse": {
"hashes": [
"sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177",
"sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"
"sha256:022fb9c87b524d1f7862b3037e541f68597a730a8843245c349fc93e1643dc4e",
"sha256:e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548"
],
"markers": "python_version != '3.2.*' and python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.1.*' and python_version >= '2.7'",
"version": "==0.3.0"
"version": "==0.3.1"
},
"text-unidecode": {
"hashes": [
......@@ -616,6 +673,13 @@
],
"version": "==1.3"
},
"urllib3": {
"hashes": [
"sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc",
"sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"
],
"version": "==1.25.8"
},
"wcwidth": {
"hashes": [
"sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603",
......@@ -633,11 +697,10 @@
},
"zipp": {
"hashes": [
"sha256:12248a63bbdf7548f89cb4c7cda4681e537031eda29c02ea29674bc6854460c2",
"sha256:7c0f8e91abc0dc07a5068f315c52cb30c66bfbc581e5b50704c8a2f6ebae794a"
"sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
"sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
],
"markers": "python_version >= '3.6'",
"version": "==3.0.0"
"version": "==3.1.0"
}
}
}
# Generated by Django 2.2.11 on 2020-03-09 12:32
import collections
from django.db import migrations
import jsonfield.fields
class Migration(migrations.Migration):
dependencies = [
('chn_spreadsheet', '0014_auto_20191216_1054'),
]
operations = [
migrations.AlterField(
model_name='sheetprofile',
name='profile',
field=jsonfield.fields.JSONField(load_kwargs={'object_pairs_hook': collections.OrderedDict}),
),
]
# Generated by Django 2.2.11 on 2020-03-09 12:44
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('chn_spreadsheet', '0015_auto_20200309_1832'),
('chn_spreadsheet', '0015_delete_etc_and_kobo_master_importers'),
]
operations = [
]
import datetime
from os import path
from django.core.management import call_command
import pytest
import transport
TEST_BASE_DIR = path.abspath(path.dirname(__file__))
TEST_DIR = path.join(TEST_BASE_DIR, 'test_files')
@pytest.fixture
def django_db_setup(django_db_setup, django_db_blocker):
with django_db_blocker.unblock():
call_command('loaddata', 'spreadsheet-profiles.json')
@pytest.mark.django_db # noqa
def test_etc_items_imported(importer, django_db_setup):
assert len(transport.items.list_items()['results']) == 0
file_path = path.join(TEST_DIR, 'sample_etc.xlsx')
(num_saved, _) = importer.store_spreadsheet('etc', open(file_path, 'rb'))
assert num_saved > 0
items = transport.items.list_items()['results']
assert len(items) == num_saved
assert items[0]['location'] == 'Camp 1E'
assert isinstance(items[0]['timestamp'], datetime.datetime)
tags = []
for term in items[0]['terms']:
if term['taxonomy'] == 'tags':
tags.append(term['name'])
assert len(tags) > 0
assert all(tag in tags for tag in (
'Male',
))
import datetime
from os import path
from django.core.management import call_command
import pytest
import transport
from chn_spreadsheet.tests.conftest import taxonomies # noqa
TEST_BASE_DIR = path.abspath(path.dirname(__file__))
TEST_DIR = path.join(TEST_BASE_DIR, 'test_files')
@pytest.fixture
def django_db_setup(django_db_setup, django_db_blocker):
with django_db_blocker.unblock():
call_command('loaddata', 'spreadsheet-profiles.json')
@pytest.mark.django_db # noqa
def test_kobo_master_items_imported(importer, django_db_setup, taxonomies): # noqa
assert len(transport.items.list_items()['results']) == 0
file_path = path.join(TEST_DIR, 'sample_kobo_master.xlsx')
(num_saved, _) = importer.store_spreadsheet('kobo_master', open(file_path, 'rb'))
assert num_saved > 0
# Default ordering is timestamp desc
items = transport.items.list_items()['results']
assert len(items) == num_saved
assert items[1]['body'] == 'sample feedback'
assert items[1]['translation'] == 'sample translation'
assert items[1]['gender'] == 'male'
assert items[1]['age'] == '41'
assert items[1]['location'] == 'Camp 1W'
assert items[1]['enumerator'] == 'osman'
assert items[1]['collection_type'] == 'sample collection type'
assert isinstance(items[1]['timestamp'], datetime.datetime)
tags = []
for item in items:
for term in item['terms']:
if term['taxonomy'] == 'tags':
assert term['name'] != 'None'
tags.append(term['name'])
assert len(tags) > 0
assert all(tag in tags for tag in (
'sample tag',
))
@pytest.mark.django_db # noqa
def test_items_cannot_be_imported_twice(importer, django_db_setup, taxonomies): # noqa
file_path = path.join(TEST_DIR, 'master_kobo_single_item.xlsx')
(num_saved, num_skipped) = importer.store_spreadsheet('kobo_master', open(file_path, 'rb'))
assert num_saved == 1
assert num_skipped == 0
(num_saved, num_skipped) = importer.store_spreadsheet('kobo_master', open(file_path, 'rb'))
assert num_saved == 0
assert num_skipped == 1
# Generated by Django 2.2.11 on 2020-03-09 12:32
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dashboard', '0003_widgetinstance_height'),
]
operations = [
migrations.AlterField(
model_name='widgetinstance',
name='column',
field=models.PositiveIntegerField(default=0, validators=[django.core.validators.MaxValueValidator(11, 'column must be between 0 and 11')]),
),
migrations.AlterField(
model_name='widgetinstance',
name='width',
field=models.PositiveIntegerField(default=12, validators=[django.core.validators.MinValueValidator(1, 'width must be between 1 and 12'), django.core.validators.MaxValueValidator(12, 'width must be between 1 and 12')]),
),
]
# Generated by Django 2.2.11 on 2020-03-09 12:32
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('data_layer', '0022_remove_message_source'),
]
operations = [
migrations.AlterModelOptions(
name='customconstance',
options={'managed': False, 'verbose_name': 'constance', 'verbose_name_plural': 'constances'},
),
]
class CategoryFilter(object):
def apply(self, filters, query_dict, **kwargs):
category = query_dict.get('category', None)
categories = kwargs.get('categories', None)
......@@ -10,15 +11,19 @@ class CategoryFilter(object):
class TagsFilter(object):
def apply(self, filters, query_dict, **kwargs):
tags = query_dict.get('tags', None)
if tags is not None:
filters.setdefault('terms', []).append(
'tags:{0}'.format(tags)
)
tag_list = tags.split(',')
filters.setdefault('terms', [])
for a_tag in tag_list:
a_tag = a_tag.strip()
filters['terms'].append(f'tags:{a_tag}')
class TimeRangeFilter(object):
def apply(self, filters, query_dict, **kwargs):
start_time = query_dict.get('start_time', None)
end_time = query_dict.get('end_time', None)
......@@ -31,6 +36,7 @@ class TimeRangeFilter(object):
class LocationFilter(object):
def apply(self, filters, query_dict, **kwargs):
location = query_dict.get('location', None)
if location is not None:
......@@ -38,6 +44,7 @@ class LocationFilter(object):
class SubLocationFilter(object):
def apply(self, filters, query_dict, **kwargs):
sub_location = query_dict.get('sub-location', None)
if sub_location is not None:
......@@ -45,6 +52,7 @@ class SubLocationFilter(object):
class GenderFilter(object):
def apply(self, filters, query_dict, **kwargs):
gender = query_dict.get('gender', None)
if gender is not None:
......@@ -52,6 +60,7 @@ class GenderFilter(object):
class AgeRangeFilter(object):
def apply(self, filters, query_dict, **kwargs):
age_range_terms = []
......@@ -62,6 +71,7 @@ class AgeRangeFilter(object):
class EnumeratorFilter(object):
def apply(self, filters, query_dict, **kwargs):
enumerator = query_dict.get('enumerator', None)
if enumerator is not None:
......@@ -69,6 +79,7 @@ class EnumeratorFilter(object):
class CollectionTypeFilter(object):
def apply(self, filters, query_dict, **kwargs):
collection_type = query_dict.get('collection_type', None)
if collection_type is not None:
......@@ -76,6 +87,7 @@ class CollectionTypeFilter(object):
class FeedbackTypeFilter(object):
def apply(self, filters, query_dict, **kwargs):
feedback_type = query_dict.get('feedback_type', None)
......@@ -86,6 +98,7 @@ class FeedbackTypeFilter(object):
class ExternalIdFilter(object):
def apply(self, filters, query_dict, **kwargs):
pattern = query_dict.get('external_id_pattern', None)
......@@ -94,6 +107,7 @@ class ExternalIdFilter(object):
class SearchFilter(object):
def apply(self, filters, query_dict, **kwargs):
search = query_dict.get('search', None)
......
[
{
"fields": {
"label": "kobo",
"profile": "{\"name\":\"Kobo\",\"format\":\"excel\",\"label\":\"kobo\",\"skip_header\":2,\"taxonomies\":{},\"columns\":[{\"field\":\"timestamp\",\"type\":\"date\",\"name\":\"start\",\"date_format\":\"%Y-%m-%dT%H: %M: %S.%f%z\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"end\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"username\"},{\"field\":\"body\",\"type\":\"text\",\"name\":\"What is the feedback or rumour?\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"date\"},{\"field\":\"gender\",\"type\":\"text\",\"name\":\"gender\"},{\"field\":\"terms\",\"type\":\"taxonomy\",\"name\":\"Age\",\"taxonomy\":\"age-ranges\"},{\"field\":\"location\",\"type\":\"text\",\"name\":\"Location\"},{\"field\":\"sub_location\",\"type\":\"text\",\"name\":\"Sub-Location\"},{\"field\":\"enumerator\",\"type\":\"text\",\"name\":\"comment\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"_id\"},{\"field\":\"external_id\",\"type\":\"text\",\"name\":\"_uuid\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"_submission_time\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"_validation_status\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"_index\"},{\"field\":\"terms\",\"type\":\"taxonomy\",\"name\":\"tags\",\"taxonomy\":\"tags\"}]}"
},
"model": "chn_spreadsheet.sheetprofile",
"pk": 3
},
{
"fields": {
"label": "etc",
"profile": "{\"name\":\"ETC\",\"format\":\"excel\",\"label\":\"etc\",\"skip_header\":1,\"taxonomies\":{},\"columns\":[{\"field\":\"taxonomy\",\"type\":\"text\",\"name\":\"Category\"},{\"field\":\"body\",\"type\":\"text\",\"name\":\"Issue\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"Logged by\"},{\"field\":\"timestamp\",\"type\":\"date\",\"name\":\"Date\",\"date_format\":\"%Y-%m-%d\"},{\"field\":\"terms\",\"type\":\"taxonomy\",\"name\":\"Gender\",\"taxonomy\":\"tags\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"Age\"},{\"field\":\"location\",\"type\":\"text\",\"name\":\"Location\"},{\"field\":\"sub_location\",\"type\":\"text\",\"name\":\"Sub-Location\"}]}"
},
"model": "chn_spreadsheet.sheetprofile",
"pk": 4
},
{
"model": "chn_spreadsheet.sheetprofile",
"pk": 5,
"fields": {
"label": "kobo_master",
"profile": "{\"name\":\"(Redundant)\",\"format\":\"excel\",\"label\":\"kobo_master\",\"skip_header\":1,\"taxonomies\":{},\"columns\":[{\"field\":\"timestamp\",\"type\":\"date\",\"name\":\"Date\",\"date_format\":\"%Y-%m-%dT%H: %M: %S.%f%z\"},{\"field\":\"body\",\"type\":\"text\",\"name\":\"Feedback\"},{\"field\":\"translation\",\"type\":\"text\",\"name\":\"Translation\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"Theme\"},{\"field\":\"terms\",\"type\":\"taxonomy\",\"name\":\"Tags\",\"taxonomy\":\"tags\"},{\"field\":\"ignore\",\"type\":\"ignore\",\"name\":\"FB Category\"},{\"field\":\"gender\",\"type\":\"text\",\"name\":\"Gender\"},{\"field\":\"age\",\"type\":\"text\",\"name\":\"Age\"},{\"field\":\"location\",\"type\":\"text\",\"name\":\"Location\"},{\"field\":\"sub_location\",\"type\":\"text\",\"name\":\"Sub-Location\"},{\"field\":\"enumerator\",\"type\":\"text\",\"name\":\"Ennumerator\"},{\"field\":\"collection_type\",\"type\":\"text\",\"name\":\"Collection Type\"}]}"
}
{
"model": "chn_spreadsheet.sheetprofile",
"pk": 3,
"fields": {
"label": "kobo",
"profile": "{\"name\": \"Kobo\", \"format\": \"excel\", \"label\": \"kobo\", \"skip_header\": 2, \"taxonomies\": {}, \"columns\": [{\"field\": \"timestamp\", \"type\": \"date\", \"name\": \"start\", \"date_format\": \"%Y-%m-%dT%H: %M: %S.%f%z\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"end\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"username\"}, {\"field\": \"body\", \"type\": \"text\", \"name\": \"What is the feedback or rumour?\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"date\"}, {\"field\": \"gender\", \"type\": \"text\", \"name\": \"gender\"}, {\"field\": \"terms\", \"type\": \"taxonomy\", \"name\": \"Age\", \"taxonomy\": \"age-ranges\"}, {\"field\": \"location\", \"type\": \"text\", \"name\": \"Location\"}, {\"field\": \"sub_location\", \"type\": \"text\", \"name\": \"Sub-Location\"}, {\"field\": \"enumerator\", \"type\": \"text\", \"name\": \"comment\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"_id\"}, {\"field\": \"external_id\", \"type\": \"text\", \"name\": \"_uuid\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"_submission_time\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"_validation_status\"}, {\"field\": \"ignore\", \"type\": \"ignore\", \"name\": \"_index\"}, {\"field\": \"terms\", \"type\": \"taxonomy\", \"name\": \"tags\", \"taxonomy\": \"tags\"}]}"
}
}
]
......@@ -253,9 +253,9 @@
"model": "taxonomies.term",
"pk": 422,
"fields": {
"name": "Age 15-18 yrs",
"name": "15-18",
"taxonomy": 8,
"long_name": "Age 15-18 yrs"
"long_name": "15-18"
}
},
{
......@@ -300,7 +300,7 @@
"fields": {
"name": "60+",
"taxonomy": 8,
"long_name": "Over 60 years old"
"long_name": "60+"
}
}
]
from django.http import QueryDict
from ..filters import AgeRangeFilter
from ..filters import AgeRangeFilter, TagsFilter
def test_age_range_adds_taxonomy_terms():
......@@ -14,3 +14,17 @@ def test_age_range_adds_taxonomy_terms():
assert 'age-ranges:Under 10 yrs' in filters['terms_or']
assert 'age-ranges:Age 11-14 yrs' in filters['terms_or']
def test_tags_adds_taxonomy_terms():
filter = TagsFilter()
filters = {}
query_dict = QueryDict('tags=abc,def')
filter.apply(filters, query_dict)
print(filters)
assert 'tags:abc' in filters['terms']
assert 'tags:def' in filters['terms']
# Generated by Django 2.2.11 on 2020-03-09 12:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('taxonomies', '0004_taxonomy_vocabulary'),
]
operations = [
migrations.AlterField(
model_name='taxonomy',
name='multiplicity',
field=models.CharField(choices=[('optional', 'Zero or One'), ('multiple', 'Zero or More')], default='optional', max_length=30),
),
migrations.AlterField(
model_name='taxonomy',
name='vocabulary',
field=models.CharField(choices=[('fixed', 'Not modifiable by any user, system only'), ('closed', 'Only admin users who have permission to define and edit taxonomies'), ('open', 'Any user who has permission to use taxonomies')], default='closed', max_length=30),
),
]
# Generated by Django 2.2.11 on 2020-03-09 12:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0003_auto_20190320_1438'),
]
operations = [
migrations.AlterField(
model_name='user',
name='business_email',
field=models.EmailField(max_length=190, unique=True, verbose_name='Email'),
),
migrations.AlterField(
model_name='user',
name='business_tel',
field=models.CharField(blank=True, max_length=20, verbose_name='Business telephone'),
),
migrations.AlterField(
model_name='user',
name='contact_type',
field=models.CharField(max_length=32, verbose_name='Type of Contact'),
),
migrations.AlterField(
model_name='user',
name='country',
field=models.CharField(blank=True, choices=[('Member countries', (('BW', 'Botswana'), ('BI', 'Burundi'), ('CD', 'Congo - Kinshasa'), ('ET', 'Ethiopia'), ('KE', 'Kenya'), ('LS', 'Lesotho'), ('MW', 'Malawi'), ('MZ', 'Mozambique'), ('NA', 'Namibia'), ('RW', 'Rwanda'), ('ZA', 'South Africa'), ('SD', 'Sudan'), ('SS', 'South Sudan'), ('SZ', 'Swaziland'), ('TZ', 'Tanzania'), ('UG', 'Uganda'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe'))), ('Rest of the world', (('AF', 'Afghanistan'), ('AL', 'Albania'), ('DZ', 'Algeria'), ('AS', 'American Samoa'), ('AD', 'Andorra'), ('AO', 'Angola'), ('AI', 'Anguilla'), ('AQ', 'Antarctica'), ('AG', 'Antigua and Barbuda'), ('AR', 'Argentina'), ('AM', 'Armenia'), ('AW', 'Aruba'), ('AU', 'Australia'), ('AT', 'Austria'), ('AZ', 'Azerbaijan'), ('BS', 'Bahamas'), ('BH', 'Bahrain'), ('BD', 'Bangladesh'), ('BB', 'Barbados'), ('BY', 'Belarus'), ('BE', 'Belgium'), ('BZ', 'Belize'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BT', 'Bhutan'), ('BO', 'Bolivia'), ('BA', 'Bosnia and Herzegovina'), ('BV', 'Bouvet Island'), ('BR', 'Brazil'), ('BQ', 'British Antarctic Territory'), ('IO', 'British Indian Ocean Territory'), ('VG', 'British Virgin Islands'), ('BN', 'Brunei'), ('BG', 'Bulgaria'), ('BF', 'Burkina Faso'), ('KH', 'Cambodia'), ('CM', 'Cameroon'), ('CA', 'Canada'), ('CT', 'Canton and Enderbury Islands'), ('CV', 'Cape Verde'), ('KY', 'Cayman Islands'), ('CF', 'Central African Republic'), ('TD', 'Chad'), ('CL', 'Chile'), ('CN', 'China'), ('CX', 'Christmas Island'), ('CC', 'Cocos [Keeling] Islands'), ('CO', 'Colombia'), ('KM', 'Comoros'), ('CG', 'Congo - Brazzaville'), ('CK', 'Cook Islands'), ('CR', 'Costa Rica'), ('HR', 'Croatia'), ('CU', 'Cuba'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('CI', "Côte d'Ivoire"), ('DK', 'Denmark'), ('DJ', 'Djibouti'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('NQ', 'Dronning Maud Land'), ('DD', 'East Germany'), ('EC', 'Ecuador'), ('EG', 'Egypt'), ('SV', 'El Salvador'), ('GQ', 'Equatorial Guinea'), ('ER', 'Eritrea'), ('EE', 'Estonia'), ('FK', 'Falkland Islands'), ('FO', 'Faroe Islands'), ('FJ', 'Fiji'), ('FI', 'Finland'), ('FR', 'France'), ('GF', 'French Guiana'), ('PF', 'French Polynesia'), ('TF', 'French Southern Territories'), ('FQ', 'French Southern and Antarctic Territories'), ('GA', 'Gabon'), ('GM', 'Gambia'), ('GE', 'Georgia'), ('DE', 'Germany'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GR', 'Greece'), ('GL', 'Greenland'), ('GD', 'Grenada'), ('GP', 'Guadeloupe'), ('GU', 'Guam'), ('GT', 'Guatemala'), ('GG', 'Guernsey'), ('GN', 'Guinea'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HT', 'Haiti'), ('HM', 'Heard Island and McDonald Islands'), ('HN', 'Honduras'), ('HK', 'Hong Kong SAR China'), ('HU', 'Hungary'), ('IS', 'Iceland'), ('IN', 'India'), ('ID', 'Indonesia'), ('IR', 'Iran'), ('IQ', 'Iraq'), ('IE', 'Ireland'), ('IM', 'Isle of Man'), ('IL', 'Israel'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JP', 'Japan'), ('JE', 'Jersey'), ('JT', 'Johnston Island'), ('JO', 'Jordan'), ('KZ', 'Kazakhstan'), ('KI', 'Kiribati'), ('KW', 'Kuwait'), ('KG', 'Kyrgyzstan'), ('LA', 'Laos'), ('LV', 'Latvia'), ('LB', 'Lebanon'), ('LR', 'Liberia'), ('LY', 'Libya'), ('LI', 'Liechtenstein'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('MO', 'Macau SAR China'), ('MK', 'Macedonia'), ('MG', 'Madagascar'), ('MY', 'Malaysia'), ('MV', 'Maldives'), ('ML', 'Mali'), ('MT', 'Malta'), ('MH', 'Marshall Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MU', 'Mauritius'), ('YT', 'Mayotte'), ('FX', 'Metropolitan France'), ('MX', 'Mexico'), ('FM', 'Micronesia'), ('MI', 'Midway Islands'), ('MD', 'Moldova'), ('MC', 'Monaco'), ('MN', 'Mongolia'), ('ME', 'Montenegro'), ('MS', 'Montserrat'), ('MA', 'Morocco'), ('MM', 'Myanmar [Burma]'), ('NR', 'Nauru'), ('NP', 'Nepal'), ('NL', 'Netherlands'), ('AN', 'Netherlands Antilles'), ('NT', 'Neutral Zone'), ('NC', 'New Caledonia'), ('NZ', 'New Zealand'), ('NI', 'Nicaragua'), ('NE', 'Niger'), ('NG', 'Nigeria'), ('NU', 'Niue'), ('NF', 'Norfolk Island'), ('KP', 'North Korea'), ('VD', 'North Vietnam'), ('MP', 'Northern Mariana Islands'), ('NO', 'Norway'), ('OM', 'Oman'), ('PC', 'Pacific Islands Trust Territory'), ('PK', 'Pakistan'), ('PW', 'Palau'), ('PS', 'Palestinian Territories'), ('PA', 'Panama'), ('PZ', 'Panama Canal Zone'), ('PG', 'Papua New Guinea'), ('PY', 'Paraguay'), ('YD', "People's Democratic Republic of Yemen"), ('PE', 'Peru'), ('PH', 'Philippines'), ('PN', 'Pitcairn Islands'), ('PL', 'Poland'), ('PT', 'Portugal'), ('PR', 'Puerto Rico'), ('QA', 'Qatar'), ('RO', 'Romania'), ('RU', 'Russia'), ('RE', 'Réunion'), ('BL', 'Saint Barthélemy'), ('SH', 'Saint Helena'), ('KN', 'Saint Kitts and Nevis'), ('LC', 'Saint Lucia'), ('MF', 'Saint Martin'), ('PM', 'Saint Pierre and Miquelon'), ('VC', 'Saint Vincent and the Grenadines'), ('WS', 'Samoa'), ('SM', 'San Marino'), ('SA', 'Saudi Arabia'), ('SN', 'Senegal'), ('RS', 'Serbia'), ('CS', 'Serbia and Montenegro'), ('SC', 'Seychelles'), ('SL', 'Sierra Leone'), ('SG', 'Singapore'), ('SK', 'Slovakia'), ('SI', 'Slovenia'), ('SB', 'Solomon Islands'), ('SO', 'Somalia'), ('GS', 'South Georgia and the South Sandwich Islands'), ('KR', 'South Korea'), ('ES', 'Spain'), ('LK', 'Sri Lanka'), ('SR', 'Suriname'), ('SJ', 'Svalbard and Jan Mayen'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('SY', 'Syria'), ('ST', 'São Tomé and Príncipe'), ('TW', 'Taiwan'), ('TJ', 'Tajikistan'), ('TH', 'Thailand'), ('TL', 'Timor-Leste'), ('TG', 'Togo'), ('TK', 'Tokelau'), ('TO', 'Tonga'), ('TT', 'Trinidad and Tobago'), ('TN', 'Tunisia'), ('TR', 'Turkey'), ('TM', 'Turkmenistan'), ('TC', 'Turks and Caicos Islands'), ('TV', 'Tuvalu'), ('UM', 'U.S. Minor Outlying Islands'), ('PU', 'U.S. Miscellaneous Pacific Islands'), ('VI', 'U.S. Virgin Islands'), ('UA', 'Ukraine'), ('SU', 'Union of Soviet Socialist Republics'), ('AE', 'United Arab Emirates'), ('GB', 'United Kingdom'), ('US', 'United States'), ('ZZ', 'Unknown or Invalid Region'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VU', 'Vanuatu'), ('VA', 'Vatican City'), ('VE', 'Venezuela'), ('VN', 'Vietnam'), ('WK', 'Wake Island'), ('WF', 'Wallis and Futuna'), ('EH', 'Western Sahara'), ('YE', 'Yemen'), ('AX', 'Åland Islands')))], help_text='The country in which the contact is currently working in', max_length=64),
),
migrations.AlterField(
model_name='user',
name='fax',
field=models.CharField(blank=True, max_length=20, verbose_name='Fax no'),
),
migrations.AlterField(
model_name='user',
name='gender',
field=models.CharField(choices=[('female', 'Female'), ('male', 'Male'), ('other', 'Other')], max_length=6),
),
migrations.AlterField(
model_name='user',
name='home_tel',
field=models.CharField(blank=True, max_length=20, verbose_name='Home telephone'),
),
migrations.AlterField(
model_name='user',
name='msn_id',
field=models.CharField(blank=True, max_length=32, verbose_name='MSN ID'),
),
migrations.AlterField(
model_name='user',
name='nationality',
field=models.CharField(blank=True, choices=[('Member countries', [('Botswana', 'Botswana'), ('Burundi', 'Burundi'), ('Congo - Kinshasa', 'Congo - Kinshasa'), ('Ethiopia', 'Ethiopia'), ('Kenya', 'Kenya'), ('Lesotho', 'Lesotho'), ('Malawi', 'Malawi'), ('Mozambique', 'Mozambique'), ('Namibia', 'Namibia'), ('Rwanda', 'Rwanda'), ('South Africa', 'South Africa'), ('Sudan', 'Sudan'), ('South Sudan', 'South Sudan'), ('Swaziland', 'Swaziland'), ('Tanzania', 'Tanzania'), ('Uganda', 'Uganda'), ('Zambia', 'Zambia'), ('Zimbabwe', 'Zimbabwe')]), ('Rest of the world', [('Afghanistan', 'Afghanistan'), ('Albania', 'Albania'), ('Algeria', 'Algeria'), ('American Samoa', 'American Samoa'), ('Andorra', 'Andorra'), ('Angola', 'Angola'), ('Anguilla', 'Anguilla'), ('Antarctica', 'Antarctica'), ('Antigua and Barbuda', 'Antigua and Barbuda'), ('Argentina', 'Argentina'), ('Armenia', 'Armenia'), ('Aruba', 'Aruba'), ('Australia', 'Australia'), ('Austria', 'Austria'), ('Azerbaijan', 'Azerbaijan'), ('Bahamas', 'Bahamas'), ('Bahrain', 'Bahrain'), ('Bangladesh', 'Bangladesh'), ('Barbados', 'Barbados'), ('Belarus', 'Belarus'), ('Belgium', 'Belgium'), ('Belize', 'Belize'), ('Benin', 'Benin'), ('Bermuda', 'Bermuda'), ('Bhutan', 'Bhutan'), ('Bolivia', 'Bolivia'), ('Bosnia and Herzegovina', 'Bosnia and Herzegovina'), ('Bouvet Island', 'Bouvet Island'), ('Brazil', 'Brazil'), ('British Antarctic Territory', 'British Antarctic Territory'), ('British Indian Ocean Territory', 'British Indian Ocean Territory'), ('British Virgin Islands', 'British Virgin Islands'), ('Brunei', 'Brunei'), ('Bulgaria', 'Bulgaria'), ('Burkina Faso', 'Burkina Faso'), ('Cambodia', 'Cambodia'), ('Cameroon', 'Cameroon'), ('Canada', 'Canada'), ('Canton and Enderbury Islands', 'Canton and Enderbury Islands'), ('Cape Verde', 'Cape Verde'), ('Cayman Islands', 'Cayman Islands'), ('Central African Republic', 'Central African Republic'), ('Chad', 'Chad'), ('Chile', 'Chile'), ('China', 'China'), ('Christmas Island', 'Christmas Island'), ('Cocos [Keeling] Islands', 'Cocos [Keeling] Islands'), ('Colombia', 'Colombia'), ('Comoros', 'Comoros'), ('Congo - Brazzaville', 'Congo - Brazzaville'), ('Cook Islands', 'Cook Islands'), ('Costa Rica', 'Costa Rica'), ('Croatia', 'Croatia'), ('Cuba', 'Cuba'), ('Cyprus', 'Cyprus'), ('Czech Republic', 'Czech Republic'), ("Côte d'Ivoire", "Côte d'Ivoire"), ('Denmark', 'Denmark'), ('Djibouti', 'Djibouti'), ('Dominica', 'Dominica'), ('Dominican Republic', 'Dominican Republic'), ('Dronning Maud Land', 'Dronning Maud Land'), ('East Germany', 'East Germany'), ('Ecuador', 'Ecuador'), ('Egypt', 'Egypt'), ('El Salvador', 'El Salvador'), ('Equatorial Guinea', 'Equatorial Guinea'), ('Eritrea', 'Eritrea'), ('Estonia', 'Estonia'), ('Falkland Islands', 'Falkland Islands'), ('Faroe Islands', 'Faroe Islands'), ('Fiji', 'Fiji'), ('Finland', 'Finland'), ('France', 'France'), ('French Guiana', 'French Guiana'), ('French Polynesia', 'French Polynesia'), ('French Southern Territories', 'French Southern Territories'), ('French Southern and Antarctic Territories', 'French Southern and Antarctic Territories'), ('Gabon', 'Gabon'), ('Gambia', 'Gambia'), ('Georgia', 'Georgia'), ('Germany', 'Germany'), ('Ghana', 'Ghana'), ('Gibraltar', 'Gibraltar'), ('Greece', 'Greece'), ('Greenland', 'Greenland'), ('Grenada', 'Grenada'), ('Guadeloupe', 'Guadeloupe'), ('Guam', 'Guam'), ('Guatemala', 'Guatemala'), ('Guernsey', 'Guernsey'), ('Guinea', 'Guinea'), ('Guinea-Bissau', 'Guinea-Bissau'), ('Guyana', 'Guyana'), ('Haiti', 'Haiti'), ('Heard Island and McDonald Islands', 'Heard Island and McDonald Islands'), ('Honduras', 'Honduras'), ('Hong Kong SAR China', 'Hong Kong SAR China'), ('Hungary', 'Hungary'), ('Iceland', 'Iceland'), ('India', 'India'), ('Indonesia', 'Indonesia'), ('Iran', 'Iran'), ('Iraq', 'Iraq'), ('Ireland', 'Ireland'), ('Isle of Man', 'Isle of Man'), ('Israel', 'Israel'), ('Italy', 'Italy'), ('Jamaica', 'Jamaica'), ('Japan', 'Japan'), ('Jersey', 'Jersey'), ('Johnston Island', 'Johnston Island'), ('Jordan', 'Jordan'), ('Kazakhstan', 'Kazakhstan'), ('Kiribati', 'Kiribati'), ('Kuwait', 'Kuwait'), ('Kyrgyzstan', 'Kyrgyzstan'), ('Laos', 'Laos'), ('Latvia', 'Latvia'), ('Lebanon', 'Lebanon'), ('Liberia', 'Liberia'), ('Libya', 'Libya'), ('Liechtenstein', 'Liechtenstein'), ('Lithuania', 'Lithuania'), ('Luxembourg', 'Luxembourg'), ('Macau SAR China', 'Macau SAR China'), ('Macedonia', 'Macedonia'), ('Madagascar', 'Madagascar'), ('Malaysia', 'Malaysia'), ('Maldives', 'Maldives'), ('Mali', 'Mali'), ('Malta', 'Malta'), ('Marshall Islands', 'Marshall Islands'), ('Martinique', 'Martinique'), ('Mauritania', 'Mauritania'), ('Mauritius', 'Mauritius'), ('Mayotte', 'Mayotte'), ('Metropolitan France', 'Metropolitan France'), ('Mexico', 'Mexico'), ('Micronesia', 'Micronesia'), ('Midway Islands', 'Midway Islands'), ('Moldova', 'Moldova'), ('Monaco', 'Monaco'), ('Mongolia', 'Mongolia'), ('Montenegro', 'Montenegro'), ('Montserrat', 'Montserrat'), ('Morocco', 'Morocco'), ('Myanmar [Burma]', 'Myanmar [Burma]'), ('Nauru', 'Nauru'), ('Nepal', 'Nepal'), ('Netherlands', 'Netherlands'), ('Netherlands Antilles', 'Netherlands Antilles'), ('Neutral Zone', 'Neutral Zone'), ('New Caledonia', 'New Caledonia'), ('New Zealand', 'New Zealand'), ('Nicaragua', 'Nicaragua'), ('Niger', 'Niger'), ('Nigeria', 'Nigeria'), ('Niue', 'Niue'), ('Norfolk Island', 'Norfolk Island'), ('North Korea', 'North Korea'), ('North Vietnam', 'North Vietnam'), ('Northern Mariana Islands', 'Northern Mariana Islands'), ('Norway', 'Norway'), ('Oman', 'Oman'), ('Pacific Islands Trust Territory', 'Pacific Islands Trust Territory'), ('Pakistan', 'Pakistan'), ('Palau', 'Palau'), ('Palestinian Territories', 'Palestinian Territories'), ('Panama', 'Panama'), ('Panama Canal Zone', 'Panama Canal Zone'), ('Papua New Guinea', 'Papua New Guinea'), ('Paraguay', 'Paraguay'), ("People's Democratic Republic of Yemen", "People's Democratic Republic of Yemen"), ('Peru', 'Peru'), ('Philippines', 'Philippines'), ('Pitcairn Islands', 'Pitcairn Islands'), ('Poland', 'Poland'), ('Portugal', 'Portugal'), ('Puerto Rico', 'Puerto Rico'), ('Qatar', 'Qatar'), ('Romania', 'Romania'), ('Russia', 'Russia'), ('Réunion', 'Réunion'), ('Saint Barthélemy', 'Saint Barthélemy'), ('Saint Helena', 'Saint Helena'), ('Saint Kitts and Nevis', 'Saint Kitts and Nevis'), ('Saint Lucia', 'Saint Lucia'), ('Saint Martin', 'Saint Martin'), ('Saint Pierre and Miquelon', 'Saint Pierre and Miquelon'), ('Saint Vincent and the Grenadines', 'Saint Vincent and the Grenadines'), ('Samoa', 'Samoa'), ('San Marino', 'San Marino'), ('Saudi Arabia', 'Saudi Arabia'), ('Senegal', 'Senegal'), ('Serbia', 'Serbia'), ('Serbia and Montenegro', 'Serbia and Montenegro'), ('Seychelles', 'Seychelles'), ('Sierra Leone', 'Sierra Leone'), ('Singapore', 'Singapore'), ('Slovakia', 'Slovakia'), ('Slovenia', 'Slovenia'), ('Solomon Islands', 'Solomon Islands'), ('Somalia', 'Somalia'), ('South Georgia and the South Sandwich Islands', 'South Georgia and the South Sandwich Islands'), ('South Korea', 'South Korea'), ('Spain', 'Spain'), ('Sri Lanka', 'Sri Lanka'), ('Suriname', 'Suriname'), ('Svalbard and Jan Mayen', 'Svalbard and Jan Mayen'), ('Sweden', 'Sweden'), ('Switzerland', 'Switzerland'), ('Syria', 'Syria'), ('São Tomé and Príncipe', 'São Tomé and Príncipe'), ('Taiwan', 'Taiwan'), ('Tajikistan', 'Tajikistan'), ('Thailand', 'Thailand'), ('Timor-Leste', 'Timor-Leste'), ('Togo', 'Togo'), ('Tokelau', 'Tokelau'), ('Tonga', 'Tonga'), ('Trinidad and Tobago', 'Trinidad and Tobago'), ('Tunisia', 'Tunisia'), ('Turkey', 'Turkey'), ('Turkmenistan', 'Turkmenistan'), ('Turks and Caicos Islands', 'Turks and Caicos Islands'), ('Tuvalu', 'Tuvalu'), ('U.S. Minor Outlying Islands', 'U.S. Minor Outlying Islands'), ('U.S. Miscellaneous Pacific Islands', 'U.S. Miscellaneous Pacific Islands'), ('U.S. Virgin Islands', 'U.S. Virgin Islands'), ('Ukraine', 'Ukraine'), ('Union of Soviet Socialist Republics', 'Union of Soviet Socialist Republics'), ('United Arab Emirates', 'United Arab Emirates'), ('United Kingdom', 'United Kingdom'), ('United States', 'United States'), ('Unknown or Invalid Region', 'Unknown or Invalid Region'), ('Uruguay', 'Uruguay'), ('Uzbekistan', 'Uzbekistan'), ('Vanuatu', 'Vanuatu'), ('Vatican City', 'Vatican City'), ('Venezuela', 'Venezuela'), ('Vietnam', 'Vietnam'), ('Wake Island', 'Wake Island'), ('Wallis and Futuna', 'Wallis and Futuna'), ('Western Sahara', 'Western Sahara'), ('Yemen', 'Yemen'), ('Åland Islands', 'Åland Islands')])], max_length=64),
),
migrations.AlterField(
model_name='user',
name='yahoo_messenger',
field=models.CharField(blank=True, max_length=32, verbose_name='Yahoo Messenger'),
),
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment