def test_found_currency(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.93
     ^EUR
     ''')
     converter = QifConverter(qiftext)
     ofx102 = converter.to_ofx102()
     self.assertTrue(ofx102.find('<CURDEF>EUR') != -1)
Beispiel #2
0
 def test_explicit_currency(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.93
     ^
     ''')
     converter = QifConverter(qiftext, curdef='GBP')
     ofx102 = converter.to_ofx102()
     self.assertTrue(ofx102.find('<CURDEF>GBP') != -1)
Beispiel #3
0
 def test_found_currency(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.93
     ^EUR
     ''')
     converter = QifConverter(qiftext)
     ofx102 = converter.to_ofx102()
     self.assertTrue(ofx102.find('<CURDEF>EUR') != -1)
 def test_explicit_currency(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.93
     ^
     ''')
     converter = QifConverter(qiftext, curdef='GBP')
     ofx102 = converter.to_ofx102()
     self.assertTrue(ofx102.find('<CURDEF>GBP') != -1)
Beispiel #5
0
 def test_no_stmttype(self):
     qiftext = textwrap.dedent('''\
     D01/13/2005
     ^
     ''')
     converter = QifConverter(qiftext)
     self.assertEqual(converter.accttype, "CHECKING")
Beispiel #6
0
 def test_ccard_stmttype(self):
     qiftext = textwrap.dedent('''\
     !Type:CCard
     D01/13/2005
     ^
     ''')
     converter = QifConverter(qiftext)
     self.assertEqual(converter.accttype, "CREDITCARD")
Beispiel #7
0
 def test_uk_date(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D13/01/2005
     ^
     ''')
     converter = QifConverter(qiftext)
     self.assertTrue("20050113" in converter.txns_by_date)
Beispiel #8
0
 def test_ambiguous_date(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D12/01/2005
     ^
     ''')
     converter = QifConverter(qiftext)
     self.assertTrue("20051201" in converter.txns_by_date)
Beispiel #9
0
 def test_no_txns(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     ''')
     today = strftime("%Y%m%d", localtime())
     converter = QifConverter(qiftext)
     self.assertEqual(converter.start_date, today)
     self.assertEqual(converter.end_date, today)
Beispiel #10
0
 def test_bad_amount_precision(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.930
     ^
     ''')
     converter = QifConverter(qiftext)
     txn = converter.txns_by_date["20070125"][0]
     self.assertEqual(txn["Amount"], "417.93")
Beispiel #11
0
 def test_amount2(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D02/01/2005
     U25.42
     ^
     ''')
     converter = QifConverter(qiftext)
     txn = converter.txns_by_date["20050201"][0]
     self.assertEqual(txn["Amount"], "25.42")
Beispiel #12
0
 def test_trailing_minus(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D08/06/2008
     T26.24-
     ^
     ''')
     converter = QifConverter(qiftext)
     txn = converter.txns_by_date["20080806"][0]
     self.assertEqual(txn["Amount"], "-26.24")
Beispiel #13
0
 def test_check_stmt_number(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.93
     N1234
     ^
     ''')
     converter = QifConverter(qiftext)
     txn = converter.txns_by_date["20070125"][0]
     self.assertEqual(txn.get("Type"), "CHECK")
Beispiel #14
0
 def test_creditcard_stmt_number(self):
     qiftext = textwrap.dedent('''\
     !Type:CCard
     D01/25/2007
     T417.93
     N1234
     ^
     ''')
     converter = QifConverter(qiftext)
     txn = converter.txns_by_date["20070125"][0]
     self.assertEqual("Number" in txn, False)
Beispiel #15
0
 def test_n_a_number(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/25/2007
     T417.93
     NN/A
     ^
     ''')
     converter = QifConverter(qiftext)
     txn = converter.txns_by_date["20070125"][0]
     self.assertEqual("Number" in txn, False)
Beispiel #16
0
 def test_mixed_us_dates(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D01/12/2005
     ^
     D01/13/2005
     ^
     ''')
     converter = QifConverter(qiftext)
     self.assertTrue("20050112" in converter.txns_by_date)
     self.assertTrue("20050113" in converter.txns_by_date)
Beispiel #17
0
 def test_dash_amount(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D02/01/2005
     T25.42
     ^
     D02/01/2005
     T-
     ^
     ''')
     converter = QifConverter(qiftext)
     txn_list = converter.txns_by_date["20050201"]
     self.assertEqual(len(txn_list), 1)
     txn = txn_list[0]
     self.assertEqual(txn["Amount"], "25.42")
Beispiel #18
0
 def test_mixed_dates(self):
     qiftext = textwrap.dedent('''\
     !Type:Bank
     D02/01/2005
     ^
     D02/13/2005
     ^
     D01/13/2005
     ^
     D02/01/2005
     ^
     D01/27/2005
     ^
     ''')
     converter = QifConverter(qiftext)
     self.assertEqual(converter.start_date, "20050113")
     self.assertEqual(converter.end_date, "20050213")
     self.assertEqual(len(list(converter.txns_by_date.keys())), 4)
Beispiel #19
0
def convert(filecontent,
            filetype,
            verbose=False,
            fid="UNKNOWN",
            org="UNKNOWN",
            bankid="UNKNOWN",
            accttype="UNKNOWN",
            acctid="UNKNOWN",
            balance="UNKNOWN",
            curdef=None,
            lang="ENG",
            dayfirst=False,
            debug=False):

    text = os.linesep.join(s for s in filecontent.splitlines() if s)

    # This finishes a verbosity message started by the caller, where the
    # caller explains the source command-line option and this explains the
    # source format.
    if verbose:
        sys.stderr.write("Converting from %s format.\n" % filetype)

    if options.debug and (filetype in ["OFC", "QIF"]
                          or filetype.startswith("OFX")):
        sys.stderr.write("Starting work on raw text:\n")
        sys.stderr.write(rawtext + "\n\n")

    if filetype.startswith("OFX/2"):
        if verbose:
            sys.stderr.write("No conversion needed; returning unmodified.\n")

        # The file is already OFX 2 -- return it unaltered, ignoring
        # any of the parameters passed to this method.
        return text

    elif filetype.startswith("OFX"):
        if verbose: sys.stderr.write("Converting to OFX/2.0...\n")

        # This will throw a ParseException if it is unable to recognize
        # the source format.
        response = Response(text, debug=debug)
        return response.as_xml(original_format=filetype)

    elif filetype == "OFC":
        if verbose: sys.stderr.write("Beginning OFC conversion...\n")
        converter = OfcConverter(text,
                                 fid=fid,
                                 org=org,
                                 curdef=curdef,
                                 lang=lang,
                                 debug=debug)

        # This will throw a ParseException if it is unable to recognize
        # the source format.
        if verbose:
            sys.stderr.write("Converting to OFX/1.02...\n\n%s\n\n" %
                             converter.to_ofx102())
            sys.stderr.write("Converting to OFX/2.0...\n")

        return converter.to_xml()

    elif filetype == "QIF":
        if verbose: sys.stderr.write("Beginning QIF conversion...\n")
        converter = QifConverter(text,
                                 fid=fid,
                                 org=org,
                                 bankid=bankid,
                                 accttype=accttype,
                                 acctid=acctid,
                                 balance=balance,
                                 curdef=curdef,
                                 lang=lang,
                                 dayfirst=dayfirst,
                                 debug=debug)

        # This will throw a ParseException if it is unable to recognize
        # the source format.
        if verbose:
            sys.stderr.write("Converting to OFX/1.02...\n\n%s\n\n" %
                             converter.to_ofx102())
            sys.stderr.write("Converting to OFX/2.0...\n")

        return converter.to_xml()

    else:
        raise TypeError("Unable to convert source format '%s'." % filetype)