From 77ea9dda1b087b7dd281a3ff075e693e12a6fd30 Mon Sep 17 00:00:00 2001 From: Dennis Siemensma Date: Tue, 29 Nov 2016 21:07:04 +0100 Subject: [PATCH] Upgrade to Django 1.8 -> 1.9 -> 1.10 #103 --- .travis.yml | 18 +- docs/changelog.rst | 15 +- docs/installation.rst | 2 +- docs/locale/nl/LC_MESSAGES/changelog.mo | Bin 526 -> 570 bytes docs/locale/nl/LC_MESSAGES/changelog.po | 306 ++++++---- docs/locale/nl/LC_MESSAGES/credits.mo | Bin 5384 -> 5165 bytes docs/locale/nl/LC_MESSAGES/installation.mo | Bin 24471 -> 24497 bytes docs/locale/nl/LC_MESSAGES/installation.po | 578 +++++++++--------- docs/locale/nl/LC_MESSAGES/licence.mo | Bin 35207 -> 510 bytes docs/locale/nl/LC_MESSAGES/licence.po | 63 -- dsmr_backend/mixins.py | 2 +- dsmr_consumption/migrations/0001_initial.py | 75 --- ...uashed_0004_recalculate_gas_consumption.py | 3 - .../0002_split_dsmr_reading_fields.py | 18 - .../migrations/0003_realign_gas_read_at.py | 38 -- .../0004_recalculate_gas_consumption.py | 43 -- dsmr_datalogger/migrations/0001_initial.py | 55 -- ...001_squashed_0005_optional_gas_readings.py | 2 - .../migrations/0002_add_meter_statistics.py | 39 -- .../0003_split_dsmr_reading_fields.py | 89 --- .../0004_multiple_dsmr_version_support.py | 23 - .../migrations/0005_optional_gas_readings.py | 24 - dsmr_datalogger/services.py | 4 +- dsmr_frontend/templatetags/model_meta_info.py | 7 - dsmr_frontend/tests/test_webinterface.py | 10 +- dsmr_frontend/urls.py | 7 +- dsmr_frontend/views/export.py | 7 +- dsmr_frontend/views/notification.py | 3 +- dsmr_stats/migrations/0001_initial.py | 37 -- .../migrations/0001_renamed_migrations.py | 31 - .../0001_squashed_0016_drop_stats_settings.py | 2 - .../migrations/0002_consumption_models.py | 58 -- .../0003_consumption_date_fields.py | 34 -- .../0004_energysupplierprice_models.py | 30 - .../0005_energysupplierprice_description.py | 19 - .../0006_energysupplierprice_defaults.py | 29 - .../migrations/0007_daily_user_notes.py | 26 - .../migrations/0008_statssettings_model.py | 24 - .../0009_reverse_dashboard_graphs_setting.py | 19 - .../0010_split_models_among_apps.py | 109 ---- .../migrations/0011_delete_moved_models.py | 29 - dsmr_stats/migrations/0012_meta.py | 32 - .../0013_drop_old_statistics_model.py | 18 - dsmr_stats/migrations/0014_settings_model.py | 25 - .../migrations/0015_trend_statistics_model.py | 71 --- .../migrations/0016_drop_stats_settings.py | 17 - dsmrreader/__init__.py | 2 +- dsmrreader/config/base.py | 7 +- dsmrreader/config/test_postgresql.py | 2 +- dsmrreader/config/travis/postgresql.py | 2 +- dsmrreader/locales/nl/LC_MESSAGES/django.mo | Bin 35213 -> 35213 bytes dsmrreader/locales/nl/LC_MESSAGES/django.po | 2 +- dsmrreader/provisioning/django/development.py | 2 +- dsmrreader/provisioning/django/postgresql.py | 2 +- dsmrreader/provisioning/requirements/base.txt | 5 +- dsmrreader/provisioning/requirements/dev.txt | 2 +- dsmrreader/provisioning/requirements/test.txt | 5 +- quick-test.sh | 4 +- test-all.sh | 10 +- 59 files changed, 516 insertions(+), 1570 deletions(-) delete mode 100644 dsmr_consumption/migrations/0001_initial.py delete mode 100644 dsmr_consumption/migrations/0002_split_dsmr_reading_fields.py delete mode 100644 dsmr_consumption/migrations/0003_realign_gas_read_at.py delete mode 100644 dsmr_consumption/migrations/0004_recalculate_gas_consumption.py delete mode 100644 dsmr_datalogger/migrations/0001_initial.py delete mode 100644 dsmr_datalogger/migrations/0002_add_meter_statistics.py delete mode 100644 dsmr_datalogger/migrations/0003_split_dsmr_reading_fields.py delete mode 100644 dsmr_datalogger/migrations/0004_multiple_dsmr_version_support.py delete mode 100644 dsmr_datalogger/migrations/0005_optional_gas_readings.py delete mode 100644 dsmr_frontend/templatetags/model_meta_info.py delete mode 100644 dsmr_stats/migrations/0001_initial.py delete mode 100644 dsmr_stats/migrations/0001_renamed_migrations.py delete mode 100644 dsmr_stats/migrations/0002_consumption_models.py delete mode 100644 dsmr_stats/migrations/0003_consumption_date_fields.py delete mode 100644 dsmr_stats/migrations/0004_energysupplierprice_models.py delete mode 100644 dsmr_stats/migrations/0005_energysupplierprice_description.py delete mode 100644 dsmr_stats/migrations/0006_energysupplierprice_defaults.py delete mode 100644 dsmr_stats/migrations/0007_daily_user_notes.py delete mode 100644 dsmr_stats/migrations/0008_statssettings_model.py delete mode 100644 dsmr_stats/migrations/0009_reverse_dashboard_graphs_setting.py delete mode 100644 dsmr_stats/migrations/0010_split_models_among_apps.py delete mode 100644 dsmr_stats/migrations/0011_delete_moved_models.py delete mode 100644 dsmr_stats/migrations/0012_meta.py delete mode 100644 dsmr_stats/migrations/0013_drop_old_statistics_model.py delete mode 100644 dsmr_stats/migrations/0014_settings_model.py delete mode 100644 dsmr_stats/migrations/0015_trend_statistics_model.py delete mode 100644 dsmr_stats/migrations/0016_drop_stats_settings.py diff --git a/.travis.yml b/.travis.yml index 77390ab1c..0675ddd0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,21 @@ language: python python: - - "3.3" - - "3.4" - - "3.5" - - "3.5-dev" - - "3.6-dev" - - "nightly" # currently points to 3.7-dev + - 3.4 + - 3.5 + - 3.5-dev + - 3.6-dev + - nightly # currently points to 3.7-dev matrix: allow_failures: + # Was never supported by dsmrreader anyway. + - python: 2.7 + + # Support dropped since Django 1.9. It actually breaks in Django. + - python: 3.3 + + # Not officially supported by DSMR-reader, but we want to look ahead. - python: 3.6-dev - python: nightly diff --git a/docs/changelog.rst b/docs/changelog.rst index a4e6bd2ce..91e3a26c2 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,17 @@ v1.5.0 - xxxx-xx-xx ^^^^^^^^^^^^^^^^^^^ - Switch Nosetests to Pytest (+ pytest-cov) (`#167 `_). - PyLama code audit (+ pytest-cov) (`#158 `_). +- Double upgrade of Django framework ``Django 1.8`` -> ``Django 1.9`` -> ``Django 1.10`` (`#103 `_). +- **Change in Python support**: + + - The support for ``Python 3.3`` has been **dropped** due to the Django upgrade (`#103 `_). + - There is **experimental support** for ``Python 3.6`` and ``Python 3.7 (nightly)`` as the unittests are `now built against those versions `_ as well (`#167 `_). + +- **Legacy warning**: + + - The migrations that were squashed together in (`#31 `_) have been **removed**. This will only affect you when you are currently still running a dsmrreader-version of **before** ``v0.13 (β)``. + - If you are indeed still running ``< v0.13 (β)``, please upgrade to ``v1.4`` first (!), followed by an upgrade to ``v1.5``. + v1.4.0 - 2016-11-28 @@ -15,10 +26,12 @@ v1.4.0 - 2016-11-28 - Add new note from Dashboard has wrong time format (`#159 `_). - Display estimated price for current usage in Dashboard (`#155 `_). - Dropbox API v1 deprecated in June 2017 (`#142 `_). -- Support for Python 3.5 (`#55 `_). - Improve code coverage (`#151 `_). - Restyle configuration overview (`#156 `_). - Capability based push notifications (`#165 `_). +- **Change in Python support**: + + - Support for ``Python 3.5`` has been added officially (`#55 `_). v1.3.2 - 2016-11-08 diff --git a/docs/installation.rst b/docs/installation.rst index 903760a02..fc8dcd675 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -25,7 +25,7 @@ Dependencies & requirements - **Minimal 100 MB of disk space on RaspberryPi (card)** (for application installation & virtualenv). - More disk space is required for storing all reader data captured (optional). I generally advise to use a 8+ GB SD card. - - The readings will take 90+ % of the disk space. I plan however to add some kind of retention to it later, keeping the data (of many years) far below the 500 MB. + - The readings will take 90+ percent of the disk space. I plan however to add some kind of retention to it later, keeping the data (of many years) far below the 500 MB. - **Smart meter P1 data cable** diff --git a/docs/locale/nl/LC_MESSAGES/changelog.mo b/docs/locale/nl/LC_MESSAGES/changelog.mo index 166691b7c5cda696ffb09ec1c0f4177d4f71bfba..0002896d2b20dbd68034d8131473055af53a051c 100644 GIT binary patch delta 238 zcmeBU*~LD#6N*-AOh\n" "Language-Team: Dennis Siemensma \n" @@ -22,719 +22,754 @@ msgid "Changelog" msgstr "Wijzigingenoverzicht" #: ../../changelog.rst:6 -msgid "v1.4.0 - 2016-xx-xx" +msgid "v1.5.0 - xxxx-xx-xx" msgstr "" #: ../../changelog.rst:7 msgid "" -"Dropbox API v1 deprecated (`#142 `_)." +"Switch Nosetests to Pytest (+ pytest-cov) (`#167 " +"`_)." msgstr "" #: ../../changelog.rst:8 msgid "" -"Support for Python 3.5 (`#55 `_)." +"PyLama code audit (+ pytest-cov) (`#158 " +"`_)." msgstr "" #: ../../changelog.rst:9 msgid "" -"Support for both single and high/low tariff (`#130 " -"`_)." +"Upgrade to Django 1.9/1.10 (`#103 `_)." +msgstr "" + +#: ../../changelog.rst:13 +msgid "v1.4.0 - 2016-11-28" msgstr "" -#: ../../changelog.rst:10 +#: ../../changelog.rst:14 msgid "" -"Improve code coverage (`#151 `_)." +"Push notifications for Notify My Android / Prowl (iOS), written by Jeroen" +" Peters (`#152 `_)." +msgstr "" + +#: ../../changelog.rst:15 +msgid "" +"Support for both single and high/low tariff (`#130 " +"`_)." msgstr "" -#: ../../changelog.rst:11 +#: ../../changelog.rst:16 msgid "" "Add new note from Dashboard has wrong time format (`#159 " "`_)." msgstr "" -#: ../../changelog.rst:12 +#: ../../changelog.rst:17 msgid "" "Display estimated price for current usage in Dashboard (`#155 " "`_)." msgstr "" -#: ../../changelog.rst:13 +#: ../../changelog.rst:18 +msgid "" +"Dropbox API v1 deprecated in June 2017 (`#142 " +"`_)." +msgstr "" + +#: ../../changelog.rst:19 +msgid "" +"Support for Python 3.5 (`#55 `_)." +msgstr "" + +#: ../../changelog.rst:20 +msgid "" +"Improve code coverage (`#151 `_)." +msgstr "" + +#: ../../changelog.rst:21 msgid "" "Restyle configuration overview (`#156 `_)." msgstr "" -#: ../../changelog.rst:17 +#: ../../changelog.rst:22 +msgid "" +"Capability based push notifications (`#165 " +"`_)." +msgstr "" + +#: ../../changelog.rst:26 msgid "v1.3.2 - 2016-11-08" msgstr "" -#: ../../changelog.rst:18 +#: ../../changelog.rst:27 msgid "" "Requirements update (november 2016) (`#150 " "`_)." msgstr "" -#: ../../changelog.rst:22 +#: ../../changelog.rst:31 msgid "v1.3.1 - 2016-08-16" msgstr "" -#: ../../changelog.rst:23 +#: ../../changelog.rst:32 msgid "" "CSS large margin-bottom (`#144 `_)." msgstr "" -#: ../../changelog.rst:24 +#: ../../changelog.rst:33 msgid "" "Django security releases issued: 1.8.14 (`#147 " "`_)." msgstr "" -#: ../../changelog.rst:25 +#: ../../changelog.rst:34 msgid "" "Requirements update (August 2016) (`#148 " "`_)." msgstr "" -#: ../../changelog.rst:26 +#: ../../changelog.rst:35 msgid "" "Query performance improvements (`#149 `_)." msgstr "" -#: ../../changelog.rst:30 +#: ../../changelog.rst:39 msgid "v1.3.0 - 2016-07-15" msgstr "" -#: ../../changelog.rst:31 +#: ../../changelog.rst:40 msgid "" "API endpoint for datalogger (`#140 `_)." msgstr "" -#: ../../changelog.rst:32 +#: ../../changelog.rst:41 msgid "" "Colors for charts (`#137 `_)." msgstr "" -#: ../../changelog.rst:33 +#: ../../changelog.rst:42 msgid "" "Data export: Mindergas.nl (`#10 `_)." msgstr "" -#: ../../changelog.rst:34 +#: ../../changelog.rst:43 msgid "" "Requirement upgrade (`#143 `_)." msgstr "" -#: ../../changelog.rst:35 +#: ../../changelog.rst:44 msgid "" "Installation wizard for first time use (`#139 " "`_)." msgstr "" -#: ../../changelog.rst:39 +#: ../../changelog.rst:48 msgid "v1.2.0 - 2016-05-18" msgstr "" -#: ../../changelog.rst:40 +#: ../../changelog.rst:49 msgid "" "Energy supplier prices does not indicate tariff type (Django admin) " "(`#126 `_)." msgstr "" -#: ../../changelog.rst:41 +#: ../../changelog.rst:50 msgid "" "Requirements update (`#128 `_)." msgstr "" -#: ../../changelog.rst:42 +#: ../../changelog.rst:51 msgid "" "Force backup (`#123 `_)." msgstr "" -#: ../../changelog.rst:43 +#: ../../changelog.rst:52 msgid "" "Update clean-install.md (`#131 `_)." msgstr "" -#: ../../changelog.rst:44 +#: ../../changelog.rst:53 msgid "" "Improve data export field names (`#132 " "`_)." msgstr "" -#: ../../changelog.rst:45 +#: ../../changelog.rst:54 msgid "" "Display average temperature in archive (`#122 " "`_)." msgstr "" -#: ../../changelog.rst:46 +#: ../../changelog.rst:55 msgid "" "Pie charts on trends page overlap their canvas (`#136 " "`_)." msgstr "" -#: ../../changelog.rst:47 +#: ../../changelog.rst:56 msgid "" "'Slumber' consumption (`#115 `_)." msgstr "" -#: ../../changelog.rst:48 +#: ../../changelog.rst:57 msgid "" "Show lowest & highest Watt peaks (`#138 " "`_)." msgstr "" -#: ../../changelog.rst:49 +#: ../../changelog.rst:58 msgid "" "Allow day & hour statistics reset due to changing energy prices (`#95 " "`_)." msgstr "" -#: ../../changelog.rst:53 +#: ../../changelog.rst:62 msgid "v1.1.2 - 2016-05-01" msgstr "" -#: ../../changelog.rst:54 +#: ../../changelog.rst:63 msgid "" "Trends page giving errors (when lacking data) (`#125 " "`_)." msgstr "" -#: ../../changelog.rst:58 +#: ../../changelog.rst:67 msgid "v1.1.1 - 2016-04-27" msgstr "" -#: ../../changelog.rst:59 +#: ../../changelog.rst:68 msgid "" "Improve readme (`#124 `_)." msgstr "" -#: ../../changelog.rst:63 +#: ../../changelog.rst:72 msgid "v1.1.0 - 2016-04-23" msgstr "" -#: ../../changelog.rst:64 +#: ../../changelog.rst:73 msgid "" "Autorefresh dashboard (`#117 `_)." msgstr "" -#: ../../changelog.rst:65 +#: ../../changelog.rst:74 msgid "" "Improve line graphs' visibility (`#111 " "`_)." msgstr "" -#: ../../changelog.rst:66 +#: ../../changelog.rst:75 msgid "" "Easily add notes (`#110 `_)." msgstr "" -#: ../../changelog.rst:67 +#: ../../changelog.rst:76 msgid "" "Export data points in CSV format (`#2 `_)." msgstr "" -#: ../../changelog.rst:68 +#: ../../changelog.rst:77 msgid "" "Allow day/month/year comparison (`#94 `_)." msgstr "" -#: ../../changelog.rst:69 +#: ../../changelog.rst:78 msgid "" "Docs: Add FAQ and generic application info (`#113 " "`_)." msgstr "" -#: ../../changelog.rst:70 +#: ../../changelog.rst:79 msgid "" "Support for Iskra meter (DSMR 2.x) (`#120 " "`_)." msgstr "" -#: ../../changelog.rst:74 +#: ../../changelog.rst:83 msgid "v1.0.1 - 2016-04-07" msgstr "" -#: ../../changelog.rst:75 +#: ../../changelog.rst:84 msgid "" "Update licence to OSI compatible one (`#119 " "`_)." msgstr "" -#: ../../changelog.rst:79 +#: ../../changelog.rst:88 msgid "v1.0.0 - 2016-04-07" msgstr "" -#: ../../changelog.rst:80 +#: ../../changelog.rst:89 msgid "First official stable release." msgstr "Eerste officiële stabiele release." -#: ../../changelog.rst:84 +#: ../../changelog.rst:93 msgid "[β] v0.1 (2015-10-29) to 0.16 (2016-04-06)" msgstr "" -#: ../../changelog.rst:85 +#: ../../changelog.rst:94 msgid "" "All previous beta releases/changes have been combined to a single list " "below:" msgstr "" -#: ../../changelog.rst:87 +#: ../../changelog.rst:96 msgid "" "Move documentation to wiki or RTD (`#90 " "`_)." msgstr "" -#: ../../changelog.rst:88 +#: ../../changelog.rst:97 msgid "" "Translate README to Dutch (`#16 `_)." msgstr "" -#: ../../changelog.rst:89 +#: ../../changelog.rst:98 msgid "" "Delete (recent) history page (`#112 `_)." msgstr "" -#: ../../changelog.rst:90 +#: ../../changelog.rst:99 msgid "" "Display most recent temperature in dashboard (`#114 " "`_)." msgstr "" -#: ../../changelog.rst:91 +#: ../../changelog.rst:100 msgid "" "Upgrade Django to 1.8.12 (`#118 `_)." msgstr "" -#: ../../changelog.rst:93 +#: ../../changelog.rst:102 msgid "" "Redesign trends page (`#97 `_)." msgstr "" -#: ../../changelog.rst:94 +#: ../../changelog.rst:103 msgid "" "Support for summer time (`#105 `_)." msgstr "" -#: ../../changelog.rst:95 +#: ../../changelog.rst:104 msgid "" "Support for Daylight Saving Time (DST) transition (`#104 " "`_)." msgstr "" -#: ../../changelog.rst:96 +#: ../../changelog.rst:105 msgid "" "Add (error) hints to status page (`#106 " "`_)." msgstr "" -#: ../../changelog.rst:97 +#: ../../changelog.rst:106 msgid "" "Keep track of version (`#108 `_)." msgstr "" -#: ../../changelog.rst:99 +#: ../../changelog.rst:108 msgid "" "Django 1.8.11 released (`#82 `_)." msgstr "" -#: ../../changelog.rst:100 +#: ../../changelog.rst:109 msgid "" "Prevent tests from failing due to moment of execution (`#88 " "`_)." msgstr "" -#: ../../changelog.rst:101 +#: ../../changelog.rst:110 msgid "" "Statistics page meter positions are broken (`#93 " "`_)." msgstr "" -#: ../../changelog.rst:102 +#: ../../changelog.rst:111 msgid "" "Archive only shows graph untill 23:00 (11 pm) (`#77 " "`_)." msgstr "" -#: ../../changelog.rst:103 +#: ../../changelog.rst:112 msgid "" "Trends page crashes due to nullable fields average (`#100 " "`_)." msgstr "" -#: ../../changelog.rst:104 +#: ../../changelog.rst:113 msgid "" "Trends: Plot peak and off-peak relative to each other (`#99 " "`_)." msgstr "" -#: ../../changelog.rst:105 +#: ../../changelog.rst:114 msgid "" "Monitor requirements with requires.io (`#101 " "`_)." msgstr "" -#: ../../changelog.rst:106 +#: ../../changelog.rst:115 msgid "" "Terminology (`#41 `_)." msgstr "" -#: ../../changelog.rst:107 +#: ../../changelog.rst:116 msgid "" "Obsolete signals in dsmr_consumption (`#63 " "`_)." msgstr "" -#: ../../changelog.rst:108 +#: ../../changelog.rst:117 msgid "" "Individual app testing coverage (`#64 `_)." msgstr "" -#: ../../changelog.rst:109 +#: ../../changelog.rst:118 msgid "" "Support for extra devices on other M-bus (0-n:24.1) (`#92 " "`_)." msgstr "" -#: ../../changelog.rst:110 +#: ../../changelog.rst:119 msgid "" "Separate post-deployment commands (`#102 " "`_)." msgstr "" -#: ../../changelog.rst:112 +#: ../../changelog.rst:121 msgid "" "Show exceptions in production (webinterface) (`#87 " "`_)." msgstr "" -#: ../../changelog.rst:113 +#: ../../changelog.rst:122 msgid "" "Keep Supervisor processes running (`#79 " "`_)." msgstr "" -#: ../../changelog.rst:114 +#: ../../changelog.rst:123 msgid "" "Hourly stats of 22:00:00+00 every day lack gas (`#78 " "`_)." msgstr "" -#: ../../changelog.rst:115 +#: ../../changelog.rst:124 msgid "" "Test Travis-CI with MySQL + MariaDB + PostgreSQL (`#54 " "`_)." msgstr "" -#: ../../changelog.rst:116 +#: ../../changelog.rst:125 msgid "" "PostgreSQL tests + nosetests + coverage failure: unrecognized " "configuration parameter \"foreign_key_checks\" (`#62 " "`_)." msgstr "" -#: ../../changelog.rst:117 +#: ../../changelog.rst:126 msgid "" "Performance check (`#83 `_)." msgstr "" -#: ../../changelog.rst:118 +#: ../../changelog.rst:127 msgid "" "Allow month & year archive (`#66 `_)." msgstr "" -#: ../../changelog.rst:119 +#: ../../changelog.rst:128 msgid "" "Graphs keep increasing height on tablet (`#89 " "`_)." msgstr "" -#: ../../changelog.rst:121 +#: ../../changelog.rst:130 msgid "" "Delete StatsSettings(.track) settings model (`#71 " "`_)." msgstr "" -#: ../../changelog.rst:122 +#: ../../changelog.rst:131 msgid "" "Drop deprecated commands (`#22 `_)." msgstr "" -#: ../../changelog.rst:123 +#: ../../changelog.rst:132 msgid "" "Datalogger doesn't work properly with DSMR 4.2 (KAIFA-METER) (`#73 " "`_)." msgstr "" -#: ../../changelog.rst:124 +#: ../../changelog.rst:133 msgid "" "Dashboard month statistics costs does not add up (`#75 " "`_)." msgstr "" -#: ../../changelog.rst:125 +#: ../../changelog.rst:134 msgid "" "Log unhandled exceptions and errors (`#65 " "`_)." msgstr "" -#: ../../changelog.rst:126 +#: ../../changelog.rst:135 msgid "" "Datalogger crashes with IntegrityError because 'timestamp' is null (`#74 " "`_)." msgstr "" -#: ../../changelog.rst:127 +#: ../../changelog.rst:136 msgid "" "Trends are always shown in UTC (`#76 `_)." msgstr "" -#: ../../changelog.rst:128 +#: ../../changelog.rst:137 msgid "" "Squash migrations (`#31 `_)." msgstr "" -#: ../../changelog.rst:129 +#: ../../changelog.rst:138 msgid "" "Display 'electricity returned' graph in dashboard (`#81 " "`_)." msgstr "" -#: ../../changelog.rst:130 +#: ../../changelog.rst:139 msgid "" "Optional gas (and electricity returned) capabilities tracking (`#70 " "`_)." msgstr "" -#: ../../changelog.rst:131 +#: ../../changelog.rst:140 msgid "" "Add 'electricity returned' to trends page (`#84 " "`_)." msgstr "" -#: ../../changelog.rst:133 +#: ../../changelog.rst:142 msgid "" "Archive: View past days details (`#61 `_)." msgstr "" -#: ../../changelog.rst:134 +#: ../../changelog.rst:143 msgid "" "Dashboard: Consumption total for current month (`#60 " "`_)." msgstr "" -#: ../../changelog.rst:135 +#: ../../changelog.rst:144 msgid "" "Check whether gas readings are optional (`#34 " "`_)." msgstr "" -#: ../../changelog.rst:136 +#: ../../changelog.rst:145 msgid "" "Django security releases issued: 1.8.10 (`#68 " "`_)." msgstr "" -#: ../../changelog.rst:137 +#: ../../changelog.rst:146 msgid "" "Notes display in archive (`#69 `_)." msgstr "" -#: ../../changelog.rst:139 +#: ../../changelog.rst:148 msgid "" "Status page/alerts when features are disabled/unavailable (`#45 " "`_)." msgstr "" -#: ../../changelog.rst:140 +#: ../../changelog.rst:149 msgid "" "Integrate Travis CI (`#48 `_)." msgstr "" -#: ../../changelog.rst:141 +#: ../../changelog.rst:150 msgid "" "Testing coverage (`#38 `_)." msgstr "" -#: ../../changelog.rst:142 +#: ../../changelog.rst:151 msgid "" "Implement automatic backups & Dropbox cloud storage (`#44 " "`_)." msgstr "" -#: ../../changelog.rst:143 +#: ../../changelog.rst:152 msgid "" "Link code coverage service to repository (`#56 " "`_)." msgstr "" -#: ../../changelog.rst:144 +#: ../../changelog.rst:153 msgid "" "Explore timezone.localtime() as replacement for datetime.astimezone() " "(`#50 `_)." msgstr "" -#: ../../changelog.rst:145 +#: ../../changelog.rst:154 msgid "" "Align GasConsumption.read_at to represent the start of hour (`#40 " "`_)." msgstr "" -#: ../../changelog.rst:147 +#: ../../changelog.rst:156 msgid "" "Cleanup unused static files (`#47 `_)." msgstr "" -#: ../../changelog.rst:148 +#: ../../changelog.rst:157 msgid "" "Investigated mysql_tzinfo_to_sql — Load the Time Zone Tables (`#35 " "`_)." msgstr "" -#: ../../changelog.rst:149 +#: ../../changelog.rst:158 msgid "" "Make additional DSMR data optional (`#46 " "`_)." msgstr "" -#: ../../changelog.rst:150 +#: ../../changelog.rst:159 msgid "" "Localize graph x-axis (`#42 `_)." msgstr "" -#: ../../changelog.rst:151 +#: ../../changelog.rst:160 msgid "" "Added graph formatting string to gettext file (`#42 " "`_)." msgstr "" -#: ../../changelog.rst:152 +#: ../../changelog.rst:161 msgid "" "Different colors for peak & off-peak electricity (`#52 " "`_)." msgstr "" -#: ../../changelog.rst:153 +#: ../../changelog.rst:162 msgid "" "Admin: Note widget (`#51 `_)." msgstr "" -#: ../../changelog.rst:154 +#: ../../changelog.rst:163 msgid "" "Allow GUI to run without data (`#26 `_)." msgstr "" -#: ../../changelog.rst:156 +#: ../../changelog.rst:165 msgid "" "Moved project to GitHub (`#28 `_)." msgstr "" -#: ../../changelog.rst:157 +#: ../../changelog.rst:166 msgid "Added stdout to dsmr_backend to reflect progress." msgstr "" -#: ../../changelog.rst:158 +#: ../../changelog.rst:167 msgid "" "Restore note usage in GUI (`#39 `_)." msgstr "" -#: ../../changelog.rst:160 +#: ../../changelog.rst:169 msgid "" "Store daily, weekly, monthly and yearly statistics (`#3 " "`_)." msgstr "" -#: ../../changelog.rst:161 +#: ../../changelog.rst:170 msgid "" "Improved Recent History page performance a bit. (as result of `#3 " "`_)" msgstr "" -#: ../../changelog.rst:162 +#: ../../changelog.rst:171 msgid "" "Updates ChartJS library tot 1.1, disposing django-chartjs plugin. Labels " "finally work! (as result of `#3 `_)" msgstr "" -#: ../../changelog.rst:163 +#: ../../changelog.rst:172 msgid "" "Added trends page. (as result of `#3 `_)" msgstr "" -#: ../../changelog.rst:165 +#: ../../changelog.rst:174 msgid "" "Recent history setting: set range (`#29 " "`_)." msgstr "" -#: ../../changelog.rst:166 +#: ../../changelog.rst:175 msgid "" "Mock required for test: dsmr_weather.test_weather_tracking (`#32 " "`_)." msgstr "" -#: ../../changelog.rst:168 +#: ../../changelog.rst:177 msgid "" "Massive refactoring: Separating apps & using signals (`#19 " "`_)." msgstr "" -#: ../../changelog.rst:169 +#: ../../changelog.rst:178 msgid "" "README update: Exit character for cu (`#27 " "`_, by Jeroen " "Peters)." msgstr "" -#: ../../changelog.rst:170 +#: ../../changelog.rst:179 msgid "Fixed untranslated strings in admin interface." msgstr "" -#: ../../changelog.rst:171 +#: ../../changelog.rst:180 msgid "Upgraded Django to 1.8.9." msgstr "" @@ -810,9 +845,6 @@ msgstr "" #~ msgid "Test Travis-CI with MySQL + MariaDB + PostgreSQL (#54)." #~ msgstr "" -#~ msgid "" -#~ msgstr "" - #~ msgid "Performance check (#83)." #~ msgstr "" @@ -987,3 +1019,11 @@ msgstr "" #~ msgid "v1.3.0 - 2016-??-??" #~ msgstr "" +#~ msgid "v1.4.0 - 2016-xx-xx" +#~ msgstr "" + +#~ msgid "" +#~ "Dropbox API v1 deprecated (`#142 " +#~ "`_)." +#~ msgstr "" + diff --git a/docs/locale/nl/LC_MESSAGES/credits.mo b/docs/locale/nl/LC_MESSAGES/credits.mo index 01bd287d4b761d950848fc7810e0556922cbfa91..7dc1fd235797c018b2038bdfec28a8842db454f6 100644 GIT binary patch delta 617 zcmXZYyGw#m7{~F)TV~otqm~TmLWPEDMMfxwfshCdEji>^(9jY@;UH8*t4NozDFSN< z5enK`qi6_e30#7pKR}o0`*1pN-p{$c=khxV-cA%hefCqK3{(BoNsGu7#;trPOM38|T4UOao^LT@r zh`ZM$5<}f^6Lnn!H4#^N*?Mk~YQy^LEJxg{<%-+oh()(ZS&S)_$MHB9j@|=GUBd+SU=ov z`}0`D+w8CA7-YHe7Uj!#@gbfxbYTSR_>lG(-y8FUzA@HGWSS_+yl!5O zKaHi^pW=UePSvK@{3!B5v)pJz_oC2UF=zdCH(YGG#_`mQA1rv4e57k~_5U@wHC?k~ z%qH!jT){CNr&P4Fw$rxz24WW-%QnW{U}@D|@=9iK*SL|Zc!3wXQ6nswQw?v?kIaHK fYz diff --git a/docs/locale/nl/LC_MESSAGES/installation.mo b/docs/locale/nl/LC_MESSAGES/installation.mo index 9673aef451836b0bee5423db76f4b1b484c11947..f5003ebfd265042cf7064e59e3fbccd077040092 100644 GIT binary patch delta 1719 zcmXZcYfzL`9LMqBBeh$ChyfW;wkuM>#6NM;4^oGwlhvzxx{4dY$J8PXf zYrVEUkt->jCf$xzI3D9zhgncOnSJh6j88-w@p zOY{-WWgJCwL)a*9>ErzTPii;2UyGt*$+@><`of%vg!#m zP4_a6$8KDXeMnW55#mTxoirJxCO_|eXd?8@r=~ayIZKQ1Dcp;+fo|nC zYcPf{;89E`fWn33-*jno5gm*t&>T3niuB_uG!axUc76w}YUkz)@Ojp^;}BXk(hVF& zUeVQBelxJFj?3Xbr1A9`w&5V=V{>AOQ{#3t7deTqqW58GKfa5-SV?_M1b^TGY^>)u z0&ifDNG>jQo*U)%1FZKpI{R#Hl2$VxMU(o~)WLk#!+08VVq9|tgKId0jTVyzFY`V2 zHdnqS`=HBbHQ5(jc~+|Zi>uvguv^^iR=NGRdyh3ax%-wgDK1ZmC+sh^TOwJ>hP1tt z+#BPqE8|aYP7W50ai<4^#lfg26o>^PzCh3(3FfA<6e{xsSPI$R&|pf~Kh@3%Pq{hj ekNAVhNH})W|63+oBCmVg8(TO0x1DQgr~6;(HUT;S delta 1708 zcmXBUe@xVM9LMq3H`-lGK?#uvu|qg3@aVV$F3vzpMGT4qQjn|26&1;H1ZuMK+Dvp^ z?66BIh}JJt9A$7@b8AKA)~5ZFV`*i&Y-6r@vR0F6%hvPL_n&)w-{0@&`}us{@6Y>t z)*y0%llJU#j#I@lYBu_V5yy+KcA>L4M5r zLzsh~V;-JCUez@$K<9i#G@pxQ{Fs52=*ErcW1$GHBA!UMH#mzQ5U1WE9ma9YW?U<) znFM;srV^vbP@O;@o<$d?WlHUMH=6bKXGWwdCK%^N1vma+mOd=Zk`CfHuEXYAr3Ai* zb+|rTdKuqGlS%$<(h97>eB6s69K)S>9oOKCta=i^!RN6*vPk-Z3sYy3(U(Y-bqY)I zJl0~yVs?#f*o-mUju&w`3AEiVH4+cIq)wc{1`Ov(zv0I?iUUjR3I*9^3322FE_%5* zf>Y=wol|%X&5plw+r5y!)GlE=GKc!`6C6cz)-89~_d79697B`gCG5w??v##U5}(F{ zcTok_S8Ad3E;qi%1~Ta?l3pV|zDzoRA&=CJ7qJP$#Zm_zMUz1`W!Z4_)2 zcJsc(pb_F>+`;n-zchz9ftjqYN$Sk8>IXEXp202*meE)^h8|vUmP>3}WdUgcw&DLx zhx3S|_&5$Dr=oxGYs|UFKJ#;Ej^Z$lmX6UN4axc%;UWXa&`kIhn(jPbj!KiEv=aB@2K*h9IEAOHsK1%u2(7yTzeUr8xho|$ zFE8feGuVxNNWbcDe20ay?z6l8v-_pDxj&2lVtkcd$=6p)pAw(PM=(Z1nO;aDr=i|z z>d!H1tlFOVEN&*gihJ|KIzJddoMgp02)ZcVz!Gm-t4x(9b7B6AwAv=S6>+S!6%V>5U2uZuJ1OLR!cm;oL zka$I>8>L6l-6R#^E~N2w6npVU!r8wO&moZ=VLPX1&6S@ z+5Su~U5ulMFqy{EB#TSs@tmghXHH}$j!d00~JG2;SeoHr2n_>w8UVsCtr azaXWoxHPfGAG|TKJMe~!NnI`boc{r1wgG1V diff --git a/docs/locale/nl/LC_MESSAGES/installation.po b/docs/locale/nl/LC_MESSAGES/installation.po index 8f85d6832..eba55b8de 100644 --- a/docs/locale/nl/LC_MESSAGES/installation.po +++ b/docs/locale/nl/LC_MESSAGES/installation.po @@ -9,13 +9,15 @@ msgstr "" "Project-Id-Version: DSMR Reader 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-11-18 20:07+0100\n" -"PO-Revision-Date: 2016-04-07 20:07+0100\n" +"PO-Revision-Date: 2016-11-29 00:02+0100\n" "Last-Translator: Dennis Siemensma \n" "Language-Team: Dennis Siemensma \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" +"Language: nl\n" +"X-Generator: Poedit 1.8.7.1\n" #: ../../installation.rst:2 msgid "Installation" @@ -23,13 +25,12 @@ msgstr "Installatie" #: ../../installation.rst:3 msgid "" -"The installation guide may take about *half an hour max* (for raspberryPi" -" 2/3), but it greatly depends on your Linux skills and whether you need " -"to understand every step described in this guide." +"The installation guide may take about *half an hour max* (for raspberryPi 2/3), " +"but it greatly depends on your Linux skills and whether you need to understand " +"every step described in this guide." msgstr "" -"Het installeren duurt naar verwachting zo'n *half uur* (op een " -"RaspberryPi 2/3), maar hangt natuurlijk ook af van je eigen vaardigheid " -"op de command line." +"Het installeren duurt naar verwachting zo'n *half uur* (op een RaspberryPi " +"2/3), maar hangt natuurlijk ook af van je eigen vaardigheid op de command line." #: ../../installation.rst:7 msgid "Dependencies & requirements" @@ -42,8 +43,7 @@ msgstr "**RaspberryPi 2 of 3**" #: ../../installation.rst:10 msgid "RaspberryPi 1 should work decently, but I do not actively support it." msgstr "" -"RaspberryPi 1 zou redelijk moeten werken, maar ik ondersteun deze niet " -"actief." +"RaspberryPi 1 zou redelijk moeten werken, maar ik ondersteun deze niet actief." #: ../../installation.rst:12 msgid "**Raspbian OS**" @@ -51,16 +51,15 @@ msgstr "**Raspbian OS**" #: ../../installation.rst:14 msgid "" -"Recommended and tested with, but any OS satisfying the requirements " -"should do fine." +"Recommended and tested with, but any OS satisfying the requirements should do " +"fine." msgstr "" -"Aanbevolen en mee getest, al zou elk OS die dezelfde vereisten " -"ondersteunt prima moeten zijn." +"Aanbevolen en mee getest, al zou elk OS die dezelfde vereisten ondersteunt " +"prima moeten zijn." #: ../../installation.rst:16 -#, fuzzy msgid "**Python 3.3 / 3.4 / 3.5**" -msgstr "**Python 3.3 / 3.4**" +msgstr "**Python 3.3 / 3.4 / 3.5**" #: ../../installation.rst:17 msgid "**PostgreSQL 9+ or MySQL / MariaDB 5.5+**" @@ -69,49 +68,49 @@ msgstr "**PostgreSQL 9+ of MySQL / MariaDB 5.5+**" #: ../../installation.rst:19 msgid "I highly recommend *PostgreSQL* due to builtin support for timezones." msgstr "" -"Ik raad **PostgreSQL** sterk aan wegens de goede ingebouwde ondersteuning" -" voor tijdzones." +"Ik raad **PostgreSQL** sterk aan wegens de goede ingebouwde ondersteuning voor " +"tijdzones." #: ../../installation.rst:21 msgid "" -"**Smart Meter** with support for **at least DSMR 4.0/4.2** and **P1 " -"telegram port**" +"**Smart Meter** with support for **at least DSMR 4.0/4.2** and **P1 telegram " +"port**" msgstr "" -"**Slimme meter** met ondersteuning voor **ten minste DSMR 4.0/4.2** en " -"een **P1 telegram poort**" +"**Slimme meter** met ondersteuning voor **ten minste DSMR 4.0/4.2** en een **P1 " +"telegram poort**" #: ../../installation.rst:23 msgid "" -"Tested so far with Landis+Gyr E350, Kaifa. Telegram port looks like an " -"RJ11 (phone) socket." +"Tested so far with Landis+Gyr E350, Kaifa. Telegram port looks like an RJ11 " +"(phone) socket." msgstr "" -"Tot nu toe getest met Landis+Gyr E350, Kaifa. Telegram poort (P1) ziet er" -" uit als een RJ11 (telefoon) aansluiting." +"Tot nu toe getest met Landis+Gyr E350, Kaifa. Telegram poort (P1) ziet er uit " +"als een RJ11 (telefoon) aansluiting." #: ../../installation.rst:25 msgid "" "**Minimal 100 MB of disk space on RaspberryPi (card)** (for application " "installation & virtualenv)." msgstr "" -"**Miminaal 100 MB schijfruimte vereist op RaspberryPi (SD-kaart)** (ten " -"behoeve van de applicatie en virtualenv)." +"**Miminaal 100 MB schijfruimte vereist op RaspberryPi (SD-kaart)** (ten behoeve " +"van de applicatie en virtualenv)." #: ../../installation.rst:27 msgid "" -"More disk space is required for storing all reader data captured " -"(optional). I generally advise to use a 8+ GB SD card." +"More disk space is required for storing all reader data captured (optional). I " +"generally advise to use a 8+ GB SD card." msgstr "" -"Meer schijfruimte is nodig voor het opslaan van alle metingen " -"(optioneel). Over het algemeen adviseer ik minimaal een 8 GB SD-kaart." +"Meer schijfruimte is nodig voor het opslaan van alle metingen (optioneel). Over " +"het algemeen adviseer ik minimaal een 8 GB SD-kaart." #: ../../installation.rst:28 #, python-format msgid "" -"The readings will take 90+ % of the disk space. I plan however to add " -"some kind of retention to it later, keeping the data (of many years) far " -"below the 500 MB." +"The readings will take 90+ percent of the disk space. I plan however to add " +"some kind of retention to it later, keeping the data (of many years) far below " +"the 500 MB." msgstr "" -"De ruwe metingen nemen ongeveer 90+ % van de schijfruimte in gebruik. Ik " +"De ruwe metingen nemen ongeveer 90+ procent van de schijfruimte in gebruik. Ik " "bouw later overigens nog wel een optie in voor retentie, waardoor je de " "gegevens over meerdere jaren ruimschoots onder de 500 MB krijgt." @@ -126,8 +125,7 @@ msgstr "Je kunt deze online bestellen voor ongeveer 15 a 20 Euro." #: ../../installation.rst:34 msgid "**Basic Linux knowledge for deployment, debugging and troubleshooting**" msgstr "" -"**Basiskennis Linux voor het uitrollen en mogelijk debuggen van " -"problemen**" +"**Basiskennis Linux voor het uitrollen en mogelijk debuggen van problemen**" #: ../../installation.rst:36 msgid "It just really helps if you know what you are doing." @@ -139,23 +137,23 @@ msgstr "1. Databaseopslag" #: ../../installation.rst:42 msgid "" -"The application stores by default all readings taken from the serial " -"cable. Depending on your needs, you can choose for either (Option A.) " -"**PostgreSQL** (Option B.) **MySQL/MariaDB**." +"The application stores by default all readings taken from the serial cable. " +"Depending on your needs, you can choose for either (Option A.) **PostgreSQL** " +"(Option B.) **MySQL/MariaDB**." msgstr "" -"De applicatie slaat alle metingen op in een database. Afhankelijk van je " -"wensen en behoeftes heb je de keuze uit: (Keuze A.) **PostgreSQL** (Keuze" -" B.) **MySQL/MariaDB**." +"De applicatie slaat alle metingen op in een database. Afhankelijk van je wensen " +"en behoeftes heb je de keuze uit: (Keuze A.) **PostgreSQL** (Keuze B.) **MySQL/" +"MariaDB**." #: ../../installation.rst:44 msgid "" -"*If you have no idea what to choose, I generally advise to pick " -"PostgreSQL, as it has builtin support for (local) timezone handling " -"(required for DST transitions).*" +"*If you have no idea what to choose, I generally advise to pick PostgreSQL, as " +"it has builtin support for (local) timezone handling (required for DST " +"transitions).*" msgstr "" "*Als je geen idee hebt wat je moet kiezen, dan adviseer ik doorgaans om " -"PostgreSQL te kiezen. Dit vanwege de uitstekende ingebouwde ondersteuning" -" voor tijdzones (nodig voor zomer-/wintertijd).*" +"PostgreSQL te kiezen. Dit vanwege de uitstekende ingebouwde ondersteuning voor " +"tijdzones (nodig voor zomer-/wintertijd).*" #: ../../installation.rst:47 ../../installation.rst:213 msgid "(Option A.) PostgreSQL" @@ -166,8 +164,8 @@ msgid "" "Install PostgreSQL, ``postgresql-server-dev-all`` is required for the " "virtualenv installation later in this guide." msgstr "" -"Installeer PostgreSQL. Daarnaast is ``postgresql-server-dev-all`` nodig " -"voor het installeren van de virtuelenv later." +"Installeer PostgreSQL. Daarnaast is ``postgresql-server-dev-all`` nodig voor " +"het installeren van de virtuelenv later." #: ../../installation.rst:50 ../../installation.rst:75 msgid "Install database::" @@ -175,22 +173,22 @@ msgstr "Installeer database::" #: ../../installation.rst:54 msgid "" -"Does Postgres not start due to locales? Try: ``dpkg-reconfigure " -"locales``. Still no luck? Try editing ``/etc/environment``, add " -"``LC_ALL=\"en_US.utf-8\"`` and reboot." +"Does Postgres not start due to locales? Try: ``dpkg-reconfigure locales``. " +"Still no luck? Try editing ``/etc/environment``, add ``LC_ALL=\"en_US.utf-8\"`` " +"and reboot." msgstr "" -"Start PostgreSQL niet wegens een fout in 'locales'? Probeer dan het " -"volgende: ``dpkg-reconfigure locales``. Werkt het nog steeds niet? Open " -"dan dit bestand ``/etc/environment``, voeg onderaan de regel " -"``LC_ALL=\"en_US.utf-8\"`` toe en herstart het systeem." +"Start PostgreSQL niet wegens een fout in 'locales'? Probeer dan het volgende: " +"``dpkg-reconfigure locales``. Werkt het nog steeds niet? Open dan dit bestand " +"``/etc/environment``, voeg onderaan de regel ``LC_ALL=\"en_US.utf-8\"`` toe en " +"herstart het systeem." #: ../../installation.rst:56 msgid "" -"(!) Ignore any '*could not change directory to \"/root\": Permission " -"denied*' errors for the following three commands." +"(!) Ignore any '*could not change directory to \"/root\": Permission denied*' " +"errors for the following three commands." msgstr "" -"(!) Negeer voor de volgende drie commando's de foutmelding: '*could not " -"change directory to \"/root\": Permission denied*'." +"(!) Negeer voor de volgende drie commando's de foutmelding: '*could not change " +"directory to \"/root\": Permission denied*'." #: ../../installation.rst:58 ../../installation.rst:83 msgid "Create database user::" @@ -212,13 +210,13 @@ msgstr "(Keuze B.) MySQL/MariaDB" #: ../../installation.rst:73 msgid "" -"Install MariaDB. You can also choose to install the closed source MySQL, " -"as they should be interchangeable anyway. ``libmysqlclient-dev`` is " -"required for the virtualenv installation later in this guide." +"Install MariaDB. You can also choose to install the closed source MySQL, as " +"they should be interchangeable anyway. ``libmysqlclient-dev`` is required for " +"the virtualenv installation later in this guide." msgstr "" -"Installeer MariaDB. Je kunt er ook voor kiezen om het closed-source MySQL" -" te installeren. Welke je ook kiest, ``libmysqlclient-dev`` is later " -"nodig voor de virtualenv." +"Installeer MariaDB. Je kunt er ook voor kiezen om het closed-source MySQL te " +"installeren. Welke je ook kiest, ``libmysqlclient-dev`` is later nodig voor de " +"virtualenv." #: ../../installation.rst:79 msgid "Create database::" @@ -238,23 +236,23 @@ msgstr "2. Afhankelijkheden" #: ../../installation.rst:98 msgid "" -"Now you'll have to install several utilities, required for the Nginx " -"webserver, Gunicorn application server and cloning the application code " -"from the Github repository::" +"Now you'll have to install several utilities, required for the Nginx webserver, " +"Gunicorn application server and cloning the application code from the Github " +"repository::" msgstr "" -"Tijd om diverse tools te installeren. Deze zijn nodig voor de Nginx " -"webserver, de Gunicorn applicatieserver en voor het binnenhalen van de " -"code van de applicatie vanaf Github::" +"Tijd om diverse tools te installeren. Deze zijn nodig voor de Nginx webserver, " +"de Gunicorn applicatieserver en voor het binnenhalen van de code van de " +"applicatie vanaf Github::" #: ../../installation.rst:102 msgid "" "Install ``cu``. The CU program allows easy testing for your DSMR serial " -"connection. It's very basic but also very effective to simply test " -"whether your serial cable setup works properly. ::" +"connection. It's very basic but also very effective to simply test whether your " +"serial cable setup works properly. ::" msgstr "" -"Installeer ``cu``. Met dit programmaatje kunnen we vrij gemakkelijk de " -"DSMR-verbinding testen naar je slimme meter toe. Erg handig om te kijken " -"of dat überhaupt al lekker werkt." +"Installeer ``cu``. Met dit programmaatje kunnen we vrij gemakkelijk de DSMR-" +"verbinding testen naar je slimme meter toe. Erg handig om te kijken of dat " +"überhaupt al lekker werkt." #: ../../installation.rst:108 msgid "3. Application user" @@ -262,28 +260,27 @@ msgstr "3. Applicatiegebruiker" #: ../../installation.rst:109 msgid "" -"The application runs as ``dsmr`` user by default. This way we do not have" -" to run the application as ``root``, which is a bad practice anyway." +"The application runs as ``dsmr`` user by default. This way we do not have to " +"run the application as ``root``, which is a bad practice anyway." msgstr "" -"De applicatie draait standaard onder de gebruiker ``dsmr``. Hierdoor " -"heeft het geen ``root``-rechten (nodig), wat over het algemeen zeer " -"afgeraden wordt." +"De applicatie draait standaard onder de gebruiker ``dsmr``. Hierdoor heeft het " +"geen ``root``-rechten (nodig), wat over het algemeen zeer afgeraden wordt." #: ../../installation.rst:111 msgid "" -"Create user with homedir. The application code and virtualenv will reside" -" in this directory as well::" +"Create user with homedir. The application code and virtualenv will reside in " +"this directory as well::" msgstr "" -"Maak een aparte gebruiker aan met eigen homedir. De code voor de " -"applicatie en virtualenv zetten we later hier in::" +"Maak een aparte gebruiker aan met eigen homedir. De code voor de applicatie en " +"virtualenv zetten we later hier in::" #: ../../installation.rst:115 msgid "" -"Our user also requires dialout permissions. So allow the user to perform " -"a dialout by adding it to the ``dialout`` group::" +"Our user also requires dialout permissions. So allow the user to perform a " +"dialout by adding it to the ``dialout`` group::" msgstr "" -"De gebruiker heeft ook toegang nodig om de kabel te kunnen uitlezen. " -"Hiervoor voegen de we gebruiker toe aan de groep ``dialout``::" +"De gebruiker heeft ook toegang nodig om de kabel te kunnen uitlezen. Hiervoor " +"voegen de we gebruiker toe aan de groep ``dialout``::" #: ../../installation.rst:121 msgid "4. Webserver/Nginx (part 1)" @@ -291,43 +288,39 @@ msgstr "4. Webserver/Nginx (deel 1)" #: ../../installation.rst:123 msgid "" -"*We will now prepare the webserver, Nginx. It will serve all " -"application's static files directly and proxy any application requests to" -" the backend, Gunicorn controlled by Supervisor, which we will configure " -"later on.*" +"*We will now prepare the webserver, Nginx. It will serve all application's " +"static files directly and proxy any application requests to the backend, " +"Gunicorn controlled by Supervisor, which we will configure later on.*" msgstr "" -"*We configureren vervolgens de webserver (Nginx). Deze serveert alle " -"statische bestanden en geeft de applicatie-verzoeken door naar de " -"backend, waar de applicatie in Gunicorn draait onder Supervisor. Deze " -"stellen we later in.*" +"*We configureren vervolgens de webserver (Nginx). Deze serveert alle statische " +"bestanden en geeft de applicatie-verzoeken door naar de backend, waar de " +"applicatie in Gunicorn draait onder Supervisor. Deze stellen we later in.*" #: ../../installation.rst:125 msgid "" -"Django will copy all static files to a separate directory, used by Nginx " -"to serve statics. Therefor it requires (write) access to it::" +"Django will copy all static files to a separate directory, used by Nginx to " +"serve statics. Therefor it requires (write) access to it::" msgstr "" -"Django kopieert alle statische bestanden naar een aparte map, die weer " -"door Nginx gebruikt wordt. Daarom heeft Django er tevens (schrijf)toegang" -" toe nodig::" +"Django kopieert alle statische bestanden naar een aparte map, die weer door " +"Nginx gebruikt wordt. Daarom heeft Django er tevens (schrijf)toegang toe nodig::" #: ../../installation.rst:131 msgid "" -"*The reason for splitting the webserver chapter in two steps, is because " -"the application requires the directory created above to exist. And Nginx " -"requires the application to exist (cloned) before running (and to copy " -"its virtual hosts file), resulting in an dependency loop.*" +"*The reason for splitting the webserver chapter in two steps, is because the " +"application requires the directory created above to exist. And Nginx requires " +"the application to exist (cloned) before running (and to copy its virtual hosts " +"file), resulting in an dependency loop.*" msgstr "" "*Het configureren van de webserver kan alleen in twee stappen, omdat de " -"applicatie de bovenstaande map nodig heeft, maar Nginx heeft weer de " -"applicatie eerst nodig. Hiermee krijg je een kip-ei verhaal.*" +"applicatie de bovenstaande map nodig heeft, maar Nginx heeft weer de applicatie " +"eerst nodig. Hiermee krijg je een kip-ei verhaal.*" #: ../../installation.rst:133 msgid "" -"Either proceed to the next heading for a test reading or continue at step" -" 5." +"Either proceed to the next heading for a test reading or continue at step 5." msgstr "" -"Ga ofwel door naar het volgende hoofdstuk voor een testmeting of ga " -"direct door naar stap 5." +"Ga ofwel door naar het volgende hoofdstuk voor een testmeting of ga direct door " +"naar stap 5." #: ../../installation.rst:137 msgid "Your first reading (optional)" @@ -337,22 +330,21 @@ msgstr "Je allereerste (optionele) meting" msgid "" "**OPTIONAL**: You may skip this section as it's not required for the " "application to install. However, if you have never read your meter's P1 " -"telegram port before, I recommend to perform an initial reading to make " -"sure everything works as expected." +"telegram port before, I recommend to perform an initial reading to make sure " +"everything works as expected." msgstr "" "**OPTIONEEL**: Je kunt deze stap overslaan wanneer je al eerder een " -"(test)meting hebt gedaan met je slimme meter. Ik raad het dus vooral aan " -"als je nog nooit eerder je P1-poort hebt uitgelezen. Hiermee verzeker je " -"jezelf ook dat de applicatie straks dezelfde (werkende) toegang heeft " -"voor de metingen." +"(test)meting hebt gedaan met je slimme meter. Ik raad het dus vooral aan als je " +"nog nooit eerder je P1-poort hebt uitgelezen. Hiermee verzeker je jezelf ook " +"dat de applicatie straks dezelfde (werkende) toegang heeft voor de metingen." #: ../../installation.rst:140 msgid "" "Now login as the user we have just created, to perform our very first " "reading! ::" msgstr "" -"Log nu in als de gebruiker die we zojuist hebben aangemaakt voor de " -"eerste testmeting! ::" +"Log nu in als de gebruiker die we zojuist hebben aangemaakt voor de eerste " +"testmeting! ::" #: ../../installation.rst:144 msgid "Test with ``cu`` for **DSMR 4+**::" @@ -364,24 +356,24 @@ msgstr "Of test met ``cu`` voor **DSMR 2.2** (ongetest)::" #: ../../installation.rst:152 msgid "" -"You now should see something similar to ``Connected.`` and a wall of text" -" and numbers *within 10 seconds*. Nothing? Try different BAUD rate, as " -"mentioned above. You might also check out a useful blog, `such as this " -"one (Dutch) `_." -msgstr "" -"Je zou nu iets moeten zien als ``Connected.``. Vervolgens krijg je, als " -"het goed is, binnen tien seconden een hele lap tekst te zijn met een hoop" -" cijfers. Werkt het niet? Probeer dan een andere BAUD-waarde, zoals " -"hierboven beschreven. Of `kijk op een nuttig weblog " +"You now should see something similar to ``Connected.`` and a wall of text and " +"numbers *within 10 seconds*. Nothing? Try different BAUD rate, as mentioned " +"above. You might also check out a useful blog, `such as this one (Dutch) " "`_." +msgstr "" +"Je zou nu iets moeten zien als ``Connected.``. Vervolgens krijg je, als het " +"goed is, binnen tien seconden een hele lap tekst te zijn met een hoop cijfers. " +"Werkt het niet? Probeer dan een andere BAUD-waarde, zoals hierboven beschreven. " +"Of `kijk op een nuttig weblog `_." #: ../../installation.rst:154 msgid "" -"To exit cu, type \"``q.``\", hit Enter and wait for a few seconds. It " -"should exit with the message ``Disconnected.``." +"To exit cu, type \"``q.``\", hit Enter and wait for a few seconds. It should " +"exit with the message ``Disconnected.``." msgstr "" -"Om cu af te sluiten, typ \"``q.``\", druk op Enter en wacht voor een paar" -" seconden. Het programma sluit af met de melding ``Disconnected.``." +"Om cu af te sluiten, typ \"``q.``\", druk op Enter en wacht voor een paar " +"seconden. Het programma sluit af met de melding ``Disconnected.``." #: ../../installation.rst:158 msgid "5. Clone project code from Github" @@ -389,19 +381,19 @@ msgstr "5. Kloon project code vanaf Github" #: ../../installation.rst:159 msgid "" -"Now is the time to clone the code from the repository into the homedir we" -" created." +"Now is the time to clone the code from the repository into the homedir we " +"created." msgstr "" -"Nu kunnen we de code van de applicatie van Github downloaden en in de " -"homedir zetten die we net aangemaakt hebben." +"Nu kunnen we de code van de applicatie van Github downloaden en in de homedir " +"zetten die we net aangemaakt hebben." #: ../../installation.rst:161 ../../installation.rst:178 msgid "" -"Make sure you are still acting as ``dsmr`` user (if not then enter: " -"``sudo su - dsmr``)" +"Make sure you are still acting as ``dsmr`` user (if not then enter: ``sudo su - " +"dsmr``)" msgstr "" -"Zorg ervoor dat je nog steeds ingelogd bent als ``dsmr``-gebruiker (zo " -"niet, typ dan: ``sudo su - dsmr``)" +"Zorg ervoor dat je nog steeds ingelogd bent als ``dsmr``-gebruiker (zo niet, " +"typ dan: ``sudo su - dsmr``)" #: ../../installation.rst:163 msgid "Clone the repository::" @@ -409,12 +401,12 @@ msgstr "Kloon de repository::" #: ../../installation.rst:167 msgid "" -"This may take a few seconds. When finished, you should see a new folder " -"called ``dsmr-reader``, containing a clone of the Github repository." +"This may take a few seconds. When finished, you should see a new folder called " +"``dsmr-reader``, containing a clone of the Github repository." msgstr "" -"Dit kan enkele seconden in beslag nemen. Als het goed is zie je hierna " -"een map genaamd ``dsmr-reader``, met daarin een kopie van de repository " -"zoals die op Github staat." +"Dit kan enkele seconden in beslag nemen. Als het goed is zie je hierna een map " +"genaamd ``dsmr-reader``, met daarin een kopie van de repository zoals die op " +"Github staat." #: ../../installation.rst:171 msgid "6. Virtualenv" @@ -422,26 +414,24 @@ msgstr "6. Virtualenv" #: ../../installation.rst:173 msgid "" -"The dependencies our application uses are stored in a separate " -"environment, also called **VirtualEnv**." +"The dependencies our application uses are stored in a separate environment, " +"also called **VirtualEnv**." msgstr "" -"Alle (externe) afhankelijkheden worden opgeslagen in een aparte omgeving," -" ook wel **VirtualEnv** genoemd." +"Alle (externe) afhankelijkheden worden opgeslagen in een aparte omgeving, ook " +"wel **VirtualEnv** genoemd." #: ../../installation.rst:175 msgid "" -"Although it's just a folder inside our user's homedir, it's very " -"effective as it allows us to keep dependencies isolated or to run " -"different versions of the same package on the same machine. `More " -"information about this subject can be found here `_." +"Although it's just a folder inside our user's homedir, it's very effective as " +"it allows us to keep dependencies isolated or to run different versions of the " +"same package on the same machine. `More information about this subject can be " +"found here `_." msgstr "" -"Dit is allemaal erg handig, ondanks dat het feitelijk niets meer " -"voorstelt dan een aparte map binnen de homedir van onze gebruiker. " -"Hierdoor kunnen we namelijk meerdere versie van software op hetzelfde " -"systeem installeren, zonder dat dat elkaar bijt. Meer informatie hierover" -" `kan hier gevonden worden `_." +"Dit is allemaal erg handig, ondanks dat het feitelijk niets meer voorstelt dan " +"een aparte map binnen de homedir van onze gebruiker. Hierdoor kunnen we " +"namelijk meerdere versie van software op hetzelfde systeem installeren, zonder " +"dat dat elkaar bijt. Meer informatie hierover `kan hier gevonden worden `_." #: ../../installation.rst:180 msgid "Create folder for the virtualenv(s) of this user::" @@ -449,27 +439,26 @@ msgstr "Maak map aan voor de virtualenv(s) van deze gebruiker::" #: ../../installation.rst:184 msgid "" -"Create a new virtualenv, we usually use the same name for it as the " -"application or project. Note that it's important to specify **python3** " -"as the default interpreter::" +"Create a new virtualenv, we usually use the same name for it as the application " +"or project. Note that it's important to specify **python3** as the default " +"interpreter::" msgstr "" -"Maak een nieuwe virtualenv aan. Het is gebruikelijk om hiervoor dezelfde " -"naam te gebruiken als die van de applicatie of het project. Let op dat je" -" voor dit project aangeeft dat **python3** de gewenste standaardversie " -"voor Python is::" +"Maak een nieuwe virtualenv aan. Het is gebruikelijk om hiervoor dezelfde naam " +"te gebruiken als die van de applicatie of het project. Let op dat je voor dit " +"project aangeeft dat **python3** de gewenste standaardversie voor Python is::" #: ../../installation.rst:188 msgid "" -"Now *activate* the environment. It effectively directs all aliases for " -"software installed in the virtualenv to the binaries inside the " -"virtualenv. I.e. the Python binary inside ``/usr/bin/python`` won't be " -"used when the virtualenv is activated, but " -"``/home/dsmr/.virtualenvs/dsmrreader/bin/python`` will be instead." +"Now *activate* the environment. It effectively directs all aliases for software " +"installed in the virtualenv to the binaries inside the virtualenv. I.e. the " +"Python binary inside ``/usr/bin/python`` won't be used when the virtualenv is " +"activated, but ``/home/dsmr/.virtualenvs/dsmrreader/bin/python`` will be " +"instead." msgstr "" -"Tijd om de virtualenv te *activeren*. Hierdoor worden diverse aliassen " -"voor software binnen deze omgeving veranderd naar die van de virtualenv. " -"Voor bijvoorbeeld Python wordt niet meer ``/usr/bin/python`` gebruikt, " -"maar ``/home/dsmr/.virtualenvs/dsmrreader/bin/python``." +"Tijd om de virtualenv te *activeren*. Hierdoor worden diverse aliassen voor " +"software binnen deze omgeving veranderd naar die van de virtualenv. Voor " +"bijvoorbeeld Python wordt niet meer ``/usr/bin/python`` gebruikt, maar ``/home/" +"dsmr/.virtualenvs/dsmrreader/bin/python``." #: ../../installation.rst:191 msgid "Activate virtualenv & cd to project::" @@ -477,21 +466,20 @@ msgstr "Activeer virtualenv & wissel map naar project::" #: ../../installation.rst:197 msgid "" -"You might want to put the ``source " -"~/.virtualenvs/dsmrreader/bin/activate`` command above in the user's " -"``~/.bashrc`` (logout and login to test)." +"You might want to put the ``source ~/.virtualenvs/dsmrreader/bin/activate`` " +"command above in the user's ``~/.bashrc`` (logout and login to test)." msgstr "" -"Het is aan te raden om ``source ~/.virtualenvs/dsmrreader/bin/activate`` " -"op te nemen in de ``~/.bashrc`` van de gebruiker. Vervolgens kun je het " -"testen door uit- en in te loggen." +"Het is aan te raden om ``source ~/.virtualenvs/dsmrreader/bin/activate`` op te " +"nemen in de ``~/.bashrc`` van de gebruiker. Vervolgens kun je het testen door " +"uit- en in te loggen." #: ../../installation.rst:199 msgid "" -"I also advice to put the ``cd ~/dsmr-reader`` in there as well, which " -"will cd you directly inside the project folder on login." +"I also advice to put the ``cd ~/dsmr-reader`` in there as well, which will cd " +"you directly inside the project folder on login." msgstr "" -"Ik raad je aan om ``cd ~/dsmr-reader`` er ook in op te nemen, zodat je " -"telkens bij het inloggen als deze gebruiker in de juist map zit." +"Ik raad je aan om ``cd ~/dsmr-reader`` er ook in op te nemen, zodat je telkens " +"bij het inloggen als deze gebruiker in de juist map zit." #: ../../installation.rst:203 msgid "7. Application configuration & setup" @@ -499,35 +487,34 @@ msgstr "7. Applicatieconfiguratie" #: ../../installation.rst:204 msgid "" -"Earlier in this guide you had to choose for either **(A.) PostgreSQL** or" -" **(B.) MySQL/MariaDB**. Our application needs to know which backend used" -" in order to communicate with it." +"Earlier in this guide you had to choose for either **(A.) PostgreSQL** or " +"**(B.) MySQL/MariaDB**. Our application needs to know which backend used in " +"order to communicate with it." msgstr "" -"Eerder tijdens de installatie moest je kiezen voor ofwel **(A.) " -"PostgreSQL** ofwel **(B.) MySQL/MariaDB**. De applicatie moet zelf ook " -"weten met welke variant hij communiceert." +"Eerder tijdens de installatie moest je kiezen voor ofwel **(A.) PostgreSQL** " +"ofwel **(B.) MySQL/MariaDB**. De applicatie moet zelf ook weten met welke " +"variant hij communiceert." #: ../../installation.rst:206 msgid "" -"Therefor I created two default (Django-)settings files you can copy, one " -"for each backend. The application will also need the appropriate database" -" client, which is not installed by default. For this I also created two " -"ready-to-use requirements files, which will also install all other " -"dependencies required, such as the Django framework." +"Therefor I created two default (Django-)settings files you can copy, one for " +"each backend. The application will also need the appropriate database client, " +"which is not installed by default. For this I also created two ready-to-use " +"requirements files, which will also install all other dependencies required, " +"such as the Django framework." msgstr "" -"Daarom heb ik twee standaard (Django-)configuraties gemaakt die je gewoon" -" kan kopiëren. Daarnaast heeft elke database zijn eigen database-client " -"nodig. Daarvoor heb ik ook een tweetal requirements-bestanden gemaakt, " -"waar alles al in staat wat nodig is. Zoals bijvoorbeeld Django en de " -"databaseverbinding." +"Daarom heb ik twee standaard (Django-)configuraties gemaakt die je gewoon kan " +"kopiëren. Daarnaast heeft elke database zijn eigen database-client nodig. " +"Daarvoor heb ik ook een tweetal requirements-bestanden gemaakt, waar alles al " +"in staat wat nodig is. Zoals bijvoorbeeld Django en de databaseverbinding." #: ../../installation.rst:208 msgid "" -"The ``base.txt`` contains requirements which the application needs " -"anyway, no matter which backend you've choosen." +"The ``base.txt`` contains requirements which the application needs anyway, no " +"matter which backend you've choosen." msgstr "" -"Het bestand ``base.txt`` bevat alle afhankelijkheden die de applicatie " -"sowieso nodig heeft, ongeacht de databasekeuze die je gemaakt hebt." +"Het bestand ``base.txt`` bevat alle afhankelijkheden die de applicatie sowieso " +"nodig heeft, ongeacht de databasekeuze die je gemaakt hebt." #: ../../installation.rst:210 msgid "" @@ -535,10 +522,10 @@ msgid "" "depending on your Internet connection, RaspberryPi speed and resources " "(generally CPU) available. Nothing to worry about. :]" msgstr "" -"(!) let op: **De installatie van de volgende afhankelijkheden kan enige " -"tijd in beslag nemen**. Dit varieert en is sterk afhankelijk van de " -"snelheid van je Internet-verbinding en je raspberryPi. Je hoeft je dus " -"niet zorgen te maken wanneer dit lang lijkt te duren. :]" +"(!) let op: **De installatie van de volgende afhankelijkheden kan enige tijd in " +"beslag nemen**. Dit varieert en is sterk afhankelijk van de snelheid van je " +"Internet-verbinding en je raspberryPi. Je hoeft je dus niet zorgen te maken " +"wanneer dit lang lijkt te duren. :]" #: ../../installation.rst:214 msgid "Did you choose PostgreSQL? Then execute these two lines::" @@ -550,18 +537,18 @@ msgstr "Of heb je gekozen voor MySQL/MariaDB? Voer dan deze twee commando's uit: #: ../../installation.rst:229 msgid "" -"Did everything install without fatal errors? If either of the database " -"clients refuses to install due to missing files/configs, make sure you've" -" installed ``postgresql-server-dev-all`` (for **PostgreSQL**) or " -"``libmysqlclient-dev`` (for **MySQL**) earlier in the process, when you " -"installed the database server itself." +"Did everything install without fatal errors? If either of the database clients " +"refuses to install due to missing files/configs, make sure you've installed " +"``postgresql-server-dev-all`` (for **PostgreSQL**) or ``libmysqlclient-dev`` " +"(for **MySQL**) earlier in the process, when you installed the database server " +"itself." msgstr "" -"Zonder problemen alles kunnen installeren? Mocht een van de database " -"clients niet willen installeren wegens missende bestanden, controleer dan" -" of je eerder tijdens de installatie het volgende hebt uitgevoerd: als " -"het goed is heb je ``postgresql-server-dev-all`` (voor **PostgreSQL**) of" -" ``libmysqlclient-dev`` (voor **MySQL**) geïnstalleerd, tegelijkertijd " -"met de databaseserver. Die zijn namelijk hiervoor nodig." +"Zonder problemen alles kunnen installeren? Mocht een van de database clients " +"niet willen installeren wegens missende bestanden, controleer dan of je eerder " +"tijdens de installatie het volgende hebt uitgevoerd: als het goed is heb je " +"``postgresql-server-dev-all`` (voor **PostgreSQL**) of ``libmysqlclient-dev`` " +"(voor **MySQL**) geïnstalleerd, tegelijkertijd met de databaseserver. Die zijn " +"namelijk hiervoor nodig." #: ../../installation.rst:235 msgid "8. Bootstrapping" @@ -569,11 +556,11 @@ msgstr "8. Initialisatie" #: ../../installation.rst:236 msgid "" -"Now it's time to bootstrap the application and check whether all settings" -" are good and requirements are met." +"Now it's time to bootstrap the application and check whether all settings are " +"good and requirements are met." msgstr "" -"Tijd om te kijken of alles goed is ingesteld. We gaan de applicatie " -"proberen te initialiseren." +"Tijd om te kijken of alles goed is ingesteld. We gaan de applicatie proberen te " +"initialiseren." #: ../../installation.rst:238 msgid "Execute this to initialize the database we've created earlier::" @@ -581,14 +568,14 @@ msgstr "Voer dit uit om de database te initialiseren::" #: ../../installation.rst:242 msgid "" -"Prepare static files for webinterface. This will copy all static files to" -" the directory we created for Nginx earlier in the process. It allows us " -"to have Nginx serve static files outside our project/code root." +"Prepare static files for webinterface. This will copy all static files to the " +"directory we created for Nginx earlier in the process. It allows us to have " +"Nginx serve static files outside our project/code root." msgstr "" -"Prepareer statische bestanden voor de webinterface. Dit kopieert alle " -"statische bestanden in de map die we eerder tijdens de installatie voor " -"Nginx hebben aangemaakt. Het zorgt ervoor dat Nginx deze bestanden kan " -"hosten buiten de code-bestanden." +"Prepareer statische bestanden voor de webinterface. Dit kopieert alle statische " +"bestanden in de map die we eerder tijdens de installatie voor Nginx hebben " +"aangemaakt. Het zorgt ervoor dat Nginx deze bestanden kan hosten buiten de code-" +"bestanden." #: ../../installation.rst:245 msgid "Sync static files::" @@ -596,23 +583,23 @@ msgstr "Synchroniseer statische bestanden::" #: ../../installation.rst:249 msgid "" -"Create an application superuser. Django will prompt you for a password. " -"The credentials generated can be used to access the administration panel " -"inside the application. Alter username and email if you prefer other " -"credentials, but email is not (yet) used in the application anyway." +"Create an application superuser. Django will prompt you for a password. The " +"credentials generated can be used to access the administration panel inside the " +"application. Alter username and email if you prefer other credentials, but " +"email is not (yet) used in the application anyway." msgstr "" -"Maak een gebruiker aan voor binnen de applicatie. Django vraagt je om een" -" wachtwoord te kiezen. Met deze gegevens (standaard gebruikersnaam is " -"'admin') kun je het beheerderspaneel binnen de applicatie gebruiken." +"Maak een gebruiker aan voor binnen de applicatie. Django vraagt je om een " +"wachtwoord te kiezen. Met deze gegevens (standaard gebruikersnaam is 'admin') " +"kun je het beheerderspaneel binnen de applicatie gebruiken." #: ../../installation.rst:252 msgid "" -"Since you have shell access you may reset your user's password at any " -"time (in case you forget it). Just enter this for a password reset: " -"``./manage.py changepassword admin``" +"Since you have shell access you may reset your user's password at any time (in " +"case you forget it). Just enter this for a password reset: ``./manage.py " +"changepassword admin``" msgstr "" -"Wachtwoord ooit vergeten? Via de command line kun je je wachtwoord " -"hiermee aanpassen: ``./manage.py changepassword admin``" +"Wachtwoord ooit vergeten? Via de command line kun je je wachtwoord hiermee " +"aanpassen: ``./manage.py changepassword admin``" #: ../../installation.rst:254 msgid "Create user inside application::" @@ -624,37 +611,34 @@ msgstr "9. Webserver/Nginx (deel 2)" #: ../../installation.rst:261 msgid "" -"Go back to ``root``/``sudo-user`` to config webserver (press ``CTRL + D``" -" once)." +"Go back to ``root``/``sudo-user`` to config webserver (press ``CTRL + D`` once)." msgstr "" -"Ga terug naar de ``root``/``sudo-gebruiker`` om de webserver in te " -"stellen (druk eenmalig op ``CTRL + D``)." +"Ga terug naar de ``root``/``sudo-gebruiker`` om de webserver in te stellen " +"(druk eenmalig op ``CTRL + D``)." #: ../../installation.rst:263 msgid "" -"**OPTIONAL**: Remove the default Nginx vhost (*only when you do not use " -"it yourself*)::" +"**OPTIONAL**: Remove the default Nginx vhost (*only when you do not use it " +"yourself*)::" msgstr "" -"**OPTIONEEL**: Verwijder de standaard vhost van Nginx wanneer je deze " -"niet zelf gebruikt::" +"**OPTIONEEL**: Verwijder de standaard vhost van Nginx wanneer je deze niet zelf " +"gebruikt::" #: ../../installation.rst:267 msgid "" -"Copy application vhost, *it will listen to any hostname* (wildcard), but " -"you may change that if you feel like you need to. It won't affect the " -"application anyway::" +"Copy application vhost, *it will listen to any hostname* (wildcard), but you " +"may change that if you feel like you need to. It won't affect the application " +"anyway::" msgstr "" "Kopieer de vhost voor de applicatie. Deze luistert standaard naar *elke " -"hostname* (wildcard), maar dat is natuurlijk naar eigen wens aan te " -"passen.::" +"hostname* (wildcard), maar dat is natuurlijk naar eigen wens aan te passen.::" #: ../../installation.rst:271 msgid "" -"Let Nginx verify vhost syntax and reload Nginx when ``configtest`` " -"passes::" +"Let Nginx verify vhost syntax and reload Nginx when ``configtest`` passes::" msgstr "" -"Laat Nginx controleren of je geen typefouten hebt gemaakt en herlaad " -"Nginx vervolgens wanneer de ``configtest`` lukt::" +"Laat Nginx controleren of je geen typefouten hebt gemaakt en herlaad Nginx " +"vervolgens wanneer de ``configtest`` lukt::" #: ../../installation.rst:280 msgid "10. Supervisor" @@ -662,21 +646,19 @@ msgstr "10. Supervisor" #: ../../installation.rst:281 msgid "" -"Now we configure `Supervisor `_, which is used " -"to run our application's web interface and background jobs used. It's " -"also configured to bring the entire application up again after a shutdown" -" or reboot." +"Now we configure `Supervisor `_, which is used to run " +"our application's web interface and background jobs used. It's also configured " +"to bring the entire application up again after a shutdown or reboot." msgstr "" -"We gaan nu `Supervisor `_ configureren, die " -"gebruikt wordt om de applicatie en achtergrondprocessen te draaien. " -"Tevens zorgt Supervisor ervoor dat deze processen bij het (opnieuw) " -"opstarten automatisch draaien." +"We gaan nu `Supervisor `_ configureren, die gebruikt " +"wordt om de applicatie en achtergrondprocessen te draaien. Tevens zorgt " +"Supervisor ervoor dat deze processen bij het (opnieuw) opstarten automatisch " +"draaien." #: ../../installation.rst:284 msgid "Each job has it's own configuration file, so make sure to copy them all::" msgstr "" -"Elk process heeft zijn eigen configuratiebestand, dus kopieer ze " -"allemaal::" +"Elk process heeft zijn eigen configuratiebestand, dus kopieer ze allemaal::" #: ../../installation.rst:288 msgid "Login to ``supervisorctl`` management console::" @@ -687,18 +669,17 @@ msgid "" "Enter these commands (listed after the ``>``). It will ask Supervisor to " "recheck its config directory and use/reload the files::" msgstr "" -"Voer de volgende commando's in (degene na de ``>``). Dit zorgt ervoor dat" -" Supervisor zijn eigen configuratie opnieuw controleert en toepast::" +"Voer de volgende commando's in (degene na de ``>``). Dit zorgt ervoor dat " +"Supervisor zijn eigen configuratie opnieuw controleert en toepast::" #: ../../installation.rst:298 msgid "" -"Three processes should be started or running. Make sure they don't end up" -" in ``ERROR`` or ``BACKOFF`` state, so refresh with '``status``' a few " -"times." +"Three processes should be started or running. Make sure they don't end up in " +"``ERROR`` or ``BACKOFF`` state, so refresh with '``status``' a few times." msgstr "" "Er draaien als het goed is altijd **drie** processen. Kijk goed of ze " -"uiteindelijk niet in ``ERROR`` of ``BACKOFF`` status terecht zijn " -"gekomen. Je kunt het overzicht verversen door ``status`` te typen." +"uiteindelijk niet in ``ERROR`` of ``BACKOFF`` status terecht zijn gekomen. Je " +"kunt het overzicht verversen door ``status`` te typen." #: ../../installation.rst:300 msgid "When still in ``supervisorctl``'s console, type::" @@ -710,39 +691,38 @@ msgstr "Voorbeeld van wanneer alles naar behoren draait::" #: ../../installation.rst:310 msgid "" -"Want to check whether the datalogger works? Just tail it's log in " -"supervisor with::" +"Want to check whether the datalogger works? Just tail it's log in supervisor " +"with::" msgstr "" "Wil je controleren of de datalogger zijn werk goed doet? Bekijk dan het " "logbestand in supervisor met::" #: ../../installation.rst:314 msgid "" -"Please note that due to Supervisor's output buffering **it might take a " -"minute or two before you see any output**. You should see similar output " -"as the ``cu``-command printed earlier in the installation process." +"Please note that due to Supervisor's output buffering **it might take a minute " +"or two before you see any output**. You should see similar output as the ``cu``-" +"command printed earlier in the installation process." msgstr "" -"Doordat Supervisor de **logbestanden buffert** kan het een minuut of twee" -" duren voordat je daadwerkelijk wat terugziet. Uiteindelijk zou je " -"ongeveer dezelfde lap tekst moeten zien als toen we handmatig gemeten " -"hebben met het ``cu``-programma." +"Doordat Supervisor de **logbestanden buffert** kan het een minuut of twee duren " +"voordat je daadwerkelijk wat terugziet. Uiteindelijk zou je ongeveer dezelfde " +"lap tekst moeten zien als toen we handmatig gemeten hebben met het ``cu``-" +"programma." #: ../../installation.rst:316 msgid "" -"Want to quit supervisor? ``CTRL + C`` to stop tail and ``CTRL + D`` once " -"to exit supervisor command line." +"Want to quit supervisor? ``CTRL + C`` to stop tail and ``CTRL + D`` once to " +"exit supervisor command line." msgstr "" -"Wil je uit supervisor? Druk dan op ``CTRL + C`` om de logfile niet meer " -"te bekijken en vervolgens op ``CTRL + D`` om uit supervisor te gaan." +"Wil je uit supervisor? Druk dan op ``CTRL + C`` om de logfile niet meer te " +"bekijken en vervolgens op ``CTRL + D`` om uit supervisor te gaan." #: ../../installation.rst:319 msgid "" -"You now should have everything up and running! We're almost done, but " -"only need to check a just few more things in the next chapters." +"You now should have everything up and running! We're almost done, but only need " +"to check a just few more things in the next chapters." msgstr "" -"Alles zou nu moeten werken! We zijn bijna klaar, op een paar checks na in" -" het volgende hoofdstuk." +"Alles zou nu moeten werken! We zijn bijna klaar, op een paar checks na in het " +"volgende hoofdstuk." #~ msgid "Import example prices::" #~ msgstr "Importeer voorbeeldprijzen::" - diff --git a/docs/locale/nl/LC_MESSAGES/licence.mo b/docs/locale/nl/LC_MESSAGES/licence.mo index a3955b7f11b50d426df0219d85fff89948d88f47..5c185822bf84b1fba212a9fd97e3426f7235e5f2 100644 GIT binary patch delta 181 zcmZpl%=C{r<(?4BR0bem0%92;)&XKxAhrQw5C{NbVIU3!;$}t$hEyOe0>m$YY#;&y zkX|_O$xKeoOHNhLaQ6#Ua1Zb)GuE6e=o-ppqHAcOU}R)vU^%(KRgv9X!N}0c)O_*` l*A2|2C25nr-E5V867$ka6Vp?z6!LPo7{CUVWTKeF004JRB7*<` literal 35207 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 0: - continue - - # Find the a reading of the current consumption hour. Doesn't matter which one. - source_reading = DsmrReading.objects.filter( - # Offset is one hour later due to start of hour. - extra_device_timestamp=current_consumption.read_at + timezone.timedelta(hours=1) - )[0] - - # Find previous reading to calculate diff. - previous_consumption = GasConsumption.objects.get( - read_at=current_consumption.read_at - timezone.timedelta(hours=1) - ) - actual_diff = source_reading.extra_device_delivered - previous_consumption.delivered - - current_consumption.currently_delivered = actual_diff - current_consumption.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_consumption', '0003_realign_gas_read_at'), - ('dsmr_datalogger', '0003_split_dsmr_reading_fields'), - ] - - operations = [ - migrations.RunPython(recalculate_gas_consumption) - ] diff --git a/dsmr_datalogger/migrations/0001_initial.py b/dsmr_datalogger/migrations/0001_initial.py deleted file mode 100644 index 433a49844..000000000 --- a/dsmr_datalogger/migrations/0001_initial.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='DataloggerSettings', - fields=[ - ('id', models.AutoField(serialize=False, primary_key=True, auto_created=True, verbose_name='ID')), - ('track', models.BooleanField(default=True, verbose_name='Poll P1 port', help_text='Whether we should track the P1 port on your smartmeter. Almost every feature inside this project requires this to be enabled. However, it might be disabled temporarily due to technical reasons, such as data migrations.')), - ('baud_rate', models.IntegerField(default=115200, verbose_name='BAUD rate', help_text='BAUD rate used for Smartmeter. 115200 for DSMR v4, 9600 for older versions')), - ('com_port', models.CharField(default='/dev/ttyUSB0', max_length=196, verbose_name='COM-port', help_text='COM-port connected to Smartmeter.')), - ], - options={ - 'default_permissions': (), - 'verbose_name': 'Datalogger configuration', - }, - ), - migrations.CreateModel( - name='DsmrReading', - fields=[ - ('id', models.AutoField(serialize=False, primary_key=True, auto_created=True, verbose_name='ID')), - ('timestamp', models.DateTimeField()), - ('electricity_delivered_1', models.DecimalField(max_digits=9, decimal_places=3, help_text='Meter Reading electricity delivered to client (low tariff) in 0,001 kWh')), - ('electricity_returned_1', models.DecimalField(max_digits=9, decimal_places=3, help_text='Meter Reading electricity delivered by client (low tariff) in 0,001 kWh')), - ('electricity_delivered_2', models.DecimalField(max_digits=9, decimal_places=3, help_text='Meter Reading electricity delivered to client (normal tariff) in 0,001 kWh')), - ('electricity_returned_2', models.DecimalField(max_digits=9, decimal_places=3, help_text='Meter Reading electricity delivered by client (normal tariff) in 0,001 kWh')), - ('electricity_tariff', models.IntegerField(help_text='Tariff indicator electricity. The tariff indicator can be used to switch tariff dependent loads e.g boilers. This is responsibility of the P1 user. Note: Tariff code 1 is used for low tariff and tariff code 2 is used for normal tariff.')), - ('electricity_currently_delivered', models.DecimalField(max_digits=9, decimal_places=3, help_text='Actual electricity power delivered (+P) in 1 Watt resolution')), - ('electricity_currently_returned', models.DecimalField(max_digits=9, decimal_places=3, help_text='Actual electricity power received (-P) in 1 Watt resolution')), - ('power_failure_count', models.IntegerField(help_text='Number of power failures in any phases')), - ('long_power_failure_count', models.IntegerField(help_text='Number of long power failures in any phase')), - ('voltage_sag_count_l1', models.IntegerField(help_text='Number of voltage sags/dips in phase L1')), - ('voltage_sag_count_l2', models.IntegerField(help_text='Number of voltage sags/dips in phase L2 (polyphase meters only)')), - ('voltage_sag_count_l3', models.IntegerField(help_text='Number of voltage sags/dips in phase L3 (polyphase meters only)')), - ('voltage_swell_count_l1', models.IntegerField(help_text='Number of voltage swells in phase L1')), - ('voltage_swell_count_l2', models.IntegerField(help_text='Number of voltage swells in phase L2 (polyphase meters only)')), - ('voltage_swell_count_l3', models.IntegerField(help_text='Number of voltage swells in phase L3 (polyphase meters only)')), - ('extra_device_timestamp', models.DateTimeField(help_text='Last hourly reading timestamp')), - ('extra_device_delivered', models.DecimalField(max_digits=9, decimal_places=3, help_text='Last hourly value delivered to client')), - ('processed', models.BooleanField(default=False, db_index=True, help_text='Whether this reading has been processed for merging into statistics')), - ], - options={ - 'default_permissions': (), - 'ordering': ['timestamp'], - }, - ), - ] diff --git a/dsmr_datalogger/migrations/0001_squashed_0005_optional_gas_readings.py b/dsmr_datalogger/migrations/0001_squashed_0005_optional_gas_readings.py index 8e4729c42..f74a1d5b5 100644 --- a/dsmr_datalogger/migrations/0001_squashed_0005_optional_gas_readings.py +++ b/dsmr_datalogger/migrations/0001_squashed_0005_optional_gas_readings.py @@ -15,8 +15,6 @@ def initialize_meter_statistics(apps, schema_editor): class Migration(migrations.Migration): - replaces = [('dsmr_datalogger', '0001_initial'), ('dsmr_datalogger', '0002_add_meter_statistics'), ('dsmr_datalogger', '0003_split_dsmr_reading_fields'), ('dsmr_datalogger', '0004_multiple_dsmr_version_support'), ('dsmr_datalogger', '0005_optional_gas_readings')] - dependencies = [ ] diff --git a/dsmr_datalogger/migrations/0002_add_meter_statistics.py b/dsmr_datalogger/migrations/0002_add_meter_statistics.py deleted file mode 100644 index 544a6983b..000000000 --- a/dsmr_datalogger/migrations/0002_add_meter_statistics.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_datalogger', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='MeterStatistics', - fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)), - ('timestamp', models.DateTimeField(help_text='Timestamp indicating when the reading was taken, according to the meter', auto_now=True)), - ('electricity_tariff', models.IntegerField(help_text='Tariff indicator electricity. The tariff indicator can be used to switch tariff dependent loads e.g boilers. This is responsibility of the P1 user. Note: Tariff code 1 is used for low tariff and tariff code 2 is used for normal tariff.', default=None, null=True)), - ('power_failure_count', models.IntegerField(help_text='Number of power failures in any phases', default=None, null=True)), - ('long_power_failure_count', models.IntegerField(help_text='Number of long power failures in any phase', default=None, null=True)), - ('voltage_sag_count_l1', models.IntegerField(help_text='Number of voltage sags/dips in phase L1', default=None, null=True)), - ('voltage_sag_count_l2', models.IntegerField(help_text='Number of voltage sags/dips in phase L2 (polyphase meters only)', default=None, null=True)), - ('voltage_sag_count_l3', models.IntegerField(help_text='Number of voltage sags/dips in phase L3 (polyphase meters only)', default=None, null=True)), - ('voltage_swell_count_l1', models.IntegerField(help_text='Number of voltage swells in phase L1', default=None, null=True)), - ('voltage_swell_count_l2', models.IntegerField(help_text='Number of voltage swells in phase L2 (polyphase meters only)', default=None, null=True)), - ('voltage_swell_count_l3', models.IntegerField(help_text='Number of voltage swells in phase L3 (polyphase meters only)', default=None, null=True)), - ], - options={ - 'verbose_name': 'DSMR Meter statistics', - 'default_permissions': (), - }, - ), - migrations.AddField( - model_name='dataloggersettings', - name='track_meter_statistics', - field=models.BooleanField(default=True, verbose_name='Track meter statistics', help_text='Whether we should track any extra statistics sent by the meter, such as the number of power failures of voltage dips. Data is not required for core features.'), - ), - ] diff --git a/dsmr_datalogger/migrations/0003_split_dsmr_reading_fields.py b/dsmr_datalogger/migrations/0003_split_dsmr_reading_fields.py deleted file mode 100644 index bd9aa2acc..000000000 --- a/dsmr_datalogger/migrations/0003_split_dsmr_reading_fields.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -def initial_meter_statistics(apps, schema_editor): - """ Guarantees there is at least one instance in the database, which will be updated later. """ - MeterStatistics = apps.get_model('dsmr_datalogger', 'MeterStatistics') - DsmrReading = apps.get_model('dsmr_datalogger', 'DsmrReading') - - # We can't (and shouldn't) use Solo here. - stats = MeterStatistics.objects.create() # All fields are NULL in database, by design. - assert MeterStatistics.objects.exists() - - try: - # Just use the latest DSMR reading, if any. - latest_reading = DsmrReading.objects.all().order_by('-timestamp')[0] - except IndexError: - return - - stats.electricity_tariff = latest_reading.electricity_tariff - stats.power_failure_count = latest_reading.power_failure_count - stats.long_power_failure_count = latest_reading.long_power_failure_count - stats.voltage_sag_count_l1 = latest_reading.voltage_sag_count_l1 - stats.voltage_sag_count_l2 = latest_reading.voltage_sag_count_l2 - stats.voltage_sag_count_l3 = latest_reading.voltage_sag_count_l3 - stats.voltage_swell_count_l1 = latest_reading.voltage_swell_count_l1 - stats.voltage_swell_count_l2 = latest_reading.voltage_swell_count_l2 - stats.voltage_swell_count_l3 = latest_reading.voltage_swell_count_l3 - stats.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_datalogger', '0002_add_meter_statistics'), - # Just to make sure any pending data migrations and statistics generation are completed. - ('dsmr_stats', '0015_trend_statistics_model'), - ] - - operations = [ - migrations.RunPython(initial_meter_statistics), - migrations.AlterModelOptions( - name='dsmrreading', - options={'verbose_name': 'DSMR reading', 'default_permissions': (), 'ordering': ['timestamp']}, - ), - migrations.RemoveField( - model_name='dsmrreading', - name='electricity_tariff', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='long_power_failure_count', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='power_failure_count', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='voltage_sag_count_l1', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='voltage_sag_count_l2', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='voltage_sag_count_l3', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='voltage_swell_count_l1', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='voltage_swell_count_l2', - ), - migrations.RemoveField( - model_name='dsmrreading', - name='voltage_swell_count_l3', - ), - migrations.AlterField( - model_name='dsmrreading', - name='timestamp', - field=models.DateTimeField(help_text='Timestamp indicating when the reading was taken, according to the meter'), - ), - ] diff --git a/dsmr_datalogger/migrations/0004_multiple_dsmr_version_support.py b/dsmr_datalogger/migrations/0004_multiple_dsmr_version_support.py deleted file mode 100644 index 9f5060186..000000000 --- a/dsmr_datalogger/migrations/0004_multiple_dsmr_version_support.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_datalogger', '0003_split_dsmr_reading_fields'), - ] - - operations = [ - migrations.RemoveField( - model_name='dataloggersettings', - name='baud_rate', - ), - migrations.AddField( - model_name='dataloggersettings', - name='dsmr_version', - field=models.IntegerField(choices=[(4, 'DSMR version 4'), (3, 'DSMR version 2/3')], help_text='The DSMR version your meter supports. Version should be printed on meter.', default=4, verbose_name='DSMR version'), - ), - ] diff --git a/dsmr_datalogger/migrations/0005_optional_gas_readings.py b/dsmr_datalogger/migrations/0005_optional_gas_readings.py deleted file mode 100644 index 6e28f87d4..000000000 --- a/dsmr_datalogger/migrations/0005_optional_gas_readings.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_datalogger', '0004_multiple_dsmr_version_support'), - ] - - operations = [ - migrations.AlterField( - model_name='dsmrreading', - name='extra_device_delivered', - field=models.DecimalField(null=True, default=None, help_text='Last hourly value delivered to client', decimal_places=3, max_digits=9), - ), - migrations.AlterField( - model_name='dsmrreading', - name='extra_device_timestamp', - field=models.DateTimeField(null=True, default=None, help_text='Last hourly reading timestamp'), - ), - ] diff --git a/dsmr_datalogger/services.py b/dsmr_datalogger/services.py index d2d0fcead..604566c71 100644 --- a/dsmr_datalogger/services.py +++ b/dsmr_datalogger/services.py @@ -92,13 +92,13 @@ def telegram_to_reading(data): # noqa: C901 """ def _get_reading_fields(): - reading_fields = DsmrReading._meta.get_all_field_names() + reading_fields = [x.name for x in DsmrReading._meta.get_fields()] reading_fields.remove('id') reading_fields.remove('processed') return reading_fields def _get_statistics_fields(): - reading_fields = MeterStatistics._meta.get_all_field_names() + reading_fields = [x.name for x in MeterStatistics._meta.get_fields()] reading_fields.remove('id') return reading_fields diff --git a/dsmr_frontend/templatetags/model_meta_info.py b/dsmr_frontend/templatetags/model_meta_info.py deleted file mode 100644 index 9302d8c3a..000000000 --- a/dsmr_frontend/templatetags/model_meta_info.py +++ /dev/null @@ -1,7 +0,0 @@ -from django import template -register = template.Library() - - -@register.simple_tag -def model_meta_info(instance, field, meta): - return getattr(instance._meta.get_field(field), meta).title().capitalize() diff --git a/dsmr_frontend/tests/test_webinterface.py b/dsmr_frontend/tests/test_webinterface.py index 91cf8ce63..08f6717a3 100644 --- a/dsmr_frontend/tests/test_webinterface.py +++ b/dsmr_frontend/tests/test_webinterface.py @@ -42,7 +42,7 @@ def test_admin(self): ) self.assertEqual(response.status_code, 302) self.assertEqual( - response['Location'], 'http://testserver/admin/login/?next=/admin/' + response['Location'], '/admin/login/?next=/admin/' ) @mock.patch('dsmr_frontend.views.dashboard.Dashboard.get_context_data') @@ -250,7 +250,7 @@ def test_export(self): response = self.client.get(view_url) self.assertEqual(response.status_code, 302) self.assertEqual( - response['Location'], 'http://testserver/admin/login/?next={}'.format(view_url) + response['Location'], 'admin/login/?next={}'.format(view_url) ) # Login and retest @@ -273,7 +273,7 @@ def test_export_as_csv(self): response = self.client.post(view_url) self.assertEqual(response.status_code, 302) self.assertEqual( - response['Location'], 'http://testserver/export/admin/login/?next={}'.format(view_url) + response['Location'], 'admin/login/?next={}'.format(view_url) ) # Login and retest, without post data. @@ -282,7 +282,7 @@ def test_export_as_csv(self): self.assertEqual(response.status_code, 302) self.assertEqual( # Invalid form redirects to previous page. - response['Location'], 'http://testserver{}'.format( + response['Location'], '{}'.format( reverse('{}:export'.format(self.namespace)) ) ) @@ -307,7 +307,7 @@ def test_notification_read(self): response = self.client.post(view_url) self.assertEqual(response.status_code, 302) self.assertEqual( - response['Location'], 'http://testserver/admin/login/?next={}'.format(view_url) + response['Location'], 'admin/login/?next={}'.format(view_url) ) # Login and retest. diff --git a/dsmr_frontend/urls.py b/dsmr_frontend/urls.py index 4f6e0a331..3c648d605 100644 --- a/dsmr_frontend/urls.py +++ b/dsmr_frontend/urls.py @@ -1,5 +1,4 @@ from django.views.decorators.cache import cache_page -from django.contrib.auth.decorators import login_required from django.conf import settings from django.conf.urls import url @@ -33,8 +32,8 @@ url(r'^feedback-redirect$', FeedbackRedirect.as_view(), name='feedback-redirect'), # Views requiring authentication. - url(r'^export$', login_required(Export.as_view()), name='export'), - url(r'^export/csv$', login_required(ExportAsCsv.as_view()), name='export-as-csv'), + url(r'^export$', Export.as_view(), name='export'), + url(r'^export/csv$', ExportAsCsv.as_view(), name='export-as-csv'), - url(r'^notification-read$', login_required(NotificationRead.as_view()), name='notification-read'), + url(r'^notification-read$', NotificationRead.as_view(), name='notification-read'), ] diff --git a/dsmr_frontend/views/export.py b/dsmr_frontend/views/export.py index c1fc340a2..e5e69ab43 100644 --- a/dsmr_frontend/views/export.py +++ b/dsmr_frontend/views/export.py @@ -1,10 +1,11 @@ import datetime import csv +from django.contrib.auth.mixins import LoginRequiredMixin +from django.http.response import StreamingHttpResponse from django.views.generic.base import TemplateView from django.views.generic.edit import BaseFormView from django.core.urlresolvers import reverse -from django.http.response import StreamingHttpResponse from django.utils import timezone, formats from django.shortcuts import redirect @@ -14,7 +15,7 @@ from decimal import Decimal -class Export(TemplateView): +class Export(LoginRequiredMixin, TemplateView): template_name = 'dsmr_frontend/export.html' def get_context_data(self, **kwargs): @@ -35,7 +36,7 @@ def get_context_data(self, **kwargs): return context_data -class ExportAsCsv(BaseFormView): +class ExportAsCsv(LoginRequiredMixin, BaseFormView): """ Exports the selected data in CSV format. """ form_class = ExportAsCsvForm diff --git a/dsmr_frontend/views/notification.py b/dsmr_frontend/views/notification.py index b0c2a8e60..fbc113121 100644 --- a/dsmr_frontend/views/notification.py +++ b/dsmr_frontend/views/notification.py @@ -1,10 +1,11 @@ +from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic.base import RedirectView from django.core.urlresolvers import reverse_lazy from dsmr_frontend.models.message import Notification -class NotificationRead(RedirectView): +class NotificationRead(LoginRequiredMixin, RedirectView): """ View for marking notifications as read. """ permanent = False url = reverse_lazy('frontend:dashboard') diff --git a/dsmr_stats/migrations/0001_initial.py b/dsmr_stats/migrations/0001_initial.py deleted file mode 100644 index 42c847a93..000000000 --- a/dsmr_stats/migrations/0001_initial.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='DsmrReading', - fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), - ('timestamp', models.DateTimeField()), - ('electricity_delivered_1', models.DecimalField(decimal_places=3, max_digits=9, help_text='Meter Reading electricity delivered to client (low tariff) in 0,001 kWh')), - ('electricity_returned_1', models.DecimalField(decimal_places=3, max_digits=9, help_text='Meter Reading electricity delivered by client (low tariff) in 0,001 kWh')), - ('electricity_delivered_2', models.DecimalField(decimal_places=3, max_digits=9, help_text='Meter Reading electricity delivered to client (normal tariff) in 0,001 kWh')), - ('electricity_returned_2', models.DecimalField(decimal_places=3, max_digits=9, help_text='Meter Reading electricity delivered by client (normal tariff) in 0,001 kWh')), - ('electricity_tariff', models.IntegerField(help_text='Tariff indicator electricity. The tariff indicator can be used to switch tariff dependent loads e.g boilers. This is responsibility of the P1 user. Note: Tariff code 1 is used for low tariff and tariff code 2 is used for normal tariff.')), - ('electricity_currently_delivered', models.DecimalField(decimal_places=3, max_digits=9, help_text='Actual electricity power delivered (+P) in 1 Watt resolution')), - ('electricity_currently_returned', models.DecimalField(decimal_places=3, max_digits=9, help_text='Actual electricity power received (-P) in 1 Watt resolution')), - ('power_failure_count', models.IntegerField(help_text='Number of power failures in any phases')), - ('long_power_failure_count', models.IntegerField(help_text='Number of long power failures in any phase')), - ('voltage_sag_count_l1', models.IntegerField(help_text='Number of voltage sags/dips in phase L1')), - ('voltage_sag_count_l2', models.IntegerField(help_text='Number of voltage sags/dips in phase L2 (polyphase meters only)')), - ('voltage_sag_count_l3', models.IntegerField(help_text='Number of voltage sags/dips in phase L3 (polyphase meters only)')), - ('voltage_swell_count_l1', models.IntegerField(help_text='Number of voltage swells in phase L1')), - ('voltage_swell_count_l2', models.IntegerField(help_text='Number of voltage swells in phase L2 (polyphase meters only)')), - ('voltage_swell_count_l3', models.IntegerField(help_text='Number of voltage swells in phase L3 (polyphase meters only)')), - ('extra_device_timestamp', models.DateTimeField(help_text='Last hourly reading timestamp')), - ('extra_device_delivered', models.DecimalField(decimal_places=3, max_digits=9, help_text='Last hourly value delivered to client')), - ], - ), - ] diff --git a/dsmr_stats/migrations/0001_renamed_migrations.py b/dsmr_stats/migrations/0001_renamed_migrations.py deleted file mode 100644 index 964c27a10..000000000 --- a/dsmr_stats/migrations/0001_renamed_migrations.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -def check_renamed_migrations(*args, **kwargs): - RENAMED_MIGRATIONS = { - '0002_auto_20151113_1936': '0002_consumption_models', - '0003_auto_20151113_2012': '0003_consumption_date_fields', - '0004_auto_20151118_2120': '0004_energysupplierprice_models', - } - - migrations_to_rename = migrations.recorder.MigrationRecorder.Migration.objects.filter( - app='dsmr_stats', name__in=RENAMED_MIGRATIONS.keys() - ) - - for current_migration in migrations_to_rename: - current_migration.name = RENAMED_MIGRATIONS[current_migration.name] - current_migration.save(update_fields=['name']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0001_initial'), - ] - - operations = [ - migrations.RunPython(check_renamed_migrations), - ] diff --git a/dsmr_stats/migrations/0001_squashed_0016_drop_stats_settings.py b/dsmr_stats/migrations/0001_squashed_0016_drop_stats_settings.py index 6d14c983d..a47211beb 100644 --- a/dsmr_stats/migrations/0001_squashed_0016_drop_stats_settings.py +++ b/dsmr_stats/migrations/0001_squashed_0016_drop_stats_settings.py @@ -6,8 +6,6 @@ class Migration(migrations.Migration): - replaces = [('dsmr_stats', '0001_initial'), ('dsmr_stats', '0001_renamed_migrations'), ('dsmr_stats', '0002_consumption_models'), ('dsmr_stats', '0003_consumption_date_fields'), ('dsmr_stats', '0004_energysupplierprice_models'), ('dsmr_stats', '0005_energysupplierprice_description'), ('dsmr_stats', '0006_energysupplierprice_defaults'), ('dsmr_stats', '0007_daily_user_notes'), ('dsmr_stats', '0008_statssettings_model'), ('dsmr_stats', '0009_reverse_dashboard_graphs_setting'), ('dsmr_stats', '0010_split_models_among_apps'), ('dsmr_stats', '0011_delete_moved_models'), ('dsmr_stats', '0012_meta'), ('dsmr_stats', '0013_drop_old_statistics_model'), ('dsmr_stats', '0014_settings_model'), ('dsmr_stats', '0015_trend_statistics_model'), ('dsmr_stats', '0016_drop_stats_settings')] - dependencies = [ ('dsmr_weather', '0001_weather_models'), ('dsmr_frontend', '0001_initial'), diff --git a/dsmr_stats/migrations/0002_consumption_models.py b/dsmr_stats/migrations/0002_consumption_models.py deleted file mode 100644 index 16c0c93f7..000000000 --- a/dsmr_stats/migrations/0002_consumption_models.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0001_initial'), - ('dsmr_stats', '0001_renamed_migrations'), - ] - - operations = [ - migrations.CreateModel( - name='ElectricityConsumption', - fields=[ - ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), - ('read_at', models.DateTimeField()), - ('delivered_1', models.DecimalField(help_text='Meter Reading electricity delivered to client (low tariff) in 0,001 kWh', decimal_places=3, max_digits=9)), - ('returned_1', models.DecimalField(help_text='Meter Reading electricity delivered by client (low tariff) in 0,001 kWh', decimal_places=3, max_digits=9)), - ('delivered_2', models.DecimalField(help_text='Meter Reading electricity delivered to client (normal tariff) in 0,001 kWh', decimal_places=3, max_digits=9)), - ('returned_2', models.DecimalField(help_text='Meter Reading electricity delivered by client (normal tariff) in 0,001 kWh', decimal_places=3, max_digits=9)), - ('tariff', models.IntegerField(help_text='Tariff indicator electricity. The tariff indicator can be used to switch tariff dependent loads e.g boilers. This is responsibility of the P1 user. Note: Tariff code 1 is used for low tariff and tariff code 2 is used for normal tariff.')), - ('currently_delivered', models.DecimalField(help_text='Actual electricity power delivered (+P) in 1 Watt resolution', decimal_places=3, max_digits=9)), - ('currently_returned', models.DecimalField(help_text='Actual electricity power received (-P) in 1 Watt resolution', decimal_places=3, max_digits=9)), - ], - ), - migrations.CreateModel( - name='ElectricityStatistics', - fields=[ - ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), - ('day', models.DateField()), - ('power_failure_count', models.IntegerField(help_text='Number of power failures in any phases')), - ('long_power_failure_count', models.IntegerField(help_text='Number of long power failures in any phase')), - ('voltage_sag_count_l1', models.IntegerField(help_text='Number of voltage sags/dips in phase L1')), - ('voltage_sag_count_l2', models.IntegerField(help_text='Number of voltage sags/dips in phase L2 (polyphase meters only)')), - ('voltage_sag_count_l3', models.IntegerField(help_text='Number of voltage sags/dips in phase L3 (polyphase meters only)')), - ('voltage_swell_count_l1', models.IntegerField(help_text='Number of voltage swells in phase L1')), - ('voltage_swell_count_l2', models.IntegerField(help_text='Number of voltage swells in phase L2 (polyphase meters only)')), - ('voltage_swell_count_l3', models.IntegerField(help_text='Number of voltage swells in phase L3 (polyphase meters only)')), - ], - ), - migrations.CreateModel( - name='GasConsumption', - fields=[ - ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), - ('read_at', models.DateTimeField()), - ('delivered', models.DecimalField(help_text='Last hourly value delivered to client', decimal_places=3, max_digits=9)), - ('currently_delivered', models.DecimalField(help_text='Actual value delivered to client, since the last hour', decimal_places=3, max_digits=9)), - ], - ), - migrations.AddField( - model_name='dsmrreading', - name='processed', - field=models.BooleanField(help_text='Whether this reading has been processed for individual splitting', db_index=True, default=False), - ), - ] diff --git a/dsmr_stats/migrations/0003_consumption_date_fields.py b/dsmr_stats/migrations/0003_consumption_date_fields.py deleted file mode 100644 index bc996d93a..000000000 --- a/dsmr_stats/migrations/0003_consumption_date_fields.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0001_renamed_migrations'), - ('dsmr_stats', '0002_consumption_models'), - ] - - operations = [ - migrations.AlterModelOptions( - name='dsmrreading', - options={'ordering': ['timestamp']}, - ), - migrations.AlterField( - model_name='electricityconsumption', - name='read_at', - field=models.DateTimeField(unique=True), - ), - migrations.AlterField( - model_name='electricitystatistics', - name='day', - field=models.DateField(unique=True), - ), - migrations.AlterField( - model_name='gasconsumption', - name='read_at', - field=models.DateTimeField(unique=True), - ), - ] diff --git a/dsmr_stats/migrations/0004_energysupplierprice_models.py b/dsmr_stats/migrations/0004_energysupplierprice_models.py deleted file mode 100644 index f23a0a308..000000000 --- a/dsmr_stats/migrations/0004_energysupplierprice_models.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0001_renamed_migrations'), - ('dsmr_stats', '0003_consumption_date_fields'), - ] - - operations = [ - migrations.CreateModel( - name='EnergySupplierPrice', - fields=[ - ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), - ('start', models.DateField()), - ('end', models.DateField(null=True, blank=True)), - ('electricity_1_price', models.DecimalField(decimal_places=5, max_digits=11)), - ('electricity_2_price', models.DecimalField(decimal_places=5, max_digits=11)), - ('gas_price', models.DecimalField(decimal_places=5, max_digits=11)), - ], - ), - migrations.AlterUniqueTogether( - name='energysupplierprice', - unique_together=set([('start', 'end')]), - ), - ] diff --git a/dsmr_stats/migrations/0005_energysupplierprice_description.py b/dsmr_stats/migrations/0005_energysupplierprice_description.py deleted file mode 100644 index 679561eb1..000000000 --- a/dsmr_stats/migrations/0005_energysupplierprice_description.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0004_energysupplierprice_models'), - ] - - operations = [ - migrations.AddField( - model_name='energysupplierprice', - name='description', - field=models.CharField(help_text='For your own reference, i.e. your supplier name', max_length=255, null=True, blank=True), - ), - ] diff --git a/dsmr_stats/migrations/0006_energysupplierprice_defaults.py b/dsmr_stats/migrations/0006_energysupplierprice_defaults.py deleted file mode 100644 index 0f5380df3..000000000 --- a/dsmr_stats/migrations/0006_energysupplierprice_defaults.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0005_energysupplierprice_description'), - ] - - operations = [ - migrations.AlterField( - model_name='energysupplierprice', - name='electricity_1_price', - field=models.DecimalField(default=0, decimal_places=5, max_digits=11), - ), - migrations.AlterField( - model_name='energysupplierprice', - name='electricity_2_price', - field=models.DecimalField(default=0, decimal_places=5, max_digits=11), - ), - migrations.AlterField( - model_name='energysupplierprice', - name='gas_price', - field=models.DecimalField(default=0, decimal_places=5, max_digits=11), - ), - ] diff --git a/dsmr_stats/migrations/0007_daily_user_notes.py b/dsmr_stats/migrations/0007_daily_user_notes.py deleted file mode 100644 index 77dee620d..000000000 --- a/dsmr_stats/migrations/0007_daily_user_notes.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0006_energysupplierprice_defaults'), - ] - - operations = [ - migrations.CreateModel( - name='Note', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('day', models.DateField()), - ('description', models.CharField(max_length=256)), - ], - options={ - 'verbose_name': 'Note', - 'verbose_name_plural': 'Notes', - }, - ), - ] diff --git a/dsmr_stats/migrations/0008_statssettings_model.py b/dsmr_stats/migrations/0008_statssettings_model.py deleted file mode 100644 index a70f409ed..000000000 --- a/dsmr_stats/migrations/0008_statssettings_model.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0007_daily_user_notes'), - ] - - operations = [ - migrations.CreateModel( - name='StatsSettings', - fields=[ - ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), - ('compactor_grouping_type', models.IntegerField(default=2, choices=[(1, 'By reading (every 10 seconds)'), (2, 'By minute')], help_text='Electricity readings are read every 10 seconds. We can group those for you.', verbose_name='Compactor grouping type')), - ], - options={ - 'verbose_name': 'Stats configuration', - }, - ), - ] diff --git a/dsmr_stats/migrations/0009_reverse_dashboard_graphs_setting.py b/dsmr_stats/migrations/0009_reverse_dashboard_graphs_setting.py deleted file mode 100644 index 1a9d3b7da..000000000 --- a/dsmr_stats/migrations/0009_reverse_dashboard_graphs_setting.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0008_statssettings_model'), - ] - - operations = [ - migrations.AddField( - model_name='statssettings', - name='reverse_dashboard_graphs', - field=models.BooleanField(verbose_name='Reverse dashboard graphs', default=False, help_text='Whether graphs are rendered with an reversed X-axis.'), - ), - ] diff --git a/dsmr_stats/migrations/0010_split_models_among_apps.py b/dsmr_stats/migrations/0010_split_models_among_apps.py deleted file mode 100644 index f6a1f0a81..000000000 --- a/dsmr_stats/migrations/0010_split_models_among_apps.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals -from io import StringIO - -from django.db import migrations -from django.core.management import call_command - - -def migrate_settings(apps, schema_editor): - """ NOTE: This migration is executed NON ATOMIC, to reflect datalogger changes instantly. """ - # Create singleton settings record by calling solo(). - consumption_settings, _ = apps.get_model('dsmr_consumption', 'ConsumptionSettings').objects.get_or_create() - frontend_settings, _ = apps.get_model('dsmr_frontend', 'FrontendSettings').objects.get_or_create() - apps.get_model('dsmr_datalogger', 'DataloggerSettings').objects.get_or_create() # No legacy data here. - - # Migrate all old settings among the new ones. If we have any (tests have none). - StatsSettings = apps.get_model('dsmr_stats', 'StatsSettings') - - if not StatsSettings.objects.exists(): - # New instances above will rely on their model defaults. - return - - old_stat_settings = StatsSettings.objects.get() - - consumption_settings.compactor_grouping_type = old_stat_settings.compactor_grouping_type - consumption_settings.save() - - frontend_settings.reverse_dashboard_graphs = old_stat_settings.reverse_dashboard_graphs - frontend_settings.save() - - -def halt_datalogger(apps, schema_editor): - # Now disable tracking to prevent database activity while copying data. The management command - # job running in the background will skip fetching data on the next run. - datalogger_settings = apps.get_model('dsmr_datalogger', 'DataloggerSettings').objects.get() - datalogger_settings.track = False - datalogger_settings.save() - - -def migrate_data(apps, schema_editor): - MODEL_MAPPING = { - # Old model: New model. - apps.get_model('dsmr_stats', 'DsmrReading'): apps.get_model('dsmr_datalogger', 'DsmrReading'), - apps.get_model('dsmr_stats', 'ElectricityConsumption'): apps.get_model('dsmr_consumption', 'ElectricityConsumption'), - apps.get_model('dsmr_stats', 'GasConsumption'): apps.get_model('dsmr_consumption', 'GasConsumption'), - apps.get_model('dsmr_stats', 'EnergySupplierPrice'): apps.get_model('dsmr_consumption', 'EnergySupplierPrice'), - } - - COPY_QUERY = 'INSERT INTO %(new_table)s SELECT * FROM %(old_table)s;' - - for OldModel, NewModel in MODEL_MAPPING.items(): - old_model_count = OldModel.objects.count() - - if not old_model_count: - continue - - schema_editor.execute( - COPY_QUERY % { - "old_table": OldModel._meta.db_table, - "new_table": NewModel._meta.db_table, - } - ) - - new_model_count = NewModel.objects.count() - - if old_model_count != new_model_count: - raise AssertionError( - 'Data migration count mismatch: {} != {}'.format(old_model_count, new_model_count) - ) - - # The sequences will be outdated, so fix them. - with StringIO() as stdout_buffer: - # Django has builtin support for SQL generation. - call_command('sqlsequencereset', 'dsmr_consumption', stdout=stdout_buffer, no_color=True) - call_command('sqlsequencereset', 'dsmr_frontend', stdout=stdout_buffer, no_color=True) - call_command('sqlsequencereset', 'dsmr_datalogger', stdout=stdout_buffer, no_color=True) - - stdout_buffer.seek(0) - sql = stdout_buffer.read() - - # Only applies to postgres, but not MySQL. - if sql: - schema_editor.execute(sql) - - -def resume_datalogger(apps, schema_editor): - """ NOTE: This migration is executed NON ATOMIC, to reflect datalogger changes instantly. """ - datalogger_settings = apps.get_model('dsmr_datalogger', 'DataloggerSettings').objects.get() - datalogger_settings.track = True - datalogger_settings.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0009_reverse_dashboard_graphs_setting'), - - # This will ensure both the new tables exists and we can reference those models. - ('dsmr_consumption', '0001_initial'), - ('dsmr_datalogger', '0002_add_meter_statistics'), - ('dsmr_frontend', '0001_initial'), - ] - - operations = [ - migrations.RunPython(migrate_settings), - migrations.RunPython(halt_datalogger, atomic=False), - migrations.RunPython(migrate_data), - migrations.RunPython(resume_datalogger, atomic=False), - ] diff --git a/dsmr_stats/migrations/0011_delete_moved_models.py b/dsmr_stats/migrations/0011_delete_moved_models.py deleted file mode 100644 index 4bd03df18..000000000 --- a/dsmr_stats/migrations/0011_delete_moved_models.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0010_split_models_among_apps'), - ] - - operations = [ - migrations.DeleteModel( - name='DsmrReading', - ), - migrations.DeleteModel( - name='ElectricityConsumption', - ), - migrations.DeleteModel( - name='EnergySupplierPrice', - ), - migrations.DeleteModel( - name='GasConsumption', - ), - migrations.DeleteModel( - name='StatsSettings', - ), - ] diff --git a/dsmr_stats/migrations/0012_meta.py b/dsmr_stats/migrations/0012_meta.py deleted file mode 100644 index 176c78b40..000000000 --- a/dsmr_stats/migrations/0012_meta.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0011_delete_moved_models'), - ] - - operations = [ - migrations.AlterModelOptions( - name='electricitystatistics', - options={'default_permissions': ()}, - ), - migrations.AlterModelOptions( - name='note', - options={'verbose_name_plural': 'Notes', 'verbose_name': 'Note', 'default_permissions': ()}, - ), - migrations.AlterField( - model_name='note', - name='day', - field=models.DateField(verbose_name='Day'), - ), - migrations.AlterField( - model_name='note', - name='description', - field=models.CharField(verbose_name='Description', max_length=256), - ), - ] diff --git a/dsmr_stats/migrations/0013_drop_old_statistics_model.py b/dsmr_stats/migrations/0013_drop_old_statistics_model.py deleted file mode 100644 index 390c51f6b..000000000 --- a/dsmr_stats/migrations/0013_drop_old_statistics_model.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0012_meta'), - ] - - operations = [ - # The model will be recreated, but this makes sure the data is dropped first as well. - migrations.DeleteModel( - name='ElectricityStatistics', - ), - ] diff --git a/dsmr_stats/migrations/0014_settings_model.py b/dsmr_stats/migrations/0014_settings_model.py deleted file mode 100644 index 6bbca9fa1..000000000 --- a/dsmr_stats/migrations/0014_settings_model.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0013_drop_old_statistics_model'), - ] - - operations = [ - migrations.CreateModel( - name='StatsSettings', - fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), - ('track', models.BooleanField(default=True, verbose_name='Track trends', help_text='Whether we should track trends by storing daily consumption summaries.')), - ], - options={ - 'verbose_name': 'Trends & statistics configuration', - 'default_permissions': (), - }, - ), - ] diff --git a/dsmr_stats/migrations/0015_trend_statistics_model.py b/dsmr_stats/migrations/0015_trend_statistics_model.py deleted file mode 100644 index 42a65b7b2..000000000 --- a/dsmr_stats/migrations/0015_trend_statistics_model.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - -import dsmr_stats.services - - -def recalculate_statistics(apps, schema_editor): - """ The previous migration purged al legacy statistics, so make sure to regenerate them. """ - ElectricityConsumption = apps.get_model('dsmr_consumption', 'ElectricityConsumption') - ec_dates = ElectricityConsumption.objects.all().values_list('read_at', flat=True) - - if not ec_dates.exists(): - # Empty projects shouldn't care. - return - - first_consumption = ec_dates[0].date() - latest_consumption = ec_dates[ec_dates.count() - 1].date() - days_diff = (latest_consumption - first_consumption).days - - for _ in range(1, days_diff + 1): - # Just call analyze for each day. If we missed a day or so, the backend will regenerate it. - dsmr_stats.services.analyze() - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0014_settings_model'), - ('dsmr_weather', '0001_weather_models'), - ] - - operations = [ - migrations.CreateModel( - name='DayStatistics', - fields=[ - ('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')), - ('day', models.DateField(unique=True)), - ('total_cost', models.DecimalField(decimal_places=2, max_digits=8)), - ('electricity1', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity2', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity1_returned', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity2_returned', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity1_cost', models.DecimalField(decimal_places=2, max_digits=8)), - ('electricity2_cost', models.DecimalField(decimal_places=2, max_digits=8)), - ('gas', models.DecimalField(default=None, decimal_places=3, null=True, max_digits=9)), - ('gas_cost', models.DecimalField(default=None, decimal_places=2, null=True, max_digits=8)), - ('average_temperature', models.DecimalField(default=None, decimal_places=1, null=True, max_digits=4)), - ], - options={ - 'default_permissions': (), - }, - ), - migrations.CreateModel( - name='HourStatistics', - fields=[ - ('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), - ('hour_start', models.DateTimeField(unique=True)), - ('electricity1', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity2', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity1_returned', models.DecimalField(decimal_places=3, max_digits=9)), - ('electricity2_returned', models.DecimalField(decimal_places=3, max_digits=9)), - ('gas', models.DecimalField(default=None, decimal_places=3, null=True, max_digits=9)), - ], - options={ - 'default_permissions': (), - }, - ), - migrations.RunPython(recalculate_statistics), - ] diff --git a/dsmr_stats/migrations/0016_drop_stats_settings.py b/dsmr_stats/migrations/0016_drop_stats_settings.py deleted file mode 100644 index 388ffc990..000000000 --- a/dsmr_stats/migrations/0016_drop_stats_settings.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dsmr_stats', '0015_trend_statistics_model'), - ] - - operations = [ - migrations.DeleteModel( - name='StatsSettings', - ), - ] diff --git a/dsmrreader/__init__.py b/dsmrreader/__init__.py index cdd335b98..f3304ddd0 100644 --- a/dsmrreader/__init__.py +++ b/dsmrreader/__init__.py @@ -17,6 +17,6 @@ from django.utils.version import get_version -VERSION = (1, 5, 0, 'beta', 1) +VERSION = (1, 5, 0, 'beta', 2) __version__ = get_version(VERSION) diff --git a/dsmrreader/config/base.py b/dsmrreader/config/base.py index c53c9b8d8..a984c89c6 100644 --- a/dsmrreader/config/base.py +++ b/dsmrreader/config/base.py @@ -36,10 +36,6 @@ # Application definition INSTALLED_APPS = ( - # Must be inserted BEFORE contrib because it's an admin skin. - # django-flat-theme is officially merged in Django 1.9, however this is pre-1.9 (due to LTS). - 'flat', - # Django internals. 'django.contrib.admin', 'django.contrib.auth', @@ -137,8 +133,7 @@ # is fine (and still fast) for RaspberryPi, preserving memory usage. CACHES = { 'default': { - 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', - 'LOCATION': '/var/tmp/django_cache', + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'TIMEOUT': 60, 'OPTIONS': { 'MAX_ENTRIES': 100 diff --git a/dsmrreader/config/test_postgresql.py b/dsmrreader/config/test_postgresql.py index 831d4e1fe..6b7201d4c 100644 --- a/dsmrreader/config/test_postgresql.py +++ b/dsmrreader/config/test_postgresql.py @@ -5,7 +5,7 @@ # Use for TESTING only: ALTER USER dsmrreader CREATEDB; DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Sub configs should set this. + 'ENGINE': 'django.db.backends.postgresql', # Sub configs should set this. 'NAME': 'dsmrreader', # Will be adjusted to 'test_*' by Django. 'USER': 'dsmrreader', 'PASSWORD': 'dsmrreader', diff --git a/dsmrreader/config/travis/postgresql.py b/dsmrreader/config/travis/postgresql.py index 796e61427..af6b50d64 100644 --- a/dsmrreader/config/travis/postgresql.py +++ b/dsmrreader/config/travis/postgresql.py @@ -4,7 +4,7 @@ # https://docs.travis-ci.com/user/database-setup/#PostgreSQL DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'dsmrreader', 'USER': 'postgres', 'PASSWORD': '', diff --git a/dsmrreader/locales/nl/LC_MESSAGES/django.mo b/dsmrreader/locales/nl/LC_MESSAGES/django.mo index 9f88bc62fbb6c23b0d4617bf8466f00a22f43be0..151a98a0bb7c0e34a03c3b4fd0951bcb29d6829a 100644 GIT binary patch delta 22 dcmeC3%+x!XX#;xzyQPAWp_PHzX1;)WO8`%K26zAf delta 22 dcmeC3%+x!XX#;xzyM=<0v6X@GX1;)WO8`%826g}d diff --git a/dsmrreader/locales/nl/LC_MESSAGES/django.po b/dsmrreader/locales/nl/LC_MESSAGES/django.po index 84637f279..58564d73f 100644 --- a/dsmrreader/locales/nl/LC_MESSAGES/django.po +++ b/dsmrreader/locales/nl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DSMR Reader\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-28 23:03+0100\n" +"POT-Creation-Date: 2016-11-29 21:06+0100\n" "PO-Revision-Date: 2016-11-27 17:57+0100\n" "Last-Translator: Dennis Siemensma \n" "Language-Team: Dennis Siemensma \n" diff --git a/dsmrreader/provisioning/django/development.py b/dsmrreader/provisioning/django/development.py index be35e3f21..2dd1b1d8b 100644 --- a/dsmrreader/provisioning/django/development.py +++ b/dsmrreader/provisioning/django/development.py @@ -3,7 +3,7 @@ DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'ENGINE': 'django.db.backends.postgresql', # 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dsmrreader', # Database name. 'USER': 'dsmrreader', diff --git a/dsmrreader/provisioning/django/postgresql.py b/dsmrreader/provisioning/django/postgresql.py index e0f443c3c..a3c39ff7c 100644 --- a/dsmrreader/provisioning/django/postgresql.py +++ b/dsmrreader/provisioning/django/postgresql.py @@ -3,7 +3,7 @@ DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'dsmrreader', # Database name. 'USER': 'dsmrreader', 'PASSWORD': 'dsmrreader', diff --git a/dsmrreader/provisioning/requirements/base.txt b/dsmrreader/provisioning/requirements/base.txt index 5f1c9e487..cef50c66f 100644 --- a/dsmrreader/provisioning/requirements/base.txt +++ b/dsmrreader/provisioning/requirements/base.txt @@ -1,11 +1,10 @@ -Django==1.8.16 +django==1.10.3 django-colorfield==0.1.10 django-debug-toolbar==1.6 -django-flat-theme==1.1.4 django-solo==1.1.2 dropbox==7.1.1 gunicorn==19.6 pyserial==3.2.1 python-dateutil==2.6.0 -raven==5.31.0 +raven==5.32.0 pytz==2016.7 diff --git a/dsmrreader/provisioning/requirements/dev.txt b/dsmrreader/provisioning/requirements/dev.txt index b244aa2b3..e97046bce 100644 --- a/dsmrreader/provisioning/requirements/dev.txt +++ b/dsmrreader/provisioning/requirements/dev.txt @@ -1,4 +1,4 @@ -Sphinx==1.4.8 +sphinx-1.4.9 sphinx-autobuild==0.6.0 sphinx-intl==0.9.9 sphinx-rtd-theme==0.1.9 diff --git a/dsmrreader/provisioning/requirements/test.txt b/dsmrreader/provisioning/requirements/test.txt index 18c1cf31c..89a57248c 100644 --- a/dsmrreader/provisioning/requirements/test.txt +++ b/dsmrreader/provisioning/requirements/test.txt @@ -1,4 +1,5 @@ -polib==1.0.7 -pylama==7.2.3 +polib==1.0.8 +pylama==7.3.0 pytest-cov==2.4.0 pytest-django==3.1.2 +pytest-xdist==1.15.0 diff --git a/quick-test.sh b/quick-test.sh index c62ec65f4..93b900faa 100755 --- a/quick-test.sh +++ b/quick-test.sh @@ -5,5 +5,5 @@ echo "--- Running Pylama for code audit..." pylama echo "" -echo "--- Testing with SQLite..." -pytest --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_sqlite +echo "--- Testing with SQLite (4 processes)..." +pytest --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_sqlite -n 4 diff --git a/test-all.sh b/test-all.sh index a11ee9f70..75e4778a3 100755 --- a/test-all.sh +++ b/test-all.sh @@ -5,15 +5,15 @@ echo "--- Running Pylama for code audit..." pylama echo "" -echo "--- Testing with SQLite..." -pytest --pylama --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_sqlite +echo "--- Testing with SQLite (4 processes)..." +pytest --pylama --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_sqlite -n 4 echo "" -echo "--- Testing with PostgreSQL..." -pytest --pylama --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_postgresql +echo "--- Testing with PostgreSQL (4 processes)..." +pytest --pylama --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_postgresql -n 4 echo "" -echo "--- Testing with MySQL..." +echo "--- Testing with MySQL (1 proces due to concurrency limitations)..." pytest --pylama --cov --cov-report=html:coverage_report/html --cov-report=term --ds=dsmrreader.config.test_mysql