def parse(self): emonths = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ] date_format, time_format, months = self.guess_format() for row in self.document.xpath( '//table[@id="transactionTable"]/tbody/tr'): if len(row.xpath('.//td')) < 5: continue amount = row.xpath( './/td[@headers="gross"]')[-1].text_content().strip() if re.search('\d', amount): currency = Account.get_currency(amount) amount = AmTr.decimal_amount(amount) else: continue idtext = row.xpath('.//td[@class="detailsNoPrint"]//span[@class="accessAid"]')[0] \ .text_content().replace(u'\xa0', u' ').strip().rpartition(' ')[-1] trans = Transaction(idtext) trans.amount = amount trans._currency = currency datetext = row.xpath( './/td[@class="dateInfo"]')[0].text_content().strip() for i in range(0, 12): datetext = datetext.replace(months[i], emonths[i]) date = dateutil.parser.parse(datetext) trans.date = date trans.rdate = date trans.label = to_unicode( row.xpath('.//td[@class="emailInfo"]') [0].text_content().strip()) info = to_unicode( row.xpath('.//td[@class="paymentTypeInfo"]') [0].text_content().strip()) trans.raw = info + u' ' + trans.label if u'Authorization' in info or u'Autorisation' in info or \ u'Order' in info: continue if u'Credit Card' in trans.label or u'Carte bancaire' in trans.label: trans.type = Transaction.TYPE_CARD elif info.startswith(u'Payment') or info.startswith(u'Paiement'): trans.type = Transaction.TYPE_ORDER elif u'Currency Conversion' in info or u'Conversion de devise' in info: trans.type = Transaction.TYPE_BANK else: trans.type = Transaction.TYPE_UNKNOWN yield trans
def parse(self): emonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] date_format, time_format, months = self.guess_format() for row in self.document.xpath('//table[@id="transactionTable"]/tbody/tr'): if len(row.xpath('.//td')) < 5: continue amount = row.xpath('.//td[@headers="gross"]')[-1].text_content().strip() if re.search('\d', amount): currency = Account.get_currency(amount) amount = AmTr.decimal_amount(amount) else: continue idtext = row.xpath('.//td[@class="detailsNoPrint"]//span[@class="accessAid"]')[0] \ .text_content().replace(u'\xa0', u' ').strip().rpartition(' ')[-1] trans = Transaction(idtext) trans.amount = amount trans._currency = currency datetext = row.xpath('.//td[@class="dateInfo"]')[0].text_content().strip() for i in range(0, 12): datetext = datetext.replace(months[i], emonths[i]) date = dateutil.parser.parse(datetext) trans.date = date trans.rdate = date trans.label = to_unicode(row.xpath('.//td[@class="emailInfo"]')[0].text_content().strip()) info = to_unicode(row.xpath('.//td[@class="paymentTypeInfo"]')[0].text_content().strip()) trans.raw = info + u' ' + trans.label if u'Authorization' in info or u'Autorisation' in info or \ u'Order' in info: continue if u'Credit Card' in trans.label or u'Carte bancaire' in trans.label: trans.type = Transaction.TYPE_CARD elif info.startswith(u'Payment') or info.startswith(u'Paiement'): trans.type = Transaction.TYPE_ORDER elif u'Currency Conversion' in info or u'Conversion de devise' in info: trans.type = Transaction.TYPE_BANK else: trans.type = Transaction.TYPE_UNKNOWN yield trans