def collate_postcards(postcards, page=1): # Collate postcards into a list per type and sender. type_sender_postcards = defaultdict(list) for letter in postcards: key = (letter['type'], letter['sender']) type_sender_postcards[key].append(letter) files = [] jobs = [] for (postcard_type, sender), letters in type_sender_postcards.iteritems(): files.append( os.path.join(os.path.dirname(__file__), "postcards", "{}.pdf".format(postcard_type))) jobs.append({ "startingPage": page + len(files) - 1, "endingPage": page + len(files) - 1, "recipients": [ fix_lines(addresscleaner.parse_address(letter['recipient'])) for letter in letters ], "sender": addresscleaner.parse_address(sender), "type": "postcard", }) return files, jobs, page + len(files)
def collate_letters(mailing_dir, letters, page=1): # Sort by recipient. recipient_letters = defaultdict(list) for letter in letters: recipient_letters[(letter['recipient'], letter['sender'])].append(letter) # Assemble list of files and jobs. files = [] jobs = {} for (recipient, sender), letters in recipient_letters.iteritems(): count = 0 for letter in letters: filename = os.path.join(mailing_dir, letter["file"]) files.append(filename) count += count_pages(filename) end = page + count jobs[recipient] = { "startingPage": page, "endingPage": end - 1, "recipients": [fix_lines(addresscleaner.parse_address(recipient))], "sender": addresscleaner.parse_address(sender), "type": "letter" } page = end vals = jobs.values() vals.sort(key=lambda j: j['startingPage']) return files, vals, page
def collate_postcards(postcards, page=1): # Collate postcards into a list per type and sender. type_sender_postcards = defaultdict(list) for letter in postcards: key = (letter['type'], letter['sender']) type_sender_postcards[key].append(letter) files = [] jobs = [] for (postcard_type, sender), letters in type_sender_postcards.iteritems(): files.append(os.path.join( os.path.dirname(__file__), "postcards", "{}.pdf".format(postcard_type) )) jobs.append({ "startingPage": page + len(files) - 1, "endingPage": page + len(files) - 1, "recipients": [ fix_lines(addresscleaner.parse_address(letter['recipient'])) for letter in letters ], "sender": addresscleaner.parse_address(sender), "type": "postcard", }) return files, jobs, page + len(files)
def test_cases(self): filename = os.path.join(os.path.dirname(__file__), "test_cases") with codecs.open(filename, 'r', 'utf-8') as fh: raw = fh.read() parts = raw.split("====") for part in parts: if not part.strip(): continue txt, jsontxt = part.split("----") expected = json.loads(jsontxt) actual = parse_address(txt) self.assertEquals(actual, expected)
def main(filename): with open(filename) as fh: data = json.load(fh) for d in data: try: parsed = parse_address(d) except Exception: continue dct = OrderedDict() for key in order: if key in parsed: dct[key] = parsed[key] print d.encode('utf-8') print "----" print json.dumps(dct, indent=2).encode('utf-8') print "===="