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()