def test_check_if_version_up_to_date(): def mock_github_return_current(url): # pylint: disable=unused-argument contents = '{"tag_name": "v1.4.0", "html_url": "https://foo"}' return MockResponse(200, contents) patch_github = patch('requests.get', side_effect=mock_github_return_current) def mock_system_spec(): return {'rotkehlchen': 'v1.4.0'} patch_our_version = patch( 'rotkehlchen.utils.version_check.get_system_spec', side_effect=mock_system_spec, ) with patch_our_version, patch_github: result = check_if_version_up_to_date() assert result.download_url is None, 'Same version should return None as url' def mock_github_return(url): # pylint: disable=unused-argument contents = '{"tag_name": "v99.99.99", "html_url": "https://foo"}' return MockResponse(200, contents) with patch('requests.get', side_effect=mock_github_return): result = check_if_version_up_to_date() assert result assert result[0] assert result.latest_version == 'v99.99.99' assert result.download_url == 'https://foo' # Also test that bad responses are handled gracefully def mock_non_200_github_return(url): # pylint: disable=unused-argument contents = '{"tag_name": "v99.99.99", "html_url": "https://foo"}' return MockResponse(501, contents) with patch('requests.get', side_effect=mock_non_200_github_return): result = check_if_version_up_to_date() assert result.our_version assert not result.latest_version assert not result.latest_version def mock_missing_fields_github_return(url): # pylint: disable=unused-argument contents = '{"html_url": "https://foo"}' return MockResponse(200, contents) with patch('requests.get', side_effect=mock_missing_fields_github_return): result = check_if_version_up_to_date() assert result.our_version assert not result.latest_version assert not result.latest_version def mock_invalid_json_github_return(url): # pylint: disable=unused-argument contents = '{html_url: "https://foo"}' return MockResponse(200, contents) with patch('requests.get', side_effect=mock_invalid_json_github_return): result = check_if_version_up_to_date() assert result.our_version assert not result.latest_version assert not result.latest_version
def version_check(): result = check_if_version_up_to_date() if not result: our_version = None latest_version = None url = None else: our_version = result[0] latest_version = result[1] url = result[2] return {'our_version': our_version, 'latest_version': latest_version, 'url': url}
def version_check() -> Response: result = _wrap_in_ok_result(check_if_version_up_to_date()) return api_response(process_result(result), status_code=HTTPStatus.OK)
def maybe_add_summary( self, ledger_actions_profit_loss: FVal, defi_profit_loss: FVal, loan_profit: FVal, margin_position_profit_loss: FVal, settlement_losses: FVal, ethereum_transaction_gas_costs: FVal, asset_movement_fees: FVal, taxable_trade_profit_loss: FVal, total_taxable_profit_loss: FVal, ) -> None: """Depending on given settings, adds a few summary lines at the end of the all events PnL report""" if self.should_have_summary is False: return length = len(self.all_events_csv) + 1 template: Dict[str, Any] = { 'type': '', 'location': '', 'paid_asset': '', 'paid_in_asset': '', 'taxable_amount': '', 'received_asset': '', 'received_in_asset': '', 'net_profit_or_loss': '', 'time': '', 'is_virtual': '', f'paid_in_{self.profit_currency.symbol}': '', f'taxable_received_in_{self.profit_currency.symbol}': '', f'taxable_bought_cost_in_{self.profit_currency.symbol}': '', 'cost_basis': '', f'total_bought_cost_in_{self.profit_currency.symbol}': '', f'total_received_in_{self.profit_currency.symbol}': '', } self.all_events_csv.append(template) # separate with 2 new lines self.all_events_csv.append(template) entry = template.copy() entry['received_in_asset'] = 'LEDGER ACTIONS PROFIT/LOSS' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_LEDGER_ACTION}"', sum_range=f'H2:H{length}', actual_value=ledger_actions_profit_loss, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'DEFI PROFIT/LOSS' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_DEFI}"', sum_range=f'H2:H{length}', actual_value=defi_profit_loss, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'LOAN PROFIT/LOSS' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_INTEREST_PAYMENT}"', sum_range=f'H2:H{length}', actual_value=loan_profit, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'MARGIN POSITIONS PROFIT/LOSS' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_MARGIN_CLOSE}"', sum_range=f'H2:H{length}', actual_value=margin_position_profit_loss, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'SETTLEMENT LOSS' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_LOAN_SETTLE}"', sum_range=f'H2:H{length}', actual_value=settlement_losses, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'ETHEREUM TX GAS COST' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_TX_GAS_COST}"', sum_range=f'H2:H{length}', actual_value=ethereum_transaction_gas_costs, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'ASSET MOVEMENT FEES' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_ASSET_MOVE}"', sum_range=f'H2:H{length}', actual_value=asset_movement_fees, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'TAXABLE TRADE PROFIT/LOSS' entry['net_profit_or_loss'] = self._add_sumif_formula( check_range=f'A2:A{length}', condition=f'"{EV_SELL}"', sum_range=f'H2:H{length}', actual_value=taxable_trade_profit_loss, ) self.all_events_csv.append(entry) entry = template.copy() entry['received_in_asset'] = 'TOTAL TAXABLE PROFIT/LOSS' start = length + 3 entry['net_profit_or_loss'] = self._add_equals_formula( expression= f'H{start}+H{start + 1}+H{start + 2}+H{start + 3}+H{start + 4}+H{start + 5}+H{start + 6}+H{start + 7}', # noqa: E501 actual_value=total_taxable_profit_loss, ) self.all_events_csv.append(entry) self.all_events_csv.append(template) # separate with 2 new lines self.all_events_csv.append(template) version_result = check_if_version_up_to_date() entry = template.copy() entry['received_in_asset'] = 'rotki version' entry['net_profit_or_loss'] = version_result.our_version self.all_events_csv.append(entry) db_settings = self.database.get_settings() self._add_settings_lines(db_settings, template)