Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
 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 "===="