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)
def test_no_stmttype(self): qiftext = textwrap.dedent('''\ D01/13/2005 ^ ''') converter = QifConverter(qiftext) self.assertEqual(converter.accttype, "CHECKING")
def test_ccard_stmttype(self): qiftext = textwrap.dedent('''\ !Type:CCard D01/13/2005 ^ ''') converter = QifConverter(qiftext) self.assertEqual(converter.accttype, "CREDITCARD")
def test_uk_date(self): qiftext = textwrap.dedent('''\ !Type:Bank D13/01/2005 ^ ''') converter = QifConverter(qiftext) self.assertTrue("20050113" in converter.txns_by_date)
def test_ambiguous_date(self): qiftext = textwrap.dedent('''\ !Type:Bank D12/01/2005 ^ ''') converter = QifConverter(qiftext) self.assertTrue("20051201" in converter.txns_by_date)
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)
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")
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")
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")
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")
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)
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)
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)
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")
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)
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)