示例#1
0
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
示例#2
0
文件: server.py 项目: sponnet/rotki
 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}
示例#3
0
 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)
示例#4
0
    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)