From bea2e02253e3a08cf85017e5ed5a0948d11d5ae5 Mon Sep 17 00:00:00 2001 From: dandds Date: Wed, 12 Jun 2019 13:42:55 -0400 Subject: [PATCH] Remove unused EDA client code --- atst/app.py | 6 - atst/eda_client.py | 197 ------------------------------- script/example_fetch_from_eda.py | 38 ------ tests/test_eda_client.py | 57 --------- 4 files changed, 298 deletions(-) delete mode 100644 atst/eda_client.py delete mode 100644 script/example_fetch_from_eda.py delete mode 100644 tests/test_eda_client.py diff --git a/atst/app.py b/atst/app.py index ccecd534..af9f1a0c 100644 --- a/atst/app.py +++ b/atst/app.py @@ -24,7 +24,6 @@ from atst.domain.authz import Authorization from atst.domain.csp import make_csp_provider from atst.domain.portfolios import Portfolios from atst.models.permissions import Permissions -from atst.eda_client import MockEDAClient from atst.utils import mailer from atst.utils.form_cache import FormCache from atst.utils.json import CustomJSONEncoder @@ -61,7 +60,6 @@ def make_app(config): make_flask_callbacks(app) register_filters(app) - make_eda_client(app) make_csp_provider(app) make_crl_validator(app) make_mailer(app) @@ -235,10 +233,6 @@ def make_crl_validator(app): ) -def make_eda_client(app): - app.eda_client = MockEDAClient() - - def make_mailer(app): if app.config["DEBUG"]: mailer_connection = mailer.RedisConnection(app.redis) diff --git a/atst/eda_client.py b/atst/eda_client.py deleted file mode 100644 index fe56cd0a..00000000 --- a/atst/eda_client.py +++ /dev/null @@ -1,197 +0,0 @@ -from csv import DictReader -import defusedxml.ElementTree as ET - -import requests -from requests.auth import HTTPBasicAuth - - -def parse_eda_xml(xml_string): - contract_et = ET.fromstring(xml_string) - handler = EDAXMLHandler(contract_et) - handler.parse() - return { - "clin_0001": handler.clins.get("0001"), - "clin_0003": handler.clins.get("0003"), - "clin_1001": handler.clins.get("1001"), - "clin_1003": handler.clins.get("1003"), - "clin_2001": handler.clins.get("2001"), - "clin_2003": handler.clins.get("2003"), - } - - -class EDAXMLHandler: - def __init__(self, element_tree): - self.element_tree = element_tree - self.clins = {} - - @property - def _line_items(self): - return self.element_tree.findall(".//LineItem[LineItemType='CLIN']/../../..") - - def parse(self): - for line_item in self._line_items: - number_el = line_item.find(".//LineItemBase") - amount_details = line_item.find( - ".//ItemOtherAmounts[AmountDescription='Not to Exceed Amount (Funding)']/Amount" - ) - if number_el is not None and amount_details is not None: - try: - self.clins[number_el.text] = float(amount_details.text) - except ValueError: - continue - - -class EDAClientBase(object): - def list_contracts( - self, - contract_number=None, - delivery_order=None, - cage_code=None, - duns_number=None, - ): - """ - Get a list of all contracts matching the given filters. - """ - raise NotImplementedError() - - def get_contract(self, contract_number, status): - """ - Get details for a contract. - """ - raise NotImplementedError() - - -class MockEDAClient(EDAClientBase): - def __init__(self, *args, **kwargs): - pass - - def list_contracts( - self, - contract_number=None, - delivery_order=None, - cage_code=None, - duns_number=None, - ): - return [ - { - "aco_mod": "01", - "admin_dodaac": None, - "cage_code": "1U305", - "contract_no": "DCA10096D0052", - "delivery_order": "0084", - "duns_number": None, - "issue_date": "20000228", - "issue_dodaac": None, - "location": "https://docsrv1.nit.disa.mil:443/eda/enforcer/C0414345.PDF?ver=1.4&loc=Y29udHJhY3RzL29nZGVuL3ZlbmRvci8xOTk4LzA5LzE0L0MwNDE0MzQ1LlBERg==&sourceurl=aHR0cHM6Ly9lZGE0Lm5pdC5kaXNhLm1pbC9wbHMvdXNlci9uZXdfYXBwLkdldF9Eb2M_cFRhYmxlX0lEPTImcFJlY29yZF9LZXk9OEE2ODExNjM2RUY5NkU2M0UwMzQwMDYwQjBCMjgyNkM=&uid=6CFC2B2322E86FD5E054002264936E3C&qid=19344159&signed=G&qdate=20180529194407GMT&token=6xQICrrrfIMciEJSpXmfsAYrToM=", - "pay_dodaac": None, - "pco_mod": "02", - }, - { - "aco_mod": "01", - "admin_dodaac": None, - "cage_code": "1U305", - "contract_no": "DCA10096D0052", - "delivery_order": "0084", - "duns_number": None, - "issue_date": "20000228", - "issue_dodaac": None, - "location": "https://docsrv1.nit.disa.mil:443/eda/enforcer/C0414345.PDF?ver=1.4&loc=Y29udHJhY3RzL29nZGVuL3ZlbmRvci8xOTk4LzA5LzE0L0MwNDE0MzQ1LlBERg==&sourceurl=aHR0cHM6Ly9lZGE0Lm5pdC5kaXNhLm1pbC9wbHMvdXNlci9uZXdfYXBwLkdldF9Eb2M_cFRhYmxlX0lEPTImcFJlY29yZF9LZXk9OEE2ODExNjM2RUY5NkU2M0UwMzQwMDYwQjBCMjgyNkM=&uid=6CFC2B2322E86FD5E054002264936E3C&qid=19344159&signed=G&qdate=20180529194407GMT&token=6xQICrrrfIMciEJSpXmfsAYrToM=", - "pay_dodaac": None, - "pco_mod": "02", - }, - { - "aco_mod": "01", - "admin_dodaac": None, - "cage_code": "1U305", - "contract_no": "DCA10096D0052", - "delivery_order": "0084", - "duns_number": None, - "issue_date": "20000228", - "issue_dodaac": None, - "location": "https://docsrv1.nit.disa.mil:443/eda/enforcer/C0414345.PDF?ver=1.4&loc=Y29udHJhY3RzL29nZGVuL3ZlbmRvci8xOTk4LzA5LzE0L0MwNDE0MzQ1LlBERg==&sourceurl=aHR0cHM6Ly9lZGE0Lm5pdC5kaXNhLm1pbC9wbHMvdXNlci9uZXdfYXBwLkdldF9Eb2M_cFRhYmxlX0lEPTImcFJlY29yZF9LZXk9OEE2ODExNjM2RUY5NkU2M0UwMzQwMDYwQjBCMjgyNkM=&uid=6CFC2B2322E86FD5E054002264936E3C&qid=19344159&signed=G&qdate=20180529194407GMT&token=6xQICrrrfIMciEJSpXmfsAYrToM=", - "pay_dodaac": None, - "pco_mod": "02", - }, - ] - - MOCK_CONTRACT_NUMBER = "DCA10096D0052" - - def get_contract(self, contract_number, status): - if contract_number == self.MOCK_CONTRACT_NUMBER and status == "y": - return { - "number": "DCA10096D0052", - "clin_0001": 500, - "clin_0003": 600, - "clin_1001": 700, - "clin_1003": 800, - "clin_2001": 900, - "clin_2003": 1000, - } - else: - return None - - -class EDAClient(EDAClientBase): - def __init__(self, base_url, user_name, user_role, auth_name, auth_pass): - self.base_url = base_url - self.user_name = user_name - self.user_role = user_role - self.auth = HTTPBasicAuth(auth_name, auth_pass) - - def _make_url(self, method, **kwargs): - query_args = dict(kwargs) - query_string = "&".join( - ["{}={}".format(key, value) for key, value in query_args.items()] - ) - return "{base_url}/{method}?{query_string}".format( - base_url=self.base_url, method=method, query_string=query_string - ) - - def _get(self, method, **kwargs): - url = self._make_url(method, **kwargs) - return requests.get(url, auth=self.auth, verify="ssl/server-certs/eda.pem") - - def list_contracts( - self, - contract_number=None, - delivery_order=None, - cage_code=None, - duns_number=None, - ): - response = self._get( - "wawf_interface.returnContractList", - pContract=contract_number, - pDelivery_Order=delivery_order, - pCage_Code=cage_code, - pDuns_Number=duns_number, - pUserName=self.user_name, - pUser_Role=self.user_role, - ) - lines = response.text.replace("
", "").split("\n") - return list(DictReader(lines)) - - def get_contract(self, contract_number, status): - response = self._get( - "pds_contract_interface.get_xml_doc", - pContract=contract_number, - pStatus=status, - ) - if response.text.startswith("No data found"): - return None - - eda_data = {"number": contract_number} - eda_data.update(parse_eda_xml(response.text)) - return eda_data - - def get_clins(self, record_key, clins, cage_code="", duns_number=""): - response = self._get( - "wawf_interface.returnclinXML", - pCage_Code=cage_code, - pDuns_Number=duns_number, - pUserName=self.user_name, - pUser_Role=self.user_role, - pRecord_key=record_key, - pClins=clins, - ) - # TODO: Parse XML, similar to `get_contract` - return response diff --git a/script/example_fetch_from_eda.py b/script/example_fetch_from_eda.py deleted file mode 100644 index dc297347..00000000 --- a/script/example_fetch_from_eda.py +++ /dev/null @@ -1,38 +0,0 @@ -# Add root project dir to the python path -import os -import sys - -parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) -sys.path.append(parent_dir) - -from atst.app import make_config, make_app -from atst.eda_client import EDAClient - - -config = make_config({"DISABLE_CRL_CHECK": True}) - -client = EDAClient( - base_url=config.get("EDA_HOST"), - user_name=config.get("EDA_USER_NAME"), - user_role=config.get("EDA_USER_ROLE"), - auth_name=config.get("EDA_AUTH_NAME"), - auth_pass=config.get("EDA_AUTH_PASS"), -) - -contract_number = "DCA10096D0052" - -listed = client.list_contracts( - contract_number=contract_number, - delivery_order="", - cage_code="1U305", - duns_number="", -) -contract = client.get_contract(contract_number=contract_number, status="Y") - -requested_clins = ",".join(["'0001'", "'0003'", "'1001'", "'1003'", "'2001'", "'2003'"]) -clins = client.get_clins( - record_key=contract_number, - duns_number="", - cage_code="1U305", - with_clins=requested_clins, -) diff --git a/tests/test_eda_client.py b/tests/test_eda_client.py deleted file mode 100644 index 787ba8c8..00000000 --- a/tests/test_eda_client.py +++ /dev/null @@ -1,57 +0,0 @@ -from atst.eda_client import MockEDAClient, parse_eda_xml - - -mock_client = MockEDAClient() - - -def test_list_contracts(): - results = mock_client.list_contracts() - assert len(results) == 3 - - -def test_get_contract(): - result = mock_client.get_contract("DCA10096D0052", "y") - assert result["number"] == "DCA10096D0052" - - -def test_contract_not_found(): - result = mock_client.get_contract("abc", "y") - assert result is None - - -def test_eda_xml_parser(): - with open("tests/fixtures/eda_contract.xml") as contract: - eda_data = parse_eda_xml(contract.read()) - assert eda_data["clin_0001"] == 200_000.00 - assert not eda_data["clin_0003"] - - -_EDA_XML_NO_NUMBER = """ - - - - - - - - CLIN - 0001 - - - - - - Not to Exceed Amount (Funding) - not a number - - - - - - -""" - - -def test_eda_xml_parser_with_bad_xml(): - eda_data = parse_eda_xml(_EDA_XML_NO_NUMBER) - assert eda_data["clin_0001"] is None