File indexing completed on 2024-04-21 15:58:51

0001 #!/usr/bin/env python3
0002 # -*- coding: utf-8 -*-
0003 #***************************************************************************
0004 #* SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr
0005 #* SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr
0006 #* SPDX-License-Identifier: GPL-3.0-or-later
0007 #***************************************************************************
0008 
0009 import csv
0010 import requests
0011 import urllib3
0012 import ssl
0013 
0014 class CustomHttpAdapter (requests.adapters.HTTPAdapter):
0015     # "Transport adapter" that allows us to use custom ssl_context.
0016 
0017     def __init__(self, ssl_context=None, **kwargs):
0018         self.ssl_context = ssl_context
0019         super().__init__(**kwargs)
0020 
0021     def init_poolmanager(self, connections, maxsize, block=False):
0022         self.poolmanager = urllib3.poolmanager.PoolManager(
0023             num_pools=connections, maxsize=maxsize,
0024             block=block, ssl_context=self.ssl_context)
0025 
0026 
0027 def get_legacy_session():
0028     ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
0029     ctx.options |= 0x4  # OP_LEGACY_SERVER_CONNECT
0030     session = requests.session()
0031     session.mount('https://', CustomHttpAdapter(ctx))
0032     return session
0033 
0034 url = 'https://stats.oecd.org/sdmx-json/data/DP_LIVE/.CPI.TOT.AGRWTH.A/OECD?contentType=csv&detail=code&separator=comma&startPeriod=1980'
0035 resp = get_legacy_session().get(url)
0036 reader = csv.reader(resp.text.split('\n'), delimiter=',')
0037 data = {}
0038 next(reader, None)  # skip the headers
0039 for row in reader:
0040     if len(row)>0:
0041         if row[0] not in data:
0042             data[row[0]] = []
0043         data[row[0]].append((row[5], row[6], 1))
0044 for attr, value in data.items():
0045     value.sort(key=lambda x: x[0], reverse=True)
0046     computed = []
0047     cumul = 1
0048     for i, x in enumerate(value):
0049         computed.append((x[0], cumul))
0050         cumul *= (1+float(x[1])/100)
0051 
0052     with open('inflation_'+attr.lower()+'.csv', 'w') as fw:
0053         writer = csv.writer(fw, lineterminator="\n")
0054         writer.writerow(("Date","Price"))
0055         for row in computed:
0056             writer.writerow(row)
0057     print(attr.lower()+',', end = '')
0058 print()