diff --git a/.gitignore b/.gitignore
index c4c998c..de2c492 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@ venv
__pycache__
*.pyc
data
-algo.py
\ No newline at end of file
+algo.py
+cert/*
\ No newline at end of file
diff --git a/_DUMP/nmb2b.py b/_DUMP/nmb2b.py
deleted file mode 100755
index c3021e4..0000000
--- a/_DUMP/nmb2b.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#-*- coding: utf-8 -*-
-
-import datetime
-import logging
-import os
-import sys
-import xml.etree.ElementTree as ET
-
-#from elasticsearch import Elasticsearch
-import requests
-from requests.auth import HTTPBasicAuth
-
-from conf.shared_vars import (B2B_PROXY, CERTS_PATH, DATA_PATH,
- DEFAULT_B2B_VERSION, DEFAULT_DATASET,
- DEFAULT_ORG, GENERIC_WRAPPER, get_dataset,
- get_entry_point, get_local_proxy)
-#from decolog import *
-#from nmb2butils import *
-#from utils import *
-from utils import autosendtime, save_metrics_to_es, write_content_to_file
-
-
-'''
-B2BPROXY = proxy réalisé par Benjamin sur AWS.
-TODO : trouver une bonne façon de loguer ce qui est nécessaire (paramétrage)
-'''
-
-class NmB2bGetterBase():
- """
- Classe générique d'accès au webservice b2b de NM.
- Des paramètres nommés et/ou non nommés peuvent être passés au constructeur.
- """
-
- def __init__(
- self, org=DEFAULT_ORG, version=DEFAULT_B2B_VERSION, save_metrics_to_es=True, save_data_to_xml=True, wanted_dataset=DEFAULT_DATASET,
- getter_name="undefined", nm_service_function="undefined", request_core="undefined", **kwargs):
- '''
- Attributs initialisés :
- - local_proxy : proxy local DSNA
- - entry_point : point d'accès NM B2B selon version
- - save_metrics_to_es : utilisation ou non d'Elastic Search pour enregistrer les metriques
- - wanted_dataset : dataset NM souhaité
- -
- -
- -
- '''
- self.local_proxy = get_local_proxy(org)
- self.entry_point = get_entry_point(version)
- self.save_metrics_to_es = save_metrics_to_es
- self.save_data_to_xml = save_data_to_xml
- self.dataset = get_dataset(wanted_dataset)
- self.getter_name = getter_name
- self.nm_service_function = nm_service_function
- self.request_core = request_core
- self.nm_request = None
- self.nm_response = None
-
-
- def show_conf(self):
- '''
- Affiche les éléments de configuration pertinents :
- -utilisation d'un proxy local ou non
- -accès direct au B2B NM ou via proxy AWS
- -utilisation d'elastic search pour les métriques
- # TODO : surcharger la méthode __str__ tout simplement.
- '''
- if self.local_proxy:
- print("Proxy local (DSNA) : ", self.local_proxy)
- print("Entry point : ", self.entry_point)
- print("Utilisation d'Elastic Search pour les métriques : ", self.save_metrics_to_es)
-
- def is_conf_valid(self):
- if "undefined" in [self.getter_name, self.nm_service_function, self.request_core]:
- print("L'un des attributs getter_name, nm_service_function ou request_core n'a pas été défini.")
- return False
- return True
-
- def wrap_request(self, request_to_wrap):
- '''
- Permet d'encapsuler une requête :
- - request_to_wrap = requête en paramètre que l'on va encapsuler
- '''
- return GENERIC_WRAPPER.format(request_to_wrap=request_to_wrap)
-
- def is_connexion_ok(self):
- '''
- Return True si la connection au B2B NM est ouverte, False sinon.
- TODO : A consolider/valider.
- '''
- response = None
-
- if not B2B_PROXY:
- response = requests.get(
- self.entry_point, proxies=self.local_proxy,
- cert=CERTS_PATH)
- else:
- response = requests.get(
- self.entry_point, proxies=self.local_proxy,
- auth=HTTPBasicAuth(B2B_PROXY['key'], B2B_PROXY['secret']))
-
- if response.status_code != 200:
- print(response.text)
- return False
- return True
-
- def _save_data_to_xml(self):
- '''
- Permet d'enregistrer la requête envoyée à NM et la réponse brute de NM au format XML.
- '''
- if self.nm_request:
- print("Enregistrement de la requête au format XML...")
- request_filename = os.path.join(
- DATA_PATH, self.getter_name, "requests",
- f"request-{self.getter_name}-{datetime.datetime.utcnow().strftime('%s')}.xml")
- write_content_to_file(filename=request_filename, content=self.nm_request.text)
- print("Enregistrement de la requête au format XML terminé.")
- if self.nm_response:
- print("Enregistrement de la réponse NM au format XML...")
- response_filename = os.path.join(
- DATA_PATH, self.getter_name, "responses",
- f"response-{self.getter_name}-{datetime.datetime.utcnow().strftime('%s')}.xml")
- write_content_to_file(filename=response_filename, content=self.nm_response.text)
- print("Enregistrement de la réponse NM au format XML terminé.")
-
- def set_metrics_wanted(self, response):
- # TODO : vérifier que response est bien une response
- self.metrics_wanted = {
- "ts-start": datetime.datetime.utcnow().strftime("%s"),
- "date0": datetime.datetime.strftime(datetime.datetime.utcnow(), "%Y-%m-%dT%H:%M:%SZ"),
- "ts-end": datetime.datetime.utcnow().strftime("%s"),
- "data": response.text,
- "datasize": len(response.text),
- "getter_name": self.getter_name,
- "nm_service_function": self.nm_service_function
- }
-
- def generate_and_save_response_from_nm(self):
- '''
- Permet de récupérer la réponse NM à partir d'une requête customisée.
- Enregistre le résultat dans un répertoire requests au format XML.
- '''
-
- if not self.is_conf_valid():
- print("Configuration du getter non valide, impossible d'exécuter toute requête.")
- raise Exception
-
- # if not self.is_connexion_ok():
- # print("Impossible d'établir une connexion avec NM.")
- # raise Exception
-
- ast = autosendtime()
- initial_request = f"<{self.nm_service_function}>{ast}{self.request_core}{self.nm_service_function}>"
- nm_full_request = self.wrap_request(request_to_wrap=initial_request)
-
- print("initial_request : ", initial_request)
- print("nm_full_request : ", nm_full_request)
-
- if not B2B_PROXY:
- self.nm_response = requests.post(
- self.entry_point, data=nm_full_request, proxies=self.local_proxy,
- cert=CERTS_PATH)
- else:
- self.nm_response = requests.post(
- self.entry_point, data=nm_full_request, proxies=self.local_proxy,
- auth=HTTPBasicAuth(B2B_PROXY['key'], B2B_PROXY['secret']))
-
- if self.save_metrics_to_es and self.nm_response:
- self.set_metrics_wanted(response=self.nm_response)
- save_metrics_to_es(self.metrics_wanted)
-
- if self.save_data_to_xml:
- self._save_data_to_xml()
-
- def get_nm_response_as_xml(self):
- '''
- Retourne la response du NM au format XML.
- '''
- if not self.nm_response:
- print("Aucune réponse NM n'a été générée et/ou enregistrée en mémoire.")
- return None
- return ET.fromstring(self.nm_response.text)
diff --git a/crt.pem b/crt.pem
new file mode 100644
index 0000000..e69de29
diff --git a/data/sqlite.db b/data/sqlite.db
index 9a1fb84..efe0bed 100644
Binary files a/data/sqlite.db and b/data/sqlite.db differ
diff --git a/demo.py b/demo.py
index b6ab5ae..a4500c0 100644
--- a/demo.py
+++ b/demo.py
@@ -6,14 +6,15 @@
import utils
import datetime
-test_manager = Manager()
+test_manager = Manager() # avec proxy
+test_manager = Manager(how_to_auth='cert')
requestedFlightFields = ['flightState', 'cfmuFlightType']
# démo queryFlightsByAirspace
flight_list = test_manager.queryFlightsByAirspace(
airspace="LFFFTH",
- startTime="2019-07-26 11:00",
- endTime="2019-07-26 13:30",
+ startTime="2019-10-16 17:00",
+ endTime="2019-10-16 18:30",
requestedFlightFields=requestedFlightFields)
print(flight_list.data)
@@ -21,15 +22,16 @@
flight_list = test_manager.queryFlightsByAerodrome(
aerodrome="LFPG",
aerodromeRole="DEPARTURE",
- startTime="2019-07-26 11:00",
- endTime="2019-07-26 13:30",
+ startTime="2019-10-16 17:00",
+ endTime="2019-10-16 18:30",
requestedFlightFields=requestedFlightFields)
print(flight_list.data)
# démo queryFlightsByTrafficVolume
flight_list = test_manager.queryFlightsByTrafficVolume(
trafficVolume='LFFTN',
- startTime="2019-07-26 11:00",
- endTime="2019-07-26 13:30",
+ startTime="2019-10-16 17:00",
+ endTime="2019-10-16 18:30",
requestedFlightFields=requestedFlightFields)
-print(flight_list.data)
\ No newline at end of file
+print(flight_list.data)
+
diff --git a/demo2.py b/demo2.py
new file mode 100644
index 0000000..677785b
--- /dev/null
+++ b/demo2.py
@@ -0,0 +1,36 @@
+#-*- coding: utf-8 -*-
+# NOTE : à exécuter dans un shell Python plutôt que comme un script !
+
+from manager import Manager
+import json
+import utils
+import datetime
+
+test_manager = Manager(how_to_auth='cert')
+requestedFlightFields = ['flightState', 'cfmuFlightType']
+
+# démo queryFlightsByAirspace
+flight_list = test_manager.queryFlightsByAirspace(
+ airspace="LFFFTH",
+ startTime="2019-10-16 17:00",
+ endTime="2019-10-16 18:30",
+ requestedFlightFields=requestedFlightFields)
+print(flight_list.data)
+
+# démo queryFlightsByAerodrome
+flight_list = test_manager.queryFlightsByAerodrome(
+ aerodrome="LFPG",
+ aerodromeRole="DEPARTURE",
+ startTime="2019-10-16 17:00",
+ endTime="2019-10-16 18:30",
+ requestedFlightFields=requestedFlightFields)
+print(flight_list.data)
+
+# démo queryFlightsByTrafficVolume
+flight_list = test_manager.queryFlightsByTrafficVolume(
+ trafficVolume='LFFTN',
+ startTime="2019-10-16 17:00",
+ endTime="2019-10-16 18:30",
+ requestedFlightFields=requestedFlightFields)
+print(flight_list.data)
+
diff --git a/freeze.sh b/freeze.sh
new file mode 100644
index 0000000..3bc74a3
--- /dev/null
+++ b/freeze.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+pip freeze | grep -v "pkg-resources" > requirements.txt
diff --git a/key.pem b/key.pem
new file mode 100644
index 0000000..e69de29
diff --git a/manager.py b/manager.py
index 790dd4e..2967e8b 100644
--- a/manager.py
+++ b/manager.py
@@ -1,169 +1,198 @@
+import glob
+import json
import operator
+import os
from requests import Session
from requests.auth import HTTPBasicAuth
from zeep import Client, Settings
from zeep.cache import SqliteCache
-from zeep.transports import Transport
from zeep.helpers import serialize_object
-import json
+from zeep.transports import Transport
-from shared_vars import (B2B_PROXY, DEFAULT_B2B_VERSION, DEFAULT_DATASET,
- WSDL_PROXY, get_dataset)
import utils
+from shared_vars import (DEFAULT_B2B_VERSION, DEFAULT_DATASET, WSDL_PROXY,
+ WSLD_PREOPS_MAIN, get_dataset)
+# NOTE : plutôt envoyer un **kwargs en param des méthodes. Puis, itérer sur les kwargs.
+# si présence de clé dans _default_params_for_queries et pas de val...
class Manager():
- def __init__(
- self,
- version=DEFAULT_B2B_VERSION,
- wanted_services="FlightServices",
- dataset=DEFAULT_DATASET,
- *args, **kwargs
- ):
-
- self.wanted_services = wanted_services
- self.available_services = []
- self.available_operations = {}
-
- self._default_params_for_queries = {
- 'dataset': get_dataset(dataset),
- 'trafficType': 'LOAD',
- 'includeProposalFlights': True,
- 'includeForecastFlights': True,
- 'sendTime': utils.sendTime(),
- }
-
- self.session = Session()
- self.session.auth = HTTPBasicAuth(B2B_PROXY['key'], B2B_PROXY['secret'])
- self.wsdl = WSDL_PROXY + wanted_services + "_PREOPS_" + version + ".wsdl"
- self.cache = SqliteCache(path='./data/sqlite.db')
- self.transport = Transport(session=self.session, cache=self.cache)
- self.conf = {
- 'wsdl': self.wsdl,
- 'transport': self.transport
- }
-
- self.tmp_data = None
-
- # -----------------------------------------------------------------------------------------
- def set_available_services(self):
- self.available_services = []
- client = Client(**self.conf)
- for service in client.wsdl.services.values():
- self.available_services.append(service.__str__().split()[1])
+ def __init__(
+ self,
+ version=DEFAULT_B2B_VERSION,
+ service_group="FlightServices",
+ dataset=DEFAULT_DATASET,
+ how_to_auth='proxy',
+ *args, **kwargs
+ ):
+
+ self.base_url = ''
+ self.service_group = service_group
+ self.available_services = []
+ self.available_operations = {}
+ self._default_params_for_queries = {
+ 'dataset': get_dataset(dataset),
+ 'trafficType': 'LOAD',
+ 'includeProposalFlights': True,
+ 'includeForecastFlights': True,
+ 'sendTime': utils.sendTime(),
+ }
+ self.session = Session()
+
+ # ------------- certificat ou proxy ? ------------- #
+ if how_to_auth == 'cert':
+ # Si authentification par certificat
+ self.session.cert = (glob.glob("cert/crt.pem")[0], glob.glob("cert/key.pem")[0])
+ self.base_url = WSLD_PREOPS_MAIN
+ elif how_to_auth == 'proxy':
+ # Si authentification via proxy (défaut)
+ NM_B2B_API_KEY_ID = os.environ.get('NM_B2B_API_KEY_ID') # default is None
+ NM_B2B_API_SECRET = os.environ.get('NM_B2B_API_SECRET') # default is None
+ if not NM_B2B_API_KEY_ID or not NM_B2B_API_SECRET:
+ print(f"Impossible de définir un couple clé/pass pour le proxy b2b.\
+ Vérifiez que NM_B2B_API_KEY_ID et NM_B2B_API_SECRET sont bien définis dans votre environnement.")
+ exit(1)
+ self.base_url = WSDL_PROXY
+ self.session.auth = HTTPBasicAuth(NM_B2B_API_KEY_ID, NM_B2B_API_SECRET)
+ else:
+ print("Le mode d'authentification que vous avez spécifié n'existe pas (pour l'instant : 'cert' ou 'proxy').")
+ exit(1)
+
+ self.wsdl = self.base_url + service_group + "_PREOPS_" + version + ".wsdl"
+ self.cache = SqliteCache(path='./data/sqlite.db')
+ self.transport = Transport(session=self.session, cache=self.cache)
+ self.conf = {
+ 'wsdl': self.wsdl,
+ 'transport': self.transport
+ }
+ self.tmp_data = None
+
+
+ # -----------------------------------------------------------------------------------------
+ def get_wsdl_file(self):
+
+
+ # -----------------------------------------------------------------------------------------
+ def set_available_services(self):
+ self.available_services = []
+ client = Client(**self.conf)
+ for service in client.wsdl.services.values():
+ self.available_services.append(service.__str__().split()[1])
- def show_available_services(self):
- if not self.available_services:
- self.set_available_services()
- print("Les services disponibles via {} sont : ".format(self.wanted_services)),
- for service in self.available_services:
- print(' * ', service)
-
- # -----------------------------------------------------------------------------------------
- def set_operations_of_service(self, service_name):
- if not self.available_services:
- self.set_available_services()
- if not service_name in self.available_services:
- raise Exception(f"Le service {service_name} n'est pas disponible.")
- client = Client(**self.conf, service_name=service_name)
- operations = [op for op in client.service.__dir__() if not op.startswith('__')]
- self.available_operations[service_name] = operations
-
- def show_operations_of_service(self, service_name):
- if not service_name in self.available_operations:
- self.set_operations_of_service(service_name=service_name)
- print(f"Les opérations disponibles pour {service_name} sont : ")
- for operation in self.available_operations[service_name]:
- print(' * ', operation)
-
- # -----------------------------------------------------------------------------------------
- def convert_data_to_json(self, obj):
- return serialize_object(self.tmp_data)
+ def show_available_services(self):
+ if not self.available_services:
+ self.set_available_services()
+ print("Les services disponibles via {} sont : ".format(self.service_group)),
+ for service in self.available_services:
+ print(' * ', service)
+
+ # -----------------------------------------------------------------------------------------
+ def set_operations_of_service(self, service_name):
+ if not self.available_services:
+ self.set_available_services()
+ if not service_name in self.available_services:
+ raise Exception(f"Le service {service_name} n'est pas disponible.")
+ client = Client(**self.conf, service_name=service_name)
+ operations = [op for op in client.service.__dir__() if not op.startswith('__')]
+ self.available_operations[service_name] = operations
+
+ def show_operations_of_service(self, service_name):
+ if not service_name in self.available_operations:
+ self.set_operations_of_service(service_name=service_name)
+ print(f"Les opérations disponibles pour {service_name} sont : ")
+ for operation in self.available_operations[service_name]:
+ print(' * ', operation)
+
+ # -----------------------------------------------------------------------------------------
+ def convert_data_to_json(self, obj):
+ return serialize_object(self.tmp_data)
- # -----------------------------------------------------------------------------------------
- def queryFlightsByAirspace(
- self,
- airspace,
- startTime,
- endTime,
- requestedFlightFields= [],
- dataset= None,
- trafficType= None,
- includeProposalFlights= None,
- includeForecastFlights= None,
- sendTime= None,
- ):
+ # -----------------------------------------------------------------------------------------
+ def queryFlightsByAirspace(
+ self,
+ airspace,
+ startTime,
+ endTime,
+ requestedFlightFields= [],
+ dataset= None,
+ trafficType= None,
+ includeProposalFlights= None,
+ includeForecastFlights= None,
+ sendTime= None,
+ ):
- dataset = self._default_params_for_queries['dataset'] if not dataset else dataset
- trafficType = self._default_params_for_queries['trafficType'] if not trafficType else trafficType
- includeProposalFlights = self._default_params_for_queries['includeProposalFlights'] if not includeProposalFlights else includeProposalFlights
- includeForecastFlights = self._default_params_for_queries['includeForecastFlights'] if not includeForecastFlights else includeForecastFlights
- sendTime = self._default_params_for_queries['sendTime'] if not sendTime else sendTime
- trafficWindow = {'wef': startTime, 'unt': endTime}
+ dataset = self._default_params_for_queries['dataset'] if not dataset else dataset
+ trafficType = self._default_params_for_queries['trafficType'] if not trafficType else trafficType
+ includeProposalFlights = self._default_params_for_queries['includeProposalFlights'] if not includeProposalFlights else includeProposalFlights
+ includeForecastFlights = self._default_params_for_queries['includeForecastFlights'] if not includeForecastFlights else includeForecastFlights
+ sendTime = self._default_params_for_queries['sendTime'] if not sendTime else sendTime
+ trafficWindow = {'wef': startTime, 'unt': endTime}
- client = Client(**self.conf, service_name='FlightManagementService')
- self.tmp_data = client.service.queryFlightsByAirspace(
- airspace=airspace,
- dataset=dataset, trafficType=trafficType,
- includeProposalFlights=includeProposalFlights, includeForecastFlights=includeForecastFlights,
- trafficWindow=trafficWindow, requestedFlightFields=requestedFlightFields, sendTime=sendTime)
- return self.tmp_data
-
- def queryFlightsByAerodrome(
- self,
- aerodrome,
- aerodromeRole,
- startTime,
- endTime,
- requestedFlightFields= [],
- dataset= None,
- trafficType= None,
- includeProposalFlights= None,
- includeForecastFlights= None,
- sendTime= None,
- ):
+ client = Client(**self.conf, service_name='FlightManagementService')
+ self.tmp_data = client.service.queryFlightsByAirspace(
+ airspace=airspace,
+ dataset=dataset, trafficType=trafficType,
+ includeProposalFlights=includeProposalFlights, includeForecastFlights=includeForecastFlights,
+ trafficWindow=trafficWindow, requestedFlightFields=requestedFlightFields, sendTime=sendTime)
+ return self.tmp_data
+
+ def queryFlightsByAerodrome(
+ self,
+ aerodrome,
+ aerodromeRole,
+ startTime,
+ endTime,
+ requestedFlightFields= [],
+ dataset= None,
+ trafficType= None,
+ includeProposalFlights= None,
+ includeForecastFlights= None,
+ sendTime= None,
+ ):
- dataset = self._default_params_for_queries['dataset'] if not dataset else dataset
- trafficType = self._default_params_for_queries['trafficType'] if not trafficType else trafficType
- includeProposalFlights = self._default_params_for_queries['includeProposalFlights'] if not includeProposalFlights else includeProposalFlights
- includeForecastFlights = self._default_params_for_queries['includeForecastFlights'] if not includeForecastFlights else includeForecastFlights
- sendTime = self._default_params_for_queries['sendTime'] if not sendTime else sendTime
- trafficWindow = {'wef': startTime, 'unt': endTime}
+ dataset = self._default_params_for_queries['dataset'] if not dataset else dataset
+ trafficType = self._default_params_for_queries['trafficType'] if not trafficType else trafficType
+ includeProposalFlights = self._default_params_for_queries['includeProposalFlights'] if not includeProposalFlights else includeProposalFlights
+ includeForecastFlights = self._default_params_for_queries['includeForecastFlights'] if not includeForecastFlights else includeForecastFlights
+ sendTime = self._default_params_for_queries['sendTime'] if not sendTime else sendTime
+ trafficWindow = {'wef': startTime, 'unt': endTime}
- client = Client(**self.conf, service_name='FlightManagementService')
- self.tmp_data = client.service.queryFlightsByAerodrome(
- aerodrome=aerodrome, aerodromeRole=aerodromeRole,
- dataset=dataset, trafficType=trafficType,
- includeProposalFlights=includeProposalFlights, includeForecastFlights=includeForecastFlights,
- trafficWindow=trafficWindow, requestedFlightFields=requestedFlightFields, sendTime=sendTime)
- return self.tmp_data
-
- def queryFlightsByTrafficVolume(
- self,
- trafficVolume,
- startTime,
- endTime,
- requestedFlightFields= [],
- dataset= None,
- trafficType= None,
- includeProposalFlights= None,
- includeForecastFlights= None,
- sendTime= None,
- ):
+ client = Client(**self.conf, service_name='FlightManagementService')
+ self.tmp_data = client.service.queryFlightsByAerodrome(
+ aerodrome=aerodrome, aerodromeRole=aerodromeRole,
+ dataset=dataset, trafficType=trafficType,
+ includeProposalFlights=includeProposalFlights, includeForecastFlights=includeForecastFlights,
+ trafficWindow=trafficWindow, requestedFlightFields=requestedFlightFields, sendTime=sendTime)
+ return self.tmp_data
+
+ def queryFlightsByTrafficVolume(
+ self,
+ trafficVolume,
+ startTime,
+ endTime,
+ requestedFlightFields= [],
+ dataset= None,
+ trafficType= None,
+ includeProposalFlights= None,
+ includeForecastFlights= None,
+ sendTime= None,
+ **kwargs
+ ):
- dataset = self._default_params_for_queries['dataset'] if not dataset else dataset
- trafficType = self._default_params_for_queries['trafficType'] if not trafficType else trafficType
- includeProposalFlights = self._default_params_for_queries['includeProposalFlights'] if not includeProposalFlights else includeProposalFlights
- includeForecastFlights = self._default_params_for_queries['includeForecastFlights'] if not includeForecastFlights else includeForecastFlights
- sendTime = self._default_params_for_queries['sendTime'] if not sendTime else sendTime
- trafficWindow = {'wef': startTime, 'unt': endTime}
+ dataset = self._default_params_for_queries['dataset'] if not dataset else dataset
+ trafficType = self._default_params_for_queries['trafficType'] if not trafficType else trafficType
+ includeProposalFlights = self._default_params_for_queries['includeProposalFlights'] if not includeProposalFlights else includeProposalFlights
+ includeForecastFlights = self._default_params_for_queries['includeForecastFlights'] if not includeForecastFlights else includeForecastFlights
+ sendTime = self._default_params_for_queries['sendTime'] if not sendTime else sendTime
+ trafficWindow = {'wef': startTime, 'unt': endTime}
- client = Client(**self.conf, service_name='FlightManagementService')
- self.tmp_data = client.service.queryFlightsByTrafficVolume(
- trafficVolume=trafficVolume,
- dataset=dataset, trafficType=trafficType,
- includeProposalFlights=includeProposalFlights, includeForecastFlights=includeForecastFlights,
- trafficWindow=trafficWindow, requestedFlightFields=requestedFlightFields, sendTime=sendTime)
- return self.tmp_data
\ No newline at end of file
+ client = Client(**self.conf, service_name='FlightManagementService')
+ self.tmp_data = client.service.queryFlightsByTrafficVolume(
+ trafficVolume=trafficVolume,
+ dataset=dataset, trafficType=trafficType,
+ includeProposalFlights=includeProposalFlights, includeForecastFlights=includeForecastFlights,
+ trafficWindow=trafficWindow, requestedFlightFields=requestedFlightFields, sendTime=sendTime,
+ **kwargs)
+ return self.tmp_data
diff --git a/requirements.txt b/requirements.txt
index 8da5792..8d9646b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,5 @@
appdirs==1.4.3
+astroid==2.2.5
attrs==19.1.0
cached-property==1.5.1
certifi==2019.6.16
@@ -6,10 +7,16 @@ chardet==3.0.4
defusedxml==0.6.0
idna==2.8
isodate==0.6.0
+isort==4.3.21
+lazy-object-proxy==1.4.1
lxml==4.3.4
+mccabe==0.6.1
+pylint==2.3.1
pytz==2019.1
requests==2.22.0
requests-toolbelt==0.9.1
six==1.12.0
+typed-ast==1.4.0
urllib3==1.25.3
+wrapt==1.11.2
zeep==3.4.0
diff --git a/set_cert_key.sh b/set_cert_key.sh
new file mode 100644
index 0000000..5f68082
--- /dev/null
+++ b/set_cert_key.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+NBR_RESULTS=$(find ./cert -name '*.p12' | wc -l)
+# NBR_RESULTS=$(find ./venv -name collection.py | wc -l)
+if [ $NBR_RESULTS = '0' ]; then
+ printf "Aucun fichier trouvé avec l'extension .p12 dans cert/"
+ exit 1
+elif [ $NBR_RESULTS -gt '1' ]; then
+ printf "Il existe plusieurs fichiers avec l'extension .p12 dans cert/\nMerci de n'en laisser qu'un seul"
+ exit 1
+else
+ FILE_NAME=$(find ./cert -name '*.p12')
+ #FILE_NAME="${FULL_FILE_NAME%.*}"
+ printf "Un fichier .p12 a bien été trouvé dans /cert.\nQuel est votre mot de passe ?\n"
+ read PASSWORD
+ printf "On créé maintenant les fichier crt.pem et key.pem.\n"
+ #echo "openssl pkcs12 -in ${FILE_NAME} -passin=pass:${PASSWORD} -out ./cert/crt.pem -clcerts -nokeys"
+ openssl pkcs12 -in ${FILE_NAME} -passin=pass:${PASSWORD} -out ./cert/crt.pem -clcerts -nokeys # pour le certificat
+ openssl pkcs12 -in ${FILE_NAME} -passin=pass:${PASSWORD} -out ./cert/key.pem -nocerts -nodes # pour la clé
+fi
+
+# filename=$(basename -- "$fullfile")
+# extension="${filename##*.}"
+# filename="${filename%.*}"
+# b2bcert4dpa2019
\ No newline at end of file
diff --git a/shared_vars.py b/shared_vars.py
index e8ccfed..65b6dc3 100644
--- a/shared_vars.py
+++ b/shared_vars.py
@@ -2,21 +2,15 @@
import os
# -------------------------------------------------------------------
-B2B_PROXY = None
-NM_B2B_API_KEY_ID = os.environ.get('NM_B2B_API_KEY_ID') # default is None
-NM_B2B_API_SECRET = os.environ.get('NM_B2B_API_SECRET') # default is None
-if NM_B2B_API_KEY_ID and NM_B2B_API_SECRET:
- B2B_PROXY = {
- 'key': NM_B2B_API_KEY_ID,
- 'secret': NM_B2B_API_SECRET
- }
-
-
DEFAULT_B2B_VERSION = '23.0.0'
+def get_available_b2b_version_for_soapy():
+ return ['23.0.0']
+# -------------------------------------------------------------------
WSDL_PROXY = "https://wsdl.b2b-proxy.4me.im/23.0.0/"
-
-
+#WSLD_PREOPS_MAIN = "https://www.b2b.preops.nm.eurocontrol.int/"
+WSDL_PREOPS_MAIN="https://www.b2b.preops.nm.eurocontrol.int/FILE_PREOPS/gateway/spec/b2b_publications/23.0.0/B2B_WSDL_XSD.23.0.0.5.81.tar.gz"
+#WSLD_PREOPS_MAIN = "https://www.b2b.nm.eurocontrol.int/"
# -------------------------------------------------------------------
ALLOWED_DATASET = ["OPERATIONAL"]
diff --git a/utils.py b/utils.py
index d4f6749..fd4fe59 100644
--- a/utils.py
+++ b/utils.py
@@ -39,139 +39,4 @@ def get_datetime(nbr_days=0):
def sendTime():
sendTime = f"{datetime.datetime.utcnow().replace(microsecond=0)}"
- return sendTime[:19]
-
-# -------------------------------------------------------------------
-# -------------------------------------------------------------------
-
-# def do_day( when="today"):
-# ''' c'est du generique => le sortir de la classe NMB2B'''
-# aujourdhui = datetime.datetime.utcnow()
-# hier = aujourdhui-datetime.timedelta(days=1)
-# demain = aujourdhui+datetime.timedelta(days=1)
-# ademain = aujourdhui+datetime.timedelta(days=2)
-# day = None
-# if when=='yesterday' : day = hier
-# elif when=='tomorrow' : day = demain
-# elif when=='+1' : day = demain
-# elif when=='+2' : day = ademain
-# else : day = aujourdhui
-# return day.strftime("%Y-%m-%d" )
-
-# def do_creneau( blocname, when="today"):
-# ''' c'est du generique => le sortir de la classe NMB2B'''
-# start,endi = None, None
-# aujourdhui = datetime.datetime.utcnow()
-# hier = aujourdhui-datetime.timedelta(days=1)
-# demain = aujourdhui+datetime.timedelta(days=1)
-# sdemain = aujourdhui+datetime.timedelta(days=2)
-# day = None
-# starttime = "00"
-# endtime = "00"
-# deltaj = datetime.timedelta(days=1)
-
-# if when.startswith("H") and len(when)==2 and int(when[1]) in range(10):
-# starttime = "0"+when[1]
-# endtime = "0%d"%(int(when[1])+1)
-# deltaj = 0
-# if when.startswith("H") and len(when)==3 and int(when[1:]) in range(10,23):
-# starttime = when[1:]
-# endtime = "%d"%(int(when[1:])+1)
-# deltaj = 0
-
-# if when=='yesterday' : day = hier
-# elif when=='tomorrow' : day = demain
-# else : day = aujourdhui
-
-# mstart = "%Y-%m-%d" +" %s:00"%starttime
-# start = datetime.datetime.strftime(day, mstart)
-# end = datetime.datetime.strftime(day+deltaj, "%Y-%m-%d" +" %s:00"%endtime)
-# return "<%s>%s%s%s>"%(blocname, start, end, blocname)
-
-# def autocreneau( when='today'):
-# ''' c'est du generique => le sortir de la classe NMB2B'''
-# if when=="today":
-# pass
-# if when=="yesterday":
-# pass
-# if when=="tomorrow":
-# pass
-
-# def autosendtime():
-# ladate = "%s"%datetime.datetime.utcnow()
-# return "%s"%(ladate[:19])
-
-# def to_file( filename, data):
-# fic = open(filename , "w")
-# fic . write(data)
-# fic . close()
-
-# def save_metrics_to_es(metrics):
-# # TODO : QUID de l'adresse IP ?
-# es = Elasticsearch(host="100.1.1.10")
-# res = es.index(index="nmrequest", doc_type="log", body=metrics)
-
-# def checkdate_YYYYMMDD(ladate):
-# return re.match("\d{4}-\d{2}-\d{2}", ladate) is not None
-
-# def gere_main_args():
-# p = argparse.ArgumentParser()
-# p.add_argument( '--proxy', dest='proxy', default=None)
-# p.add_argument('--elastic-ip', dest='elip', default=None)
-# p.add_argument('--elastic-port', dest='elport', default=None)
-# p.add_argument('--use-metrics', dest='usemetrics', default="no")
-# return p.parse_args()
-
-# def do_dsnaproxy(C):
-# return { 'http':'http://proxy.%s.aviation:8080'%C, 'https': 'https://proxy.%s.aviation:8080'%C }
-
-# dsnaproxies = {
-# "doec" : do_dsnaproxy("crna-n"),
-# "crna-n" : do_dsnaproxy("crna-n"),
-# "crna-e" : do_dsnaproxy("crna-e"),
-# }
-
-# nmb2bnamespaces={
-# "fw" : "eurocontrol/cfmu/b2b/FlowServices" ,
-# "as" : "eurocontrol/cfmu/b2b/AirspaceServices" ,
-# "fl" : "eurocontrol/cfmu/b2b/FlightServices",
-# "gi" : "eurocontrol/cfmu/b2b/GeneralinformationServices" ,
-# "cm" : "eurocontrol/cfmu/b2b/CommonServices",
-# "ns0" : "http://www.fixm.aero/base/4.0" ,
-# "ns2" : "http://www.fixm.aero/flight/4.0",
-# "xsi" : "http://www.w3.org/2001/XMLSchema-instance",
-# "S" : "http://schemas.xmlsoap.org/soap/envelope/",
-# "ps" : "eurocontrol/cfmu/b2b/PublishsubscribeServices"
-# }
-
-
-# def envelopper(self, req):
-# ''' remplacer la partie namespaces en constante , ca allegera le code '''
-# return ''' %s'''%(req)
-
-
-# def save_xml(self):
-# if not self.request is None :
-# requestfilename = "requetes/request-%s-%s.xml"%(self.name, self.request["ts-start"])
-# responsefilename = "requetes/response-%s-%s.xml"%(self.name, self.request["ts-start"])
-# self.to_file(requestfilename, self.request["request"])
-# self.to_file(responsefilename, self.request["data"])
-
-# def logguer_metriques(self, requete):
-# es = Elasticsearch(host="100.1.1.10")
-# res = es.index(index="nmrequest", doc_type="log", body=requete)
+ return sendTime[:19]
\ No newline at end of file