From c3186e0bc5fc2db564963e0d962a7e207ba3cc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 18 Nov 2018 15:06:25 +0100 Subject: [PATCH] general: move logging parameters to its own model (#27162) (and remove the NOTSET level during the migration) --- .../0002_remove_actesweb_log_level.py | 19 +++++++ .../0003_remove_airquality_log_level.py | 19 +++++++ .../migrations/0002_auto_20181118_0807.py | 19 +++++++ .../0004_remove_arcgis_log_level.py | 19 +++++++ .../0002_remove_arpegeecp_log_level.py | 19 +++++++ .../0002_remove_resource_log_level.py | 19 +++++++ .../0013_remove_baseadresse_log_level.py | 19 +++++++ .../migrations/0006_remove_bdp_log_level.py | 19 +++++++ .../migrations/0008_auto_20181118_0807.py | 19 +++++++ .../0003_remove_cityweb_log_level.py | 19 +++++++ .../0002_remove_clicrdv_log_level.py | 19 +++++++ .../migrations/0003_auto_20181118_0807.py | 19 +++++++ .../migrations/0013_auto_20181118_0807.py | 19 +++++++ .../0009_remove_genericfamily_log_level.py | 19 +++++++ .../migrations/0003_remove_feed_log_level.py | 19 +++++++ .../migrations/0006_remove_gdc_log_level.py | 19 +++++++ .../0005_remove_jsondatastore_log_level.py | 19 +++++++ .../migrations/0007_auto_20181118_0807.py | 19 +++++++ .../migrations/0003_remove_okina_log_level.py | 19 +++++++ .../migrations/0006_auto_20181118_0807.py | 19 +++++++ .../0006_remove_orangesmsgateway_log_level.py | 19 +++++++ .../ovh/migrations/0007_auto_20181118_0807.py | 19 +++++++ .../migrations/0007_auto_20181118_0807.py | 19 +++++++ .../0006_remove_pastell_log_level.py | 19 +++++++ .../migrations/0005_remove_solis_log_level.py | 19 +++++++ .../base/migrations/0007_loggingparameters.py | 26 +++++++++ .../migrations/0008_auto_20181118_0717.py | 33 +++++++++++ .../migrations/0009_auto_20181118_0807.py | 20 +++++++ passerelle/base/models.py | 55 ++++++++++++++----- passerelle/base/templatetags/passerelle.py | 3 + passerelle/base/urls.py | 7 ++- passerelle/base/views.py | 36 +++++++++++- .../0005_remove_tlmcom_log_level.py | 19 +++++++ .../manage/logging_parameters_form.html | 17 ++++++ .../passerelle/manage/service_view.html | 3 + tests/test_generic_endpoint.py | 6 +- tests/test_import_export.py | 11 ++++ tests/test_manager.py | 17 ++++++ tests/test_proxylogger.py | 4 +- 39 files changed, 710 insertions(+), 22 deletions(-) create mode 100644 passerelle/apps/actesweb/migrations/0002_remove_actesweb_log_level.py create mode 100644 passerelle/apps/airquality/migrations/0003_remove_airquality_log_level.py create mode 100644 passerelle/apps/api_particulier/migrations/0002_auto_20181118_0807.py create mode 100644 passerelle/apps/arcgis/migrations/0004_remove_arcgis_log_level.py create mode 100644 passerelle/apps/arpege_ecp/migrations/0002_remove_arpegeecp_log_level.py create mode 100644 passerelle/apps/atos_genesys/migrations/0002_remove_resource_log_level.py create mode 100644 passerelle/apps/base_adresse/migrations/0013_remove_baseadresse_log_level.py create mode 100644 passerelle/apps/bdp/migrations/0006_remove_bdp_log_level.py create mode 100644 passerelle/apps/choosit/migrations/0008_auto_20181118_0807.py create mode 100644 passerelle/apps/cityweb/migrations/0003_remove_cityweb_log_level.py create mode 100644 passerelle/apps/clicrdv/migrations/0002_remove_clicrdv_log_level.py create mode 100644 passerelle/apps/cmis/migrations/0003_auto_20181118_0807.py create mode 100644 passerelle/apps/csvdatasource/migrations/0013_auto_20181118_0807.py create mode 100644 passerelle/apps/family/migrations/0009_remove_genericfamily_log_level.py create mode 100644 passerelle/apps/feeds/migrations/0003_remove_feed_log_level.py create mode 100644 passerelle/apps/gdc/migrations/0006_remove_gdc_log_level.py create mode 100644 passerelle/apps/jsondatastore/migrations/0005_remove_jsondatastore_log_level.py create mode 100644 passerelle/apps/mobyt/migrations/0007_auto_20181118_0807.py create mode 100644 passerelle/apps/okina/migrations/0003_remove_okina_log_level.py create mode 100644 passerelle/apps/opengis/migrations/0006_auto_20181118_0807.py create mode 100644 passerelle/apps/orange/migrations/0006_remove_orangesmsgateway_log_level.py create mode 100644 passerelle/apps/ovh/migrations/0007_auto_20181118_0807.py create mode 100644 passerelle/apps/oxyd/migrations/0007_auto_20181118_0807.py create mode 100644 passerelle/apps/pastell/migrations/0006_remove_pastell_log_level.py create mode 100644 passerelle/apps/solis/migrations/0005_remove_solis_log_level.py create mode 100644 passerelle/base/migrations/0007_loggingparameters.py create mode 100644 passerelle/base/migrations/0008_auto_20181118_0717.py create mode 100644 passerelle/base/migrations/0009_auto_20181118_0807.py create mode 100644 passerelle/contrib/tlmcom/migrations/0005_remove_tlmcom_log_level.py create mode 100644 passerelle/templates/passerelle/manage/logging_parameters_form.html diff --git a/passerelle/apps/actesweb/migrations/0002_remove_actesweb_log_level.py b/passerelle/apps/actesweb/migrations/0002_remove_actesweb_log_level.py new file mode 100644 index 0000000..3d60c4a --- /dev/null +++ b/passerelle/apps/actesweb/migrations/0002_remove_actesweb_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('actesweb', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='actesweb', + name='log_level', + ), + ] diff --git a/passerelle/apps/airquality/migrations/0003_remove_airquality_log_level.py b/passerelle/apps/airquality/migrations/0003_remove_airquality_log_level.py new file mode 100644 index 0000000..8b5c9c0 --- /dev/null +++ b/passerelle/apps/airquality/migrations/0003_remove_airquality_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('airquality', '0002_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='airquality', + name='log_level', + ), + ] diff --git a/passerelle/apps/api_particulier/migrations/0002_auto_20181118_0807.py b/passerelle/apps/api_particulier/migrations/0002_auto_20181118_0807.py new file mode 100644 index 0000000..f28cad0 --- /dev/null +++ b/passerelle/apps/api_particulier/migrations/0002_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api_particulier', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='apiparticulier', + name='log_level', + ), + ] diff --git a/passerelle/apps/arcgis/migrations/0004_remove_arcgis_log_level.py b/passerelle/apps/arcgis/migrations/0004_remove_arcgis_log_level.py new file mode 100644 index 0000000..a01f28b --- /dev/null +++ b/passerelle/apps/arcgis/migrations/0004_remove_arcgis_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('arcgis', '0003_auto_20181102_1550'), + ] + + operations = [ + migrations.RemoveField( + model_name='arcgis', + name='log_level', + ), + ] diff --git a/passerelle/apps/arpege_ecp/migrations/0002_remove_arpegeecp_log_level.py b/passerelle/apps/arpege_ecp/migrations/0002_remove_arpegeecp_log_level.py new file mode 100644 index 0000000..a0e3d2f --- /dev/null +++ b/passerelle/apps/arpege_ecp/migrations/0002_remove_arpegeecp_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('arpege_ecp', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='arpegeecp', + name='log_level', + ), + ] diff --git a/passerelle/apps/atos_genesys/migrations/0002_remove_resource_log_level.py b/passerelle/apps/atos_genesys/migrations/0002_remove_resource_log_level.py new file mode 100644 index 0000000..e24dd99 --- /dev/null +++ b/passerelle/apps/atos_genesys/migrations/0002_remove_resource_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('atos_genesys', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='resource', + name='log_level', + ), + ] diff --git a/passerelle/apps/base_adresse/migrations/0013_remove_baseadresse_log_level.py b/passerelle/apps/base_adresse/migrations/0013_remove_baseadresse_log_level.py new file mode 100644 index 0000000..a65d5d2 --- /dev/null +++ b/passerelle/apps/base_adresse/migrations/0013_remove_baseadresse_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base_adresse', '0012_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='baseadresse', + name='log_level', + ), + ] diff --git a/passerelle/apps/bdp/migrations/0006_remove_bdp_log_level.py b/passerelle/apps/bdp/migrations/0006_remove_bdp_log_level.py new file mode 100644 index 0000000..6aa7e29 --- /dev/null +++ b/passerelle/apps/bdp/migrations/0006_remove_bdp_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bdp', '0005_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='bdp', + name='log_level', + ), + ] diff --git a/passerelle/apps/choosit/migrations/0008_auto_20181118_0807.py b/passerelle/apps/choosit/migrations/0008_auto_20181118_0807.py new file mode 100644 index 0000000..b1d4124 --- /dev/null +++ b/passerelle/apps/choosit/migrations/0008_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('choosit', '0007_auto_20180814_1048'), + ] + + operations = [ + migrations.RemoveField( + model_name='choositsmsgateway', + name='log_level', + ), + ] diff --git a/passerelle/apps/cityweb/migrations/0003_remove_cityweb_log_level.py b/passerelle/apps/cityweb/migrations/0003_remove_cityweb_log_level.py new file mode 100644 index 0000000..a31775e --- /dev/null +++ b/passerelle/apps/cityweb/migrations/0003_remove_cityweb_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cityweb', '0002_auto_20170920_1002'), + ] + + operations = [ + migrations.RemoveField( + model_name='cityweb', + name='log_level', + ), + ] diff --git a/passerelle/apps/clicrdv/migrations/0002_remove_clicrdv_log_level.py b/passerelle/apps/clicrdv/migrations/0002_remove_clicrdv_log_level.py new file mode 100644 index 0000000..fc396b0 --- /dev/null +++ b/passerelle/apps/clicrdv/migrations/0002_remove_clicrdv_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('clicrdv', '0001_squashed_0006_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='clicrdv', + name=b'log_level', + ), + ] diff --git a/passerelle/apps/cmis/migrations/0003_auto_20181118_0807.py b/passerelle/apps/cmis/migrations/0003_auto_20181118_0807.py new file mode 100644 index 0000000..7d65b89 --- /dev/null +++ b/passerelle/apps/cmis/migrations/0003_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cmis', '0002_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='cmisconnector', + name='log_level', + ), + ] diff --git a/passerelle/apps/csvdatasource/migrations/0013_auto_20181118_0807.py b/passerelle/apps/csvdatasource/migrations/0013_auto_20181118_0807.py new file mode 100644 index 0000000..a879a03 --- /dev/null +++ b/passerelle/apps/csvdatasource/migrations/0013_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('csvdatasource', '0012_auto_20180912_0215'), + ] + + operations = [ + migrations.RemoveField( + model_name='csvdatasource', + name='log_level', + ), + ] diff --git a/passerelle/apps/family/migrations/0009_remove_genericfamily_log_level.py b/passerelle/apps/family/migrations/0009_remove_genericfamily_log_level.py new file mode 100644 index 0000000..61a7dc0 --- /dev/null +++ b/passerelle/apps/family/migrations/0009_remove_genericfamily_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('family', '0008_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='genericfamily', + name='log_level', + ), + ] diff --git a/passerelle/apps/feeds/migrations/0003_remove_feed_log_level.py b/passerelle/apps/feeds/migrations/0003_remove_feed_log_level.py new file mode 100644 index 0000000..2a42c96 --- /dev/null +++ b/passerelle/apps/feeds/migrations/0003_remove_feed_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('feeds', '0002_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='feed', + name='log_level', + ), + ] diff --git a/passerelle/apps/gdc/migrations/0006_remove_gdc_log_level.py b/passerelle/apps/gdc/migrations/0006_remove_gdc_log_level.py new file mode 100644 index 0000000..f7905e6 --- /dev/null +++ b/passerelle/apps/gdc/migrations/0006_remove_gdc_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('gdc', '0005_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='gdc', + name='log_level', + ), + ] diff --git a/passerelle/apps/jsondatastore/migrations/0005_remove_jsondatastore_log_level.py b/passerelle/apps/jsondatastore/migrations/0005_remove_jsondatastore_log_level.py new file mode 100644 index 0000000..ccce575 --- /dev/null +++ b/passerelle/apps/jsondatastore/migrations/0005_remove_jsondatastore_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('jsondatastore', '0004_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='jsondatastore', + name='log_level', + ), + ] diff --git a/passerelle/apps/mobyt/migrations/0007_auto_20181118_0807.py b/passerelle/apps/mobyt/migrations/0007_auto_20181118_0807.py new file mode 100644 index 0000000..dc57118 --- /dev/null +++ b/passerelle/apps/mobyt/migrations/0007_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mobyt', '0006_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='mobytsmsgateway', + name='log_level', + ), + ] diff --git a/passerelle/apps/okina/migrations/0003_remove_okina_log_level.py b/passerelle/apps/okina/migrations/0003_remove_okina_log_level.py new file mode 100644 index 0000000..d123865 --- /dev/null +++ b/passerelle/apps/okina/migrations/0003_remove_okina_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('okina', '0002_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='okina', + name='log_level', + ), + ] diff --git a/passerelle/apps/opengis/migrations/0006_auto_20181118_0807.py b/passerelle/apps/opengis/migrations/0006_auto_20181118_0807.py new file mode 100644 index 0000000..7cf4409 --- /dev/null +++ b/passerelle/apps/opengis/migrations/0006_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('opengis', '0005_auto_20180227_1531'), + ] + + operations = [ + migrations.RemoveField( + model_name='opengis', + name='log_level', + ), + ] diff --git a/passerelle/apps/orange/migrations/0006_remove_orangesmsgateway_log_level.py b/passerelle/apps/orange/migrations/0006_remove_orangesmsgateway_log_level.py new file mode 100644 index 0000000..6be3385 --- /dev/null +++ b/passerelle/apps/orange/migrations/0006_remove_orangesmsgateway_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('orange', '0005_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='orangesmsgateway', + name='log_level', + ), + ] diff --git a/passerelle/apps/ovh/migrations/0007_auto_20181118_0807.py b/passerelle/apps/ovh/migrations/0007_auto_20181118_0807.py new file mode 100644 index 0000000..251fc3a --- /dev/null +++ b/passerelle/apps/ovh/migrations/0007_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ovh', '0006_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='ovhsmsgateway', + name='log_level', + ), + ] diff --git a/passerelle/apps/oxyd/migrations/0007_auto_20181118_0807.py b/passerelle/apps/oxyd/migrations/0007_auto_20181118_0807.py new file mode 100644 index 0000000..abcdb17 --- /dev/null +++ b/passerelle/apps/oxyd/migrations/0007_auto_20181118_0807.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('oxyd', '0006_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='oxydsmsgateway', + name='log_level', + ), + ] diff --git a/passerelle/apps/pastell/migrations/0006_remove_pastell_log_level.py b/passerelle/apps/pastell/migrations/0006_remove_pastell_log_level.py new file mode 100644 index 0000000..6508996 --- /dev/null +++ b/passerelle/apps/pastell/migrations/0006_remove_pastell_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pastell', '0005_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='pastell', + name='log_level', + ), + ] diff --git a/passerelle/apps/solis/migrations/0005_remove_solis_log_level.py b/passerelle/apps/solis/migrations/0005_remove_solis_log_level.py new file mode 100644 index 0000000..9a11198 --- /dev/null +++ b/passerelle/apps/solis/migrations/0005_remove_solis_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('solis', '0004_auto_20171220_1058'), + ] + + operations = [ + migrations.RemoveField( + model_name='solis', + name='log_level', + ), + ] diff --git a/passerelle/base/migrations/0007_loggingparameters.py b/passerelle/base/migrations/0007_loggingparameters.py new file mode 100644 index 0000000..7f5ff71 --- /dev/null +++ b/passerelle/base/migrations/0007_loggingparameters.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 13:16 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('base', '0006_resourcestatus'), + ] + + operations = [ + migrations.CreateModel( + name='LoggingParameters', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('resource_pk', models.PositiveIntegerField()), + ('log_level', models.CharField(choices=[(b'DEBUG', b'DEBUG'), (b'INFO', b'INFO'), (b'WARNING', b'WARNING'), (b'ERROR', b'ERROR'), (b'CRITICAL', b'CRITICAL')], default=b'INFO', max_length=10, verbose_name='Log Level')), + ('resource_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + ] diff --git a/passerelle/base/migrations/0008_auto_20181118_0717.py b/passerelle/base/migrations/0008_auto_20181118_0717.py new file mode 100644 index 0000000..c74c04b --- /dev/null +++ b/passerelle/base/migrations/0008_auto_20181118_0717.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 13:17 +from __future__ import unicode_literals + +from django.db import migrations + + +def set_logging_parameters(apps, schema_editor): + LoggingParameters = apps.get_model('base', 'LoggingParameters') + ContentType = apps.get_model('contenttypes', 'ContentType') + for model in apps.get_models(): + if not hasattr(model, 'log_level'): + continue + content_type = ContentType.objects.get_for_model(model) + for instance in model.objects.all(): + parameters, created = LoggingParameters.objects.get_or_create( + resource_type=content_type, + resource_pk=instance.id) + parameters.log_level = instance.log_level + if parameters.log_level == 'NOTSET': + parameters.log_level = 'INFO' + parameters.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0007_loggingparameters'), + ] + + operations = [ + migrations.RunPython(set_logging_parameters, migrations.RunPython.noop), + ] diff --git a/passerelle/base/migrations/0009_auto_20181118_0807.py b/passerelle/base/migrations/0009_auto_20181118_0807.py new file mode 100644 index 0000000..9e856a1 --- /dev/null +++ b/passerelle/base/migrations/0009_auto_20181118_0807.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('base', '0008_auto_20181118_0717'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='loggingparameters', + unique_together=set([('resource_type', 'resource_pk')]), + ), + ] diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 0ae5bd0..8ddf7be 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -117,19 +117,6 @@ class BaseResource(models.Model): description = models.TextField(verbose_name=_('Description')) slug = models.SlugField(unique=True) users = models.ManyToManyField(ApiUser, blank=True) - log_level = models.CharField( - _('Log Level'), max_length=10, - choices = ( - ('NOTSET','NOTSET'), - ('DEBUG','DEBUG'), - ('INFO','INFO'), - ('WARNING','WARNING'), - ('ERROR','ERROR'), - ('CRITICAL','CRITICAL'), - ), - default='INFO' - ) - objects = InheritanceManager() parameters = None @@ -166,6 +153,23 @@ class BaseResource(models.Model): def requests(self): return passerelle.utils.Request(resource=self, logger=self.logger) + @property + def log_level(self): + resource_type = ContentType.objects.get_for_model(self) + try: + return LoggingParameters.objects.get( + resource_type=resource_type, + resource_pk=self.id).log_level + except LoggingParameters.DoesNotExist: + return 'INFO' + + def set_log_level(self, value): + resource_type = ContentType.objects.get_for_model(self) + parameters, created = LoggingParameters.objects.get_or_create( + resource_type=resource_type, resource_pk=self.pk) + parameters.log_level = value + parameters.save() + def soap_client(self, **kwargs): return passerelle.utils.SOAPClient(resource=self, **kwargs) @@ -328,7 +332,6 @@ class BaseResource(models.Model): 'title': d['title'], 'slug': d['slug'], 'description': d['description'], - 'log_level': d['log_level'], } init_kwargs.update(kwargs) if instance: @@ -362,8 +365,9 @@ class BaseResource(models.Model): else: raise Exception('import_json_real: field %s of ressource class ' '%s is unsupported' % (field, cls)) - instance.save() + if 'log_level' in d: + instance.set_log_level(d['log_level']) return instance def clean_logs(self): @@ -441,6 +445,27 @@ class AccessRight(models.Model): return '%s (on %s <%s>) (for %s)' % (self.codename, self.resource_type, self.resource_pk, self.apiuser) +class LoggingParameters(models.Model): + resource_type = models.ForeignKey(ContentType) + resource_pk = models.PositiveIntegerField() + resource = fields.GenericForeignKey('resource_type', 'resource_pk') + log_level = models.CharField( + _('Log Level'), max_length=10, + choices = ( + ('DEBUG', 'DEBUG'), + ('INFO', 'INFO'), + ('WARNING', 'WARNING'), + ('ERROR', 'ERROR'), + ('CRITICAL', 'CRITICAL'), + ), + default='INFO' + ) + + class Meta: + unique_together = (('resource_type', 'resource_pk')) + + + class ResourceLog(models.Model): timestamp = models.DateTimeField(auto_now_add=True) appname = models.CharField(max_length=128, verbose_name='appname', null=True) diff --git a/passerelle/base/templatetags/passerelle.py b/passerelle/base/templatetags/passerelle.py index a446b12..9f2b9b9 100644 --- a/passerelle/base/templatetags/passerelle.py +++ b/passerelle/base/templatetags/passerelle.py @@ -25,6 +25,9 @@ def access_rights_table(context, resource, permission): context['trusted_services'] = get_trusted_services() return context +@register.filter(name='resource_type') +def as_resource_type(resource): + return ContentType.objects.get_for_model(resource).id @register.inclusion_tag('passerelle/includes/resource-logs-table.html', takes_context=True) def resource_logs_table(context, resource): diff --git a/passerelle/base/urls.py b/passerelle/base/urls.py index caa0f62..1cdfe1d 100644 --- a/passerelle/base/urls.py +++ b/passerelle/base/urls.py @@ -1,7 +1,8 @@ from django.conf.urls import url from .views import ApiUserCreateView, ApiUserUpdateView, ApiUserDeleteView, \ - ApiUserListView, AccessRightDeleteView, AccessRightCreateView + ApiUserListView, AccessRightDeleteView, AccessRightCreateView, \ + LoggingParametersUpdateView access_urlpatterns = [ url(r'^$', ApiUserListView.as_view(), name='apiuser-list'), @@ -12,5 +13,7 @@ access_urlpatterns = [ url(r'^(?P[\w,-]+)/remove$', AccessRightDeleteView.as_view(), name='access-right-remove'), url(r'^accessright/add/(?P[\w,-]+)/(?P[\w,-]+)/(?P[\w,-]+)/', - AccessRightCreateView.as_view(), name='access-right-add') + AccessRightCreateView.as_view(), name='access-right-add'), + url(r'logging/parameters/(?P[\w,-]+)/(?P[\w,-]+)/$', + LoggingParametersUpdateView.as_view(), name='logging-parameters') ] diff --git a/passerelle/base/views.py b/passerelle/base/views.py index 5fcd84d..0271a2c 100644 --- a/passerelle/base/views.py +++ b/passerelle/base/views.py @@ -1,9 +1,11 @@ +from django.contrib.contenttypes.models import ContentType from django.core.urlresolvers import reverse from django.core.exceptions import ObjectDoesNotExist, PermissionDenied +from django.forms import models as model_forms from django.views.generic import * from django.http import Http404 -from .models import ApiUser, AccessRight +from .models import ApiUser, AccessRight, LoggingParameters from .forms import ApiUserForm, AccessRightForm from ..utils import get_trusted_services @@ -95,3 +97,35 @@ class AccessRightCreateView(CreateView): def get_success_url(self): return self.object.resource.get_absolute_url() + + +class LoggingParametersUpdateView(FormView): + template_name = 'passerelle/manage/logging_parameters_form.html' + + def get_context_data(self, **kwargs): + context = super(LoggingParametersUpdateView, self).get_context_data(**kwargs) + context['connector'] = self.get_resource() + return context + + def get_form_class(self): + return model_forms.modelform_factory( + LoggingParameters, + fields=['log_level']) + + def get_initial(self): + d = self.initial.copy() + d['resource_type'] = self.kwargs['resource_type'] + d['resource_pk'] = self.kwargs['resource_pk'] + d['log_level'] = self.get_resource().log_level + return d + + def get_resource(self): + content_type = ContentType.objects.get_for_id(self.kwargs['resource_type']) + return content_type.model_class().objects.get(pk=self.kwargs['resource_pk']) + + def get_success_url(self): + return self.get_resource().get_absolute_url() + + def form_valid(self, form): + self.get_resource().set_log_level(form.cleaned_data['log_level']) + return super(LoggingParametersUpdateView, self).form_valid(form) diff --git a/passerelle/contrib/tlmcom/migrations/0005_remove_tlmcom_log_level.py b/passerelle/contrib/tlmcom/migrations/0005_remove_tlmcom_log_level.py new file mode 100644 index 0000000..d140908 --- /dev/null +++ b/passerelle/contrib/tlmcom/migrations/0005_remove_tlmcom_log_level.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-11-18 14:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('tlmcom', '0004_auto_20170920_0951'), + ] + + operations = [ + migrations.RemoveField( + model_name='tlmcom', + name='log_level', + ), + ] diff --git a/passerelle/templates/passerelle/manage/logging_parameters_form.html b/passerelle/templates/passerelle/manage/logging_parameters_form.html new file mode 100644 index 0000000..a39555c --- /dev/null +++ b/passerelle/templates/passerelle/manage/logging_parameters_form.html @@ -0,0 +1,17 @@ +{% extends "passerelle/manage.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans 'Logging Parameters' %}

+{% endblock %} + +{% block content %} +
+ {% csrf_token %} + {{ form.as_p }} +
+ + {% trans 'Cancel' %} +
+
+{% endblock %} diff --git a/passerelle/templates/passerelle/manage/service_view.html b/passerelle/templates/passerelle/manage/service_view.html index 03977c5..b375d08 100644 --- a/passerelle/templates/passerelle/manage/service_view.html +++ b/passerelle/templates/passerelle/manage/service_view.html @@ -16,6 +16,9 @@ {% if object|can_edit:request.user %} +{% trans 'logging parameters' %} +{% endif %} +{% if object|can_edit:request.user %} {% trans 'edit' %} {% endif %} {% if object|can_delete:request.user %} diff --git a/tests/test_generic_endpoint.py b/tests/test_generic_endpoint.py index 2453654..7895896 100644 --- a/tests/test_generic_endpoint.py +++ b/tests/test_generic_endpoint.py @@ -40,7 +40,9 @@ def mdel(db): @pytest.fixture def arcgis(db): - return utils.setup_access_rights(ArcGIS.objects.create(slug='test', log_level='DEBUG')) + instance = utils.setup_access_rights(ArcGIS.objects.create(slug='test')) + instance.set_log_level('DEBUG') + return instance DEMAND_STATUS = { @@ -126,7 +128,7 @@ def test_proxy_logger(mocked_get, caplog, app, arcgis): # when changing log level ResourceLog.objects.all().delete() - arcgis.log_level = 'INFO' + arcgis.set_log_level('INFO') arcgis.save() app.get('/arcgis/test/district', params={'lon': 6.172122, 'lat': 48.673836}, status=200) assert ResourceLog.objects.count() == 1 diff --git a/tests/test_import_export.py b/tests/test_import_export.py index 8942eee..fd93871 100644 --- a/tests/test_import_export.py +++ b/tests/test_import_export.py @@ -181,3 +181,14 @@ def test_export_to_file(app, setup, filetype): assert Bdp.objects.count() == 0 import_site(json.load(open(f.name)), overwrite=True) assert Bdp.objects.count() == 1 + +def test_export_log_level(app, setup): + bdp = Bdp.objects.create(service_url='https://bdp.example.com/') + bdp.set_log_level('DEBUG') + + first = export_site() + Bdp.objects.all().delete() + import_site(first) + second = export_site() + assert first == second + assert Bdp.objects.all().first().log_level == 'DEBUG' diff --git a/tests/test_manager.py b/tests/test_manager.py index c262109..094ad1d 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -170,3 +170,20 @@ def test_logs(app, admin_user): base_url = re.findall(r'data-log-base-url="(.*)"', resp.text)[0] resp = app.get(base_url + log_pk + '/') resp = app.get(base_url + '12345' + '/', status=404) + +def test_logging_parameters(app, admin_user): + data = StringIO('1;Foo\n2;Bar\n3;Baz') + csv = CsvDataSource.objects.create(csv_file=File(data, 't.csv'), + columns_keynames='id, text', slug='test', title='a title', description='a description') + app = login(app) + resp = app.get(csv.get_absolute_url()) + resp = resp.click('logging parameters') + resp.form['log_level'] = 'ERROR' + resp = resp.form.submit() + assert CsvDataSource.objects.get(id=csv.id).log_level == 'ERROR' + + resp = app.get(csv.get_absolute_url()) + resp = resp.click('logging parameters') + resp.form['log_level'] = 'DEBUG' + resp = resp.form.submit() + assert CsvDataSource.objects.get(id=csv.id).log_level == 'DEBUG' diff --git a/tests/test_proxylogger.py b/tests/test_proxylogger.py index 8d6db54..7b54c06 100644 --- a/tests/test_proxylogger.py +++ b/tests/test_proxylogger.py @@ -14,7 +14,7 @@ from .test_availability import down_mock, up_mock @pytest.fixture def connector(): connector, created = Feed.objects.get_or_create(slug='some-slug') - connector.log_level = 'DEBUG' + connector.set_log_level('DEBUG') connector.url = 'http://example.net/' connector.save() return connector @@ -52,7 +52,7 @@ def test_proxy_logger_dict_interpolation(db, connector): def test_proxy_logger_ignore(db, connector): ResourceLog.objects.all().delete() - connector.log_level = 'INFO' + connector.set_log_level('INFO') pr = ProxyLogger(connector) pr.debug(u'some message') assert len(ResourceLog.objects.all()) == 0 -- 2.19.1