class Downloader: def get_config(self): with open('config.yml', 'r') as f: doc = yaml.load(f) return doc def __init__(self, uuid): self.config = self.get_config() if self.config['develop'] == True: print(uuid) return self.cpf = self.config['cpf'] self.password = self.config['password'] self.nu = Nubank() self.nu.authenticate_with_qr_code(self.cpf, self.password, uuid) def download_account_data(self): if self.config['develop'] == True: f = open("account_statements.json", "r") data = f.read() f.close() return json.loads(data) account_statements = self.nu.get_account_statements() app_json = json.dumps(account_statements) f = open("account_statements.json", "w+") f.write(app_json) f.close() return account_statements def download_credit_card_data(self): if self.config['develop'] == True: f = open("card_statements.json", "r") data = f.read() f.close() return json.loads(data) card_statements = self.nu.get_card_statements() app_json = json.dumps(card_statements) f = open("card_statements.json", "w+") f.write(app_json) f.close() return card_statements
def test_get_card_statements(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') statements = nubank_client.get_card_statements() assert len(statements) == 1 assert statements[0]['description'] == 'Shopping Iguatemi' assert statements[0]['category'] == 'transaction' assert statements[0]['amount'] == 700 assert statements[0]['time'] == '2017-09-09T02:03:55Z' assert statements[0]['title'] == 'transporte' assert statements[0]['id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert statements[0]['details']['lat'] == -12.9818258 assert statements[0]['details']['lon'] == -38.4652058 assert statements[0]['details']['subcategory'] == 'card_present' assert statements[0]['href'] == 'nuapp://transaction/abcde-fghi-jklmn-opqrst-uvxz' assert statements[0]['_links']['self']['href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/_links_123'
def test_get_card_statements(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') statements = nubank_client.get_card_statements() assert len(statements) == 5 assert statements[0]['description'] == 'Netflix.Com' assert statements[0]['category'] == 'transaction' assert statements[0]['amount'] == 3290 assert statements[0]['time'] == '2021-04-21T10:01:48Z' assert statements[0]['title'] == 'serviços' assert statements[0]['id'] == '43e713a0-07b7-43bb-9700-8d7ad2d5eee6' assert statements[0]['details']['subcategory'] == 'card_not_present' assert statements[0][ 'href'] == 'nuapp://transaction/43e713a0-07b7-43bb-9700-8d7ad2d5eee6' assert statements[0]['_links']['self'][ 'href'] == 'https://prod-s0-facade.nubank.com.br/api/transactions/43e713a0-07b7-43bb-9700-8d7ad2d5eee6'
def test_get_card_statements(monkeypatch, events_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) monkeypatch.setattr(HttpClient, 'get', MagicMock(return_value=events_return)) nubank_client = Nubank() statements = nubank_client.get_card_statements() assert len(statements) == 1 assert statements[0]['description'] == 'Shopping Iguatemi' assert statements[0]['category'] == 'transaction' assert statements[0]['amount'] == 700 assert statements[0]['time'] == '2017-09-09T02:03:55Z' assert statements[0]['title'] == 'transporte' assert statements[0]['id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert statements[0]['details']['lat'] == -12.9818258 assert statements[0]['details']['lon'] == -38.4652058 assert statements[0]['details']['subcategory'] == 'card_present' assert statements[0]['href'] == 'nuapp://transaction/abcde-fghi-jklmn-opqrst-uvxz' assert statements[0]['_links']['self']['href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/_links_123'
def test_get_card_statements(monkeypatch, authentication_return, events_return): response = create_fake_response(authentication_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) nubank_client = Nubank('12345678909', '12345678') response = create_fake_response(events_return) monkeypatch.setattr('requests.get', MagicMock(return_value=response)) statements = nubank_client.get_card_statements() assert len(statements) == 1 assert statements[0]['description'] == 'Shopping Iguatemi' assert statements[0]['category'] == 'transaction' assert statements[0]['amount'] == 700 assert statements[0]['time'] == '2017-09-09T02:03:55Z' assert statements[0]['title'] == 'transporte' assert statements[0]['id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert statements[0]['details']['lat'] == -12.9818258 assert statements[0]['details']['lon'] == -38.4652058 assert statements[0]['details']['subcategory'] == 'card_present' assert statements[0]['href'] == 'nuapp://transaction/abcde-fghi-jklmn-opqrst-uvxz' assert statements[0]['_links']['self']['href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/_links_123'
if bi['charges'] > 1: description = description + ' ({}/{})'.format(bi['index'] + 1, bi['charges']) return description nu = Nubank() uuid, qr_code = nu.get_qr_code() qr_code.print_ascii(invert=True) input('Após escanear o QRCode pressione enter para continuar') # Somente após escanear o QRCode você pode chamar a linha abaixo nu.authenticate_with_qr_code(cpf, pwd, uuid) #recupera as transacoes nubank_transactions = nu.get_card_statements() #recupera as faturas nubank_bills = nu.get_bills() #busca fatura com base em uma data nubank_bill = get_bill_by_date(nubank_bills, bill_date) #recupera os detalhes da fatura nubank_bill_details = nu.get_bill_details(nubank_bill) csv_output = open(output_file_path, 'w') csv_output.write('DATA;DESCRICAO;VALOR') for bi in nubank_bill_details['bill']['line_items']: if 'href' in bi: