コード例 #1
0
ファイル: api.py プロジェクト: BenPortner/pywind
    def get_data(self, **params):
        """ Get data from the Elexon servers and attempt to parse it into a series of
            dicts each representing a record. Parameters are passed as a dict.
            Multiple sets of data are created in the multi member, single sets in items.
        """
        if self.report is None:
            raise Exception(
                "ElexonAPI objects require the report be set before use.")
        if self.apikey is None:
            raise Exception(
                "An API key is required to use the Elexon API accessor functionality"
            )

        url = make_elexon_url(self.report, self.version)
        params.update({'APIKey': self.apikey, 'ServiceType': 'xml'})
        req = get_or_post_a_url(url, params=params)
        #        print(req.content)
        xml = parse_response_as_xml(req)
        http = xml.xpath('/response/responseMetadata/httpCode')
        response_code = int(http[0].text)
        if response_code == 204:
            print("No content returned, but no error reported.")
            return True
        elif response_code != 200:
            print("No data returned. Error reported.")
            err = xml.xpath('/response/responseMetadata/description')
            print(err[0].text)
            return False

        if self.MULTI_RESULTS is None:
            for item in xml.xpath('/response/responseBody/responseList/item'):
                item_dict = map_xml_to_dict(item, self.XML_MAPPING)

                if 'activeflag' in item_dict:
                    item_dict['activeflag'] = item_dict['activeflag'] == 'Y'
                if 'settlementperiod' in item_dict:
                    item_dict['settlementperiod'] = int(
                        item_dict['settlementperiod'])

                self.post_item_cleanup(item_dict)
                self.items.append(item_dict)
        else:
            for result_set in self.MULTI_RESULTS:
                self.multi[result_set[0]] = []
                for item in xml.xpath(result_set[1]):
                    item_dict = map_xml_to_dict(item, self.XML_MAPPING)
                    if 'activeFlags' in item_dict:
                        item_dict['activeflag'] = item_dict[
                            'activeflag'] == 'Y'
                    if 'settlementperiod' in item_dict:
                        item_dict['settlementperiod'] = int(
                            item_dict['settlementperiod'])

                    self.post_item_cleanup(item_dict)
                    #                    print(item_dict)
                    self.multi[result_set[0]].append(item_dict)

        return True
コード例 #2
0
ファイル: api.py プロジェクト: zathras777/pywind
    def get_data(self, **params):
        """ Get data from the Elexon servers and attempt to parse it into a series of
            dicts each representing a record. Parameters are passed as a dict.
            Multiple sets of data are created in the multi member, single sets in items.
        """
        if self.report is None:
            raise Exception("ElexonAPI objects require the report be set before use.")
        if self.apikey is None:
            raise Exception("An API key is required to use the Elexon API accessor functionality")

        url = make_elexon_url(self.report, self.version)
        params.update({'APIKey': self.apikey, 'ServiceType': 'xml'})
        req = get_or_post_a_url(url, params=params)
#        print(req.content)
        xml = parse_response_as_xml(req)
        http = xml.xpath('/response/responseMetadata/httpCode')
        response_code = int(http[0].text)
        if response_code == 204:
            print("No content returned, but no error reported.")
            return True
        elif response_code != 200:
            print("No data returned. Error reported.")
            err = xml.xpath('/response/responseMetadata/description')
            print(err[0].text)
            return False

        if self.MULTI_RESULTS is None:
            for item in xml.xpath('/response/responseBody/responseList/item'):
                item_dict = map_xml_to_dict(item, self.XML_MAPPING)

                if 'activeflag' in item_dict:
                   item_dict['activeflag'] = item_dict['activeflag'] == 'Y'
                if 'settlementperiod' in item_dict:
                    item_dict['settlementperiod'] = int(item_dict['settlementperiod'])

                self.post_item_cleanup(item_dict)
                self.items.append(item_dict)
        else:
            for result_set in self.MULTI_RESULTS:
                self.multi[result_set[0]] = []
                for item in xml.xpath(result_set[1]):
                    item_dict = map_xml_to_dict(item, self.XML_MAPPING)
                    if 'activeFlags' in item_dict:
                       item_dict['activeflag'] = item_dict['activeflag'] == 'Y'
                    if 'settlementperiod' in item_dict:
                        item_dict['settlementperiod'] = int(item_dict['settlementperiod'])

                    self.post_item_cleanup(item_dict)
#                    print(item_dict)
                    self.multi[result_set[0]].append(item_dict)

        return True
コード例 #3
0
ファイル: objects.py プロジェクト: zathras777/pywind
    def __init__(self, node):
        """ Extract information from the supplied XML node.
            The factor figure is MWh per certificate.
        """
        if self.XML_MAPPING is None:
            raise NotImplementedError("Child classes should define their XML_MAPPING")

        self.attrs = map_xml_to_dict(node, self.XML_MAPPING)
コード例 #4
0
ファイル: objects.py プロジェクト: ragnag/pywind
    def __init__(self, node):
        """ Extract information from the supplied XML node.
            The factor figure is MWh per certificate.
        """
        if self.XML_MAPPING is None:
            raise NotImplementedError(
                "Child classes should define their XML_MAPPING")

        self.attrs = map_xml_to_dict(node, self.XML_MAPPING)
コード例 #5
0
ファイル: utils_test.py プロジェクト: arctellion/pywind
    def test_map_xml_to_dict(self):
        """ Test mapping from XML to dict using a mapping tuple.
        """
        NSMAP = {'a': 'CertificatesExternalPublicDataWarehouse'}
        with open(os.path.join(self.HERE, 'files', 'certificate_test.xml'), 'r') as xfh:
            xml = etree.parse(xfh)

        for detail in xml.getroot().xpath('.//a:Detail', namespaces=NSMAP):
            rv_dict = map_xml_to_dict(detail, Certificates.XML_MAPPING)
            self.assertIsInstance(rv_dict, dict)
            self.assertEqual(len(rv_dict), 17)
            self.assertIsInstance(rv_dict['factor'], float)
            self.assertIsInstance(rv_dict['issue_dt'], datetime.date)
            self.assertTrue('name' in rv_dict)
            self.assertNotEqual(len(rv_dict['name']), 0)
            self.assertGreater(rv_dict['capacity'], 0)
            self.assertGreater(len(rv_dict['scheme']), 0)
コード例 #6
0
ファイル: utils_test.py プロジェクト: ragnag/pywind
    def test_map_xml_to_dict(self):
        """ Test mapping from XML to dict using a mapping tuple.
        """
        NSMAP = {'a': 'CertificatesExternalPublicDataWarehouse'}
        with open(os.path.join(self.HERE, 'files', 'certificate_test.xml'),
                  'r') as xfh:
            xml = etree.parse(xfh)

        for detail in xml.getroot().xpath('.//a:Detail', namespaces=NSMAP):
            rv_dict = map_xml_to_dict(detail, Certificates.XML_MAPPING)
            self.assertIsInstance(rv_dict, dict)
            self.assertEqual(len(rv_dict), 17)
            self.assertIsInstance(rv_dict['factor'], float)
            self.assertIsInstance(rv_dict['issue_dt'], datetime.date)
            self.assertTrue('name' in rv_dict)
            self.assertNotEqual(len(rv_dict['name']), 0)
            self.assertGreater(rv_dict['capacity'], 0)
            self.assertGreater(len(rv_dict['scheme']), 0)