import os import glob import gzip import filer MEMBER_FUDI = '/home/ernad/var/membership' MEMBERSHIP_FUFI = '/tmp/membership.json.gz' def member_data(): out = {} out['emads'] = {} for report_fudi in glob.glob(MEMBER_FUDI + '/*'): repcode = os.path.basename(report_fudi) collect_for_report(repcode, out) # # delete the until if it is the last date for emad in out['emads']: for repcode in out['emads'][emad]: if 'until' not in out['emads'][emad][repcode]: continue until = out['emads'][emad][repcode]['until'] if until == out[repcode]['last_date']: del out['emads'][emad][repcode]['until'] filer.dump(out, MEMBERSHIP_FUFI) def collect_for_report(repcode, out): report_fudi = MEMBER_FUDI + '/' + repcode out[repcode] = {} for year_fudi in sorted(glob.glob(report_fudi + '/*')): # print(year_fudi) for date_file in sorted(glob.glob(year_fudi + '/*')): read(date_file, out, repcode) # print(out) def read(fufi, out, repcode): bana = os.path.basename(fufi) date = bana[8:18] out[repcode]['last_date'] = date # print(date) if(fufi[-3:] != '.gz'): the_file = open(fufi, 'r') else: the_file = gzip.GzipFile(fufi, 'r') while (line := the_file.readline().rstrip()): if isinstance(line, bytes): try: emad = line.decode() except UnicodeDecodeError: emad = line.decode('cp1252') #print(line) #print(emad) # continue else: emad = line # print(emad) if emad not in out['emads']: out['emads'][emad] = {} if repcode not in out['emads'][emad]: out['emads'][emad][repcode] = {} out['emads'][emad][repcode]['from'] = date continue out['emads'][emad][repcode]['until'] = date