From 29e2b7215efa9f18df1f3e611f777677537cbfc1 Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Mon, 4 May 2020 16:00:44 +0200 Subject: [PATCH] add minint_brexit connector --- debian/50minint.py | 3 + passerelle_minint/minint_brexit/__init__.py | 0 .../minint_brexit/migrations/0001_initial.py | 31 ++++++++ .../minint_brexit/migrations/__init__.py | 0 passerelle_minint/minint_brexit/models.py | 73 +++++++++++++++++++ tests/settings.py | 1 + tests/test_brexit.py | 7 ++ 7 files changed, 115 insertions(+) create mode 100644 passerelle_minint/minint_brexit/__init__.py create mode 100644 passerelle_minint/minint_brexit/migrations/0001_initial.py create mode 100644 passerelle_minint/minint_brexit/migrations/__init__.py create mode 100644 passerelle_minint/minint_brexit/models.py create mode 100644 tests/test_brexit.py diff --git a/debian/50minint.py b/debian/50minint.py index 0b0181f..dc528c1 100644 --- a/debian/50minint.py +++ b/debian/50minint.py @@ -4,3 +4,6 @@ if 'passerelle_minint.minint_maarch' not in INSTALLED_APPS: if 'passerelle_minint.minint_seisin' not in INSTALLED_APPS: INSTALLED_APPS += ('passerelle_minint.minint_seisin',) TENANT_APPS += ('passerelle_minint.minint_seisin',) +if 'passerelle_minint.minint_brexit' not in INSTALLED_APPS: + INSTALLED_APPS += ('passerelle_minint.minint_brexit',) + TENANT_APPS += ('passerelle_minint.minint_brexit',) diff --git a/passerelle_minint/minint_brexit/__init__.py b/passerelle_minint/minint_brexit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/passerelle_minint/minint_brexit/migrations/0001_initial.py b/passerelle_minint/minint_brexit/migrations/0001_initial.py new file mode 100644 index 0000000..f8138b7 --- /dev/null +++ b/passerelle_minint/minint_brexit/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-05-04 13:59 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('base', '0018_smslog'), + ] + + operations = [ + migrations.CreateModel( + name='Brexit', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=50, verbose_name='Title')), + ('slug', models.SlugField(unique=True, verbose_name='Identifier')), + ('description', models.TextField(verbose_name='Description')), + ('url', models.URLField(default=b'IP_INES/action', verbose_name=b'URL')), + ('users', models.ManyToManyField(blank=True, related_name='_brexit_users_+', related_query_name='+', to='base.ApiUser')), + ], + options={ + 'verbose_name': 'BREXIT - API REST vers MAARCH', + }, + ), + ] diff --git a/passerelle_minint/minint_brexit/migrations/__init__.py b/passerelle_minint/minint_brexit/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/passerelle_minint/minint_brexit/models.py b/passerelle_minint/minint_brexit/models.py new file mode 100644 index 0000000..de9ef67 --- /dev/null +++ b/passerelle_minint/minint_brexit/models.py @@ -0,0 +1,73 @@ +# coding=utf-8 +import requests + +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.utils.http import urlquote + +from passerelle.base.models import BaseResource +from passerelle.utils.api import endpoint +from passerelle.utils.jsonresponse import APIError, exception_to_text + + +class Brexit(BaseResource): + category = 'MinInt' + api_description = "Ce connecteur permet de vérifier l'existence d'un dossier dans la GED Etranger utilisée pour le BREXIT." + + url = models.URLField('URL', default='IP_INES/action') + + class Meta: + verbose_name = 'BREXIT - API REST vers MAARCH' + + @endpoint() + def info(self, request): + return {'hello': 'world'} + + @endpoint(parameters={ + 'num': {'description': _('Num dossier'), 'example_value': '12345'}, + 'email': {'description': _('Email associe au dossier'), 'example_value': 'franck@interieur.gouv.fr'}, + }) + def find_folder(self, request, num, email): + + self.logger.info('MININT BREXIT - find_folder num: %s ; email : %s', num, email) + + try: + response = self.requests.get(self.url + '/%s/%s' % (num, email), verify=False) + except requests.RequestException as e: + raise APIError(u'API-maarch connection error: %s' % + exception_to_text(e), data=[]) + try: + data = response.json() + except ValueError as e: + content = repr(response.content[:1000]) + raise APIError( + u'API-maarch returned non-JSON content with status %s: %s' % + (response.status_code, content), + data={ + 'status_code': response.status_code, + 'exception': exception_to_text(e), + 'content': content, + }) + if response.status_code != 200: + if data.get('error') == 'not_found': + return { + 'err': 1, + 'err_desc': data.get('message', 'not-found'), + } + raise APIError( + u'API-maarch returned a non 200 status %s: %s' % + (response.status_code, data), + data={ + 'status_code': response.status_code, + 'content': data, + }) + document_id = data.get('res_id') + if document_id is not None: + data_response = {'res_id': document_id} + else: + data_response = {'res_id': 0, 'result': data.get('result'), 'msg': data.get('error')} + return { + 'err': 0, + 'data': data_response, + } + diff --git a/tests/settings.py b/tests/settings.py index dba426f..1cebe90 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -3,6 +3,7 @@ import os INSTALLED_APPS += ( 'passerelle_minint.minint_maarch', 'passerelle_minint.minint_seisin', + 'passerelle_minint.minint_brexit', ) DATABASES = { diff --git a/tests/test_brexit.py b/tests/test_brexit.py new file mode 100644 index 0000000..1d8a1dc --- /dev/null +++ b/tests/test_brexit.py @@ -0,0 +1,7 @@ +import utils + +from passerelle_minint.minint_brexit.models import Brexit + + +def test_creation(app, db): + resource = utils.make_resource(Brexit, url='https://example.com/', slug='brexit')