Projet

Général

Profil

0001-general-move-logging-parameters-to-its-own-model-271.patch

Frédéric Péters, 19 novembre 2018 12:15

Télécharger (38,7 ko)

Voir les différences:

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                     | 56 ++++++++++++++-----
 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, 711 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
passerelle/apps/actesweb/migrations/0002_remove_actesweb_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('actesweb', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='actesweb',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/airquality/migrations/0003_remove_airquality_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('airquality', '0002_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='airquality',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/api_particulier/migrations/0002_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('api_particulier', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='apiparticulier',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/arcgis/migrations/0004_remove_arcgis_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('arcgis', '0003_auto_20181102_1550'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='arcgis',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/arpege_ecp/migrations/0002_remove_arpegeecp_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('arpege_ecp', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='arpegeecp',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/atos_genesys/migrations/0002_remove_resource_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('atos_genesys', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='resource',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/base_adresse/migrations/0013_remove_baseadresse_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('base_adresse', '0012_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='baseadresse',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/bdp/migrations/0006_remove_bdp_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('bdp', '0005_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='bdp',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/choosit/migrations/0008_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('choosit', '0007_auto_20180814_1048'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='choositsmsgateway',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/cityweb/migrations/0003_remove_cityweb_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('cityweb', '0002_auto_20170920_1002'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='cityweb',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/clicrdv/migrations/0002_remove_clicrdv_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('clicrdv', '0001_squashed_0006_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='clicrdv',
17
            name=b'log_level',
18
        ),
19
    ]
passerelle/apps/cmis/migrations/0003_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('cmis', '0002_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='cmisconnector',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/csvdatasource/migrations/0013_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('csvdatasource', '0012_auto_20180912_0215'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='csvdatasource',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/family/migrations/0009_remove_genericfamily_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('family', '0008_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='genericfamily',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/feeds/migrations/0003_remove_feed_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('feeds', '0002_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='feed',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/gdc/migrations/0006_remove_gdc_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('gdc', '0005_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='gdc',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/jsondatastore/migrations/0005_remove_jsondatastore_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('jsondatastore', '0004_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='jsondatastore',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/mobyt/migrations/0007_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('mobyt', '0006_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='mobytsmsgateway',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/okina/migrations/0003_remove_okina_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('okina', '0002_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='okina',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/opengis/migrations/0006_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('opengis', '0005_auto_20180227_1531'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='opengis',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/orange/migrations/0006_remove_orangesmsgateway_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('orange', '0005_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='orangesmsgateway',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/ovh/migrations/0007_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('ovh', '0006_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='ovhsmsgateway',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/oxyd/migrations/0007_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('oxyd', '0006_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='oxydsmsgateway',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/pastell/migrations/0006_remove_pastell_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('pastell', '0005_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='pastell',
17
            name='log_level',
18
        ),
19
    ]
passerelle/apps/solis/migrations/0005_remove_solis_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('solis', '0004_auto_20171220_1058'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='solis',
17
            name='log_level',
18
        ),
19
    ]
passerelle/base/migrations/0007_loggingparameters.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 13:16
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6
import django.db.models.deletion
7

  
8

  
9
class Migration(migrations.Migration):
10

  
11
    dependencies = [
12
        ('contenttypes', '0002_remove_content_type_name'),
13
        ('base', '0006_resourcestatus'),
14
    ]
15

  
16
    operations = [
17
        migrations.CreateModel(
18
            name='LoggingParameters',
19
            fields=[
20
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21
                ('resource_pk', models.PositiveIntegerField()),
22
                ('log_level', models.CharField(verbose_name='Log Level', 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')),
23
                ('resource_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
24
            ],
25
        ),
26
    ]
passerelle/base/migrations/0008_auto_20181118_0717.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 13:17
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
def set_logging_parameters(apps, schema_editor):
9
    LoggingParameters = apps.get_model('base', 'LoggingParameters')
10
    ContentType = apps.get_model('contenttypes', 'ContentType')
11
    for model in apps.get_models():
12
        if not hasattr(model, 'log_level'):
13
            continue
14
        content_type = ContentType.objects.get_for_model(model)
15
        for instance in model.objects.all():
16
            parameters, created = LoggingParameters.objects.get_or_create(
17
                    resource_type=content_type,
18
                    resource_pk=instance.id)
19
            parameters.log_level = instance.log_level
20
            if parameters.log_level == 'NOTSET':
21
                parameters.log_level = 'INFO'
22
            parameters.save()
23

  
24

  
25
class Migration(migrations.Migration):
26

  
27
    dependencies = [
28
        ('base', '0007_loggingparameters'),
29
    ]
30

  
31
    operations = [
32
        migrations.RunPython(set_logging_parameters, migrations.RunPython.noop),
33
    ]
passerelle/base/migrations/0009_auto_20181118_0807.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('contenttypes', '0002_remove_content_type_name'),
12
        ('base', '0008_auto_20181118_0717'),
13
    ]
14

  
15
    operations = [
16
        migrations.AlterUniqueTogether(
17
            name='loggingparameters',
18
            unique_together=set([('resource_type', 'resource_pk')]),
19
        ),
20
    ]
passerelle/base/models.py
117 117
    description = models.TextField(verbose_name=_('Description'))
118 118
    slug = models.SlugField(unique=True)
119 119
    users = models.ManyToManyField(ApiUser, blank=True)
120
    log_level = models.CharField(
121
        _('Log Level'), max_length=10,
122
        choices = (
123
           ('NOTSET','NOTSET'),
124
           ('DEBUG','DEBUG'),
125
           ('INFO','INFO'),
126
           ('WARNING','WARNING'),
127
           ('ERROR','ERROR'),
128
           ('CRITICAL','CRITICAL'),
129
        ),
130
        default='INFO'
131
    )
132

  
133 120
    objects = InheritanceManager()
134 121

  
135 122
    parameters = None
......
166 153
    def requests(self):
167 154
        return passerelle.utils.Request(resource=self, logger=self.logger)
168 155

  
156
    @property
157
    def log_level(self):
158
        resource_type = ContentType.objects.get_for_model(self)
159
        try:
160
            return LoggingParameters.objects.get(
161
                    resource_type=resource_type,
162
                    resource_pk=self.id).log_level
163
        except LoggingParameters.DoesNotExist:
164
            return 'INFO'
165

  
166
    def set_log_level(self, value):
167
        resource_type = ContentType.objects.get_for_model(self)
168
        parameters, created = LoggingParameters.objects.get_or_create(
169
                resource_type=resource_type, resource_pk=self.pk)
170
        parameters.log_level = value
171
        parameters.save()
172

  
169 173
    def soap_client(self, **kwargs):
170 174
        return passerelle.utils.SOAPClient(resource=self, **kwargs)
171 175

  
......
328 332
            'title': d['title'],
329 333
            'slug': d['slug'],
330 334
            'description': d['description'],
331
            'log_level': d['log_level'],
332 335
        }
333 336
        init_kwargs.update(kwargs)
334 337
        if instance:
......
362 365
            else:
363 366
                raise Exception('import_json_real: field %s of ressource class '
364 367
                                '%s is unsupported' % (field, cls))
365

  
366 368
        instance.save()
369
        if 'log_level' in d:
370
            instance.set_log_level(d['log_level'])
367 371
        return instance
368 372

  
369 373
    def clean_logs(self):
......
441 445
        return '%s (on %s <%s>) (for %s)' % (self.codename, self.resource_type, self.resource_pk, self.apiuser)
442 446

  
443 447

  
448
class LoggingParameters(models.Model):
449
    resource_type = models.ForeignKey(ContentType)
450
    resource_pk = models.PositiveIntegerField()
451
    resource = fields.GenericForeignKey('resource_type', 'resource_pk')
452
    log_level = models.CharField(
453
        verbose_name_('Log Level'),
454
        max_length=10,
455
        choices = (
456
           ('DEBUG', 'DEBUG'),
457
           ('INFO', 'INFO'),
458
           ('WARNING', 'WARNING'),
459
           ('ERROR', 'ERROR'),
460
           ('CRITICAL', 'CRITICAL'),
461
        ),
462
        default='INFO'
463
    )
464

  
465
    class Meta:
466
        unique_together = (('resource_type', 'resource_pk'))
467

  
468

  
469

  
444 470
class ResourceLog(models.Model):
445 471
    timestamp = models.DateTimeField(auto_now_add=True)
446 472
    appname = models.CharField(max_length=128, verbose_name='appname', null=True)
passerelle/base/templatetags/passerelle.py
25 25
    context['trusted_services'] = get_trusted_services()
26 26
    return context
27 27

  
28
@register.filter(name='resource_type')
29
def as_resource_type(resource):
30
    return ContentType.objects.get_for_model(resource).id
28 31

  
29 32
@register.inclusion_tag('passerelle/includes/resource-logs-table.html', takes_context=True)
30 33
def resource_logs_table(context, resource):
passerelle/base/urls.py
1 1
from django.conf.urls import url
2 2

  
3 3
from .views import ApiUserCreateView, ApiUserUpdateView, ApiUserDeleteView, \
4
        ApiUserListView, AccessRightDeleteView, AccessRightCreateView
4
        ApiUserListView, AccessRightDeleteView, AccessRightCreateView, \
5
        LoggingParametersUpdateView
5 6

  
6 7
access_urlpatterns = [
7 8
    url(r'^$', ApiUserListView.as_view(), name='apiuser-list'),
......
12 13
    url(r'^(?P<pk>[\w,-]+)/remove$', AccessRightDeleteView.as_view(),
13 14
        name='access-right-remove'),
14 15
    url(r'^accessright/add/(?P<resource_type>[\w,-]+)/(?P<resource_pk>[\w,-]+)/(?P<codename>[\w,-]+)/',
15
        AccessRightCreateView.as_view(), name='access-right-add')
16
        AccessRightCreateView.as_view(), name='access-right-add'),
17
    url(r'logging/parameters/(?P<resource_type>[\w,-]+)/(?P<resource_pk>[\w,-]+)/$',
18
        LoggingParametersUpdateView.as_view(), name='logging-parameters')
16 19
]
passerelle/base/views.py
1
from django.contrib.contenttypes.models import ContentType
1 2
from django.core.urlresolvers import reverse
2 3
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
4
from django.forms import models as model_forms
3 5
from django.views.generic import *
4 6
from django.http import Http404
5 7

  
6
from .models import ApiUser, AccessRight
8
from .models import ApiUser, AccessRight, LoggingParameters
7 9
from .forms import ApiUserForm, AccessRightForm
8 10
from ..utils import get_trusted_services
9 11

  
......
95 97

  
96 98
    def get_success_url(self):
97 99
        return self.object.resource.get_absolute_url()
100

  
101

  
102
class LoggingParametersUpdateView(FormView):
103
    template_name = 'passerelle/manage/logging_parameters_form.html'
104

  
105
    def get_context_data(self, **kwargs):
106
        context = super(LoggingParametersUpdateView, self).get_context_data(**kwargs)
107
        context['connector'] = self.get_resource()
108
        return context
109

  
110
    def get_form_class(self):
111
        return model_forms.modelform_factory(
112
                LoggingParameters,
113
                fields=['log_level'])
114

  
115
    def get_initial(self):
116
        d = self.initial.copy()
117
        d['resource_type'] = self.kwargs['resource_type']
118
        d['resource_pk'] = self.kwargs['resource_pk']
119
        d['log_level'] = self.get_resource().log_level
120
        return d
121

  
122
    def get_resource(self):
123
        content_type = ContentType.objects.get_for_id(self.kwargs['resource_type'])
124
        return content_type.model_class().objects.get(pk=self.kwargs['resource_pk'])
125

  
126
    def get_success_url(self):
127
        return self.get_resource().get_absolute_url()
128

  
129
    def form_valid(self, form):
130
        self.get_resource().set_log_level(form.cleaned_data['log_level'])
131
        return super(LoggingParametersUpdateView, self).form_valid(form)
passerelle/contrib/tlmcom/migrations/0005_remove_tlmcom_log_level.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-11-18 14:07
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('tlmcom', '0004_auto_20170920_0951'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(
16
            model_name='tlmcom',
17
            name='log_level',
18
        ),
19
    ]
passerelle/templates/passerelle/manage/logging_parameters_form.html
1
{% extends "passerelle/manage.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans 'Logging Parameters' %}</h2>
6
{% endblock %}
7

  
8
{% block content %}
9
<form method="post">
10
  {% csrf_token %}
11
  {{ form.as_p }}
12
  <div class="buttons">
13
    <button class="submit-button">{% trans 'Update' %}</button>
14
    <a href="{{ connector.get_absolute_url }}" class="cancel">{% trans 'Cancel' %}</a>
15
  </div>
16
</form>
17
{% endblock %}
passerelle/templates/passerelle/manage/service_view.html
16 16
</h2>
17 17
<span class="actions">
18 18
{% if object|can_edit:request.user %}
19
<a rel="popup" href="{% url 'logging-parameters' resource_type=object|resource_type resource_pk=object.id %}">{% trans 'logging parameters' %}</a>
20
{% endif %}
21
{% if object|can_edit:request.user %}
19 22
<a rel="popup" href="{{ object.get_edit_url }}">{% trans 'edit' %}</a>
20 23
{% endif %}
21 24
{% if object|can_delete:request.user %}
tests/test_generic_endpoint.py
40 40

  
41 41
@pytest.fixture
42 42
def arcgis(db):
43
    return utils.setup_access_rights(ArcGIS.objects.create(slug='test', log_level='DEBUG'))
43
    instance = utils.setup_access_rights(ArcGIS.objects.create(slug='test'))
44
    instance.set_log_level('DEBUG')
45
    return instance
44 46

  
45 47

  
46 48
DEMAND_STATUS = {
......
126 128

  
127 129
    # when changing log level
128 130
    ResourceLog.objects.all().delete()
129
    arcgis.log_level = 'INFO'
131
    arcgis.set_log_level('INFO')
130 132
    arcgis.save()
131 133
    app.get('/arcgis/test/district', params={'lon': 6.172122, 'lat': 48.673836}, status=200)
132 134
    assert ResourceLog.objects.count() == 1
tests/test_import_export.py
181 181
        assert Bdp.objects.count() == 0
182 182
        import_site(json.load(open(f.name)), overwrite=True)
183 183
        assert Bdp.objects.count() == 1
184

  
185
def test_export_log_level(app, setup):
186
    bdp = Bdp.objects.create(service_url='https://bdp.example.com/')
187
    bdp.set_log_level('DEBUG')
188

  
189
    first = export_site()
190
    Bdp.objects.all().delete()
191
    import_site(first)
192
    second = export_site()
193
    assert first == second
194
    assert Bdp.objects.all().first().log_level == 'DEBUG'
tests/test_manager.py
170 170
    base_url = re.findall(r'data-log-base-url="(.*)"', resp.text)[0]
171 171
    resp = app.get(base_url + log_pk + '/')
172 172
    resp = app.get(base_url + '12345' + '/', status=404)
173

  
174
def test_logging_parameters(app, admin_user):
175
    data = StringIO('1;Foo\n2;Bar\n3;Baz')
176
    csv = CsvDataSource.objects.create(csv_file=File(data, 't.csv'),
177
           columns_keynames='id, text', slug='test', title='a title', description='a description')
178
    app = login(app)
179
    resp = app.get(csv.get_absolute_url())
180
    resp = resp.click('logging parameters')
181
    resp.form['log_level'] = 'ERROR'
182
    resp = resp.form.submit()
183
    assert CsvDataSource.objects.get(id=csv.id).log_level == 'ERROR'
184

  
185
    resp = app.get(csv.get_absolute_url())
186
    resp = resp.click('logging parameters')
187
    resp.form['log_level'] = 'DEBUG'
188
    resp = resp.form.submit()
189
    assert CsvDataSource.objects.get(id=csv.id).log_level == 'DEBUG'
tests/test_proxylogger.py
14 14
@pytest.fixture
15 15
def connector():
16 16
    connector, created = Feed.objects.get_or_create(slug='some-slug')
17
    connector.log_level = 'DEBUG'
17
    connector.set_log_level('DEBUG')
18 18
    connector.url = 'http://example.net/'
19 19
    connector.save()
20 20
    return connector
......
52 52

  
53 53
def test_proxy_logger_ignore(db, connector):
54 54
    ResourceLog.objects.all().delete()
55
    connector.log_level = 'INFO'
55
    connector.set_log_level('INFO')
56 56
    pr = ProxyLogger(connector)
57 57
    pr.debug(u'some message')
58 58
    assert len(ResourceLog.objects.all()) == 0
59
-