def test_07_parse_real_file_and_render_as_xml(self): ''' Parse a real file ''' parser = OFXParser(open(self.path + 'real_file_no_headers.ofx').read()) ofx_tree = parser.parse() print ofx_tree.xml_repr()
def test_03_closing_tag_file(self): ''' Parse a basic set of tokens ''' parser = OFXParser(open(self.path + 'closing_tag.ofx').read()) tag = parser._OFXParser__read_tag() self.assertTrue(tag.type == tag.TYPE_CLOSING) self.assertTrue(tag.name == 'STATUS')
def test_08_parse_real_file(self): ''' Parse a real file ''' parser = OFXParser(open(self.path + 'real_file_no_headers.ofx').read()) OFX = parser.parse() sl = render_as_DOT(OFX) print for e in sl: print e.export_as_csv()
def test_04_selfclosing_tag_file(self): ''' Parse a basic set of tokens ''' parser = OFXParser(open(self.path + 'selfclosing_tag.ofx').read()) tag = parser._OFXParser__read_tag() self.assertTrue(tag.type == tag.TYPE_SELFCLOSING) self.assertTrue(tag.name == 'CODE') self.assertTrue(tag.value == 'this is a value with 1 number and 2 special chars :(')
def test_06_parse_real_file_as_token_list(self): """ Parse a real file """ parser = OFXParser(open(self.path + 'real_file_no_headers.ofx').read()) print tag = parser._OFXParser__read_tag() while tag is not None: print "%-20s|%-20s|%s " % (tag.get_type_name(), tag.name, tag.value) tag = parser._OFXParser__read_tag()
def test_05_real_ofx_content(self): """ Parse a basic set of tokens """ parser = OFXParser(open(self.path + 'real_file_no_headers.ofx').read()) OFX = parser.parse() try: print OFX.BANKMSGSRSV1.notag except AttributeError, msg: self.assertTrue( msg.message == "OFX.BANKMSGSRSV1 has no 'notag' child node.")
def test_09_parse_then_inspect_headers_then_content(self): """ Open a real file, parse it, then inspect headers, then content """ parser = OFXParser( open(self.path + 'real_file_with_headers.ofx', 'U').read()) OFX = parser.parse() print "\nTest 9: parse then inspect headers and content:" self.assertTrue(parser.OFX_headers['VERSION'] == '102') self.assertTrue(parser.OFX_headers['CHARSET'] == '1252') self.assertTrue(OFX.BANKMSGSRSV1.STMTTRNRS.TRNUID.val == '41425367824')
def test_03_parse_obfuscated_file_and_save_as_ofx(self): ''' Use filemerge to compare : output/real_file_obfuscated.ofx and output/real_file_obfuscated_2.ofx ''' parser = OFXParser(open('output/real_file_obfuscated.ofx').read()) OFX = parser.parse() f = open('output/real_file_obfuscated_2.ofx', 'w') f.write(OFX.ofx_repr()) f.close()
def test_07_parse_ofx_headers_only(self): """ Parse a real file and extract headers """ parser = OFXParser( open(self.path + 'real_file_with_headers.ofx', 'U').read()) parser.parse_headers() print "\nTest 7: Dumping headers:" for h in parser.OFX_headers.items(): print "-", h self.assertTrue(parser.OFX_headers['VERSION'] == '102') self.assertTrue(parser.OFX_headers['CHARSET'] == '1252')
def test_05_parse_obfuscatedreal_and_save_as_xml(self): ''' This test use OFXNode.obfuscated_ofx_repr() which generates a usable OFX ''' src = open('output/multi_account_obfuscated.ofx') parser = OFXParser(src.read()) src.close() OFX = parser.parse() f = open('output/multi_account_obfuscated.xml', 'w') f.write(OFX.xml_repr()) f.close()
def main(source_file): """ Takes a multi-account OFX file as input and output one OFX file per account. """ f = open(source_file) p = OFXParser(f.read()) o = p.parse() # on vire les infos sur les cartes de crédits try: del o.CREDITCARDMSGSRSV1 except: pass # first we backup all account information account_list = list() for e in o.BANKMSGSRSV1.STMTTRNRS: account_list.append(e) # we wipe all accounts del o.BANKMSGSRSV1.STMTTRNRS for e in account_list: o.BANKMSGSRSV1.children.append(e) for t in o.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST.STMTTRN: t.TRNTYPE.value = t.MEMO.value # update transaction type t.MEMO.value = '' if t.TRNTYPE.value == 'PAIEMENT PAR CARTE': t.MEMO.value = "Operation du %s" % (t.NAME.value[-5:], ) t.NAME.value = t.NAME.value[:-5].lstrip().rstrip() elif t.TRNTYPE.value == 'REMBOURSEMENT DE PRET': t.MEMO.value = "Echeance du %s " % (t.NAME.value[-8:], ) t.NAME.value = t.NAME.value[:-8].lstrip().rstrip() fofx = open( 'compte_%s_from_%s_to_%s.ofx' % (e.STMTRS.BANKACCTFROM.ACCTID.val, e.STMTRS.BANKTRANLIST.DTSTART.value[:8], e.STMTRS.BANKTRANLIST.DTEND.value[:8]), 'w') fofx.write(o.ofx_repr()) fofx.close() fxml = open( 'compte_%s_from_%s_to_%s.xml' % (e.STMTRS.BANKACCTFROM.ACCTID.val, e.STMTRS.BANKTRANLIST.DTSTART.value[:8], e.STMTRS.BANKTRANLIST.DTEND.value[:8]), 'w') fxml.write(o.xml_repr()) fxml.close() del o.BANKMSGSRSV1.STMTTRNRS
def test_09_parse_multi_acct_file_and_export_as_xml(self): ''' Parse a real file ''' src = open(self.path + 'multi_account_file.ofx') parser = OFXParser(src.read()) src.close() OFX = parser.parse() f = open('output/test_09_output_as_xml.xml', 'w') f.write(OFX.xml_repr()) f.close()
def main(source_file): """ Takes a multi-account OFX file as input and output one OFX file per account. """ f = open(source_file) p = OFXParser(f.read()) o = p.parse() statement_list = build_Statement_tree(o) for stmt in statement_list: file_name = 'releve_compte_' + stmt.account_id.strip() + '_du_' + str( stmt.start_date.strftime("%d-%m-%Y")) + '_au_' + str( stmt.end_date.strftime("%d-%m-%Y")) + '.csv' f = open(file_name, 'w') f.write(stmt.export_as_csv()) f.close()
def test_10_parse_realfile_and_re_export_it_as_ofx(self): ''' Parse a real file and export it again as OFX Use a file diff tool to compare test_10_output_as_ofx.ofx with real_file.ofx On Unix/MacOS files should be identical. On Windows, we may have CR/LF differences. ''' src = open(self.path + 'real_file_no_headers.ofx') parser = OFXParser(src.read()) src.close() OFX = parser.parse() f = open('output/test_12_output_as_ofx.ofx', 'w') f.write(OFX.ofx_repr()) f.close()
def test_11_parse_multi_acct_file_and_export_as_several_csv(self): ''' Parse a real file and export as many individual csv files ''' src = open(self.path + 'multi_account_file.ofx') parser = OFXParser(src.read()) src.close() OFX = parser.parse() statement_list = render_as_DOT(OFX) for e in statement_list: file_name = 'output/' + e.account_id.strip( ) + '_statement from_' + str(e.start_date) + '_to_' + str( e.end_date) + '.csv' f = open(file_name, 'w') f.write(e.export_as_csv()) f.close() print e.export_as_csv()
def test_01_empty_ofx_file(self): parser = OFXParser(open(self.path + 'empty.ofx').read()) self.assertTrue( self.logging_handler.last_message.__contains__( "Supplied source string is null"))