Skip to content

Commit 3dfca5e

Browse files
committed
Fix development lint gates
1 parent 02d8777 commit 3dfca5e

16 files changed

Lines changed: 177 additions & 229 deletions

File tree

backtrader/brokers/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818

1919
import os as _os
2020

21+
from backtrader.brokers.bbroker import BackBroker as BackBroker
22+
from backtrader.brokers.bbroker import BrokerBack as BrokerBack
23+
2124
# The modules below should/must define __all__ with the objects wishes
2225
# or prepend an "_" (underscore) to private classes/variables
2326

24-
from backtrader.brokers.bbroker import BackBroker as BackBroker
25-
from backtrader.brokers.bbroker import BrokerBack as BrokerBack
2627

2728
if _os.environ.get("BACKTRADER_LIGHT_IMPORT", "").strip().lower() not in {
2829
"1",

backtrader/brokers/btapibroker.py

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import datetime as _dt
88
import time
99
from copy import deepcopy
10+
from typing import Any
1011

1112
from ..broker import BrokerBase
1213
from ..comminfo import (
@@ -265,8 +266,8 @@ def __init__(self, **kwargs):
265266
self._orders_by_client_ref = {}
266267
self._remote_open_orders_snapshot = []
267268
self._seen_trade_ids = set()
268-
self._pending_trade_updates = collections.deque()
269-
self._status_fill_fingerprints = collections.Counter()
269+
self._pending_trade_updates: collections.deque[Any] = collections.deque()
270+
self._status_fill_fingerprints: collections.Counter[Any] = collections.Counter()
270271
self._position_mode_frozen = False
271272
self._position_mode_frozen_reason = None
272273
BrokerBase.set_param(
@@ -785,7 +786,11 @@ def batch_cancel(self, orders=None):
785786
"""Cancel a batch of live orders and return the canceled order objects."""
786787
candidates = self._batch_cancel_candidates(orders)
787788
requested = [
788-
self._order_runtime_details(item) if kind == "local" else self._remote_order_details(item)
789+
(
790+
self._order_runtime_details(item)
791+
if kind == "local"
792+
else self._remote_order_details(item)
793+
)
789794
for kind, item in candidates
790795
]
791796
self._emit_runtime_event(
@@ -837,9 +842,11 @@ def batch_cancel(self, orders=None):
837842
"cancelled_count": len(cancelled),
838843
"failure_count": len(failures),
839844
"cancelled_orders": [
840-
self._order_runtime_details(item)
841-
if hasattr(item, "alive")
842-
else self._remote_order_details(item)
845+
(
846+
self._order_runtime_details(item)
847+
if hasattr(item, "alive")
848+
else self._remote_order_details(item)
849+
)
843850
for item in cancelled
844851
],
845852
"failed_orders": failures,
@@ -1092,7 +1099,7 @@ def add_symbol(value):
10921099
if data is not None:
10931100
add_symbol(self._position_key(data))
10941101

1095-
alias_map = {}
1102+
alias_map: dict[str, str] = {}
10961103
for key in tracked_keys:
10971104
for alias in self._symbol_aliases(key):
10981105
alias_map.setdefault(alias, key)
@@ -1152,8 +1159,7 @@ def _sync_remote_open_orders(self, force=False, raise_errors=False):
11521159
try:
11531160
try:
11541161
orders = list(
1155-
self.store.fetch_open_orders(force=force, raise_errors=raise_errors)
1156-
or []
1162+
self.store.fetch_open_orders(force=force, raise_errors=raise_errors) or []
11571163
)
11581164
except TypeError:
11591165
orders = list(self.store.fetch_open_orders() or [])
@@ -1239,7 +1245,7 @@ def _symbol_aliases(symbol):
12391245

12401246
def _warm_contract_metadata(self):
12411247
"""Materialize comminfo for known live symbols at broker startup."""
1242-
names = set()
1248+
names: set[str] = set()
12431249
for container in (self.positions, self.long_positions, self.short_positions):
12441250
try:
12451251
names.update(str(key) for key in container.keys() if key not in (None, ""))
@@ -1307,10 +1313,7 @@ def _metadata_commission_rate(cls, metadata, *keys):
13071313
key_text = str(key or "")
13081314
if (
13091315
method == "percent_10k"
1310-
or (
1311-
key_text.startswith("COMMISSION_")
1312-
and key_text.endswith("_RATIO")
1313-
)
1316+
or (key_text.startswith("COMMISSION_") and key_text.endswith("_RATIO"))
13141317
or (
13151318
key_text
13161319
in {
@@ -1622,9 +1625,7 @@ def _metadata_to_comminfo(cls, metadata):
16221625
metadata.get("max_leverage"),
16231626
)
16241627
margin_rate = (
1625-
1.0 / leverage
1626-
if leverage and leverage > 0
1627-
else cls._normalise_rate(margin_value, 1.0)
1628+
1.0 / leverage if leverage and leverage > 0 else cls._normalise_rate(margin_value, 1.0)
16281629
)
16291630
margin_amount_param = (
16301631
max(margin_amount, 0.0) if margin_amount is not None and margin_amount > 0 else None
@@ -2227,11 +2228,7 @@ def _unwrap_submit_response(response):
22272228
status = str(current.get("status") or "").strip().lower()
22282229
code = str(current.get("code") or "").strip()
22292230
success = current.get("success")
2230-
wrapper_ok = (
2231-
status in {"ok", "success"}
2232-
or code in {"0", "00000"}
2233-
or success is True
2234-
)
2231+
wrapper_ok = status in {"ok", "success"} or code in {"0", "00000"} or success is True
22352232
if wrapper_ok:
22362233
nested = current.get("data", current.get("result"))
22372234
if isinstance(nested, dict):
@@ -2262,9 +2259,11 @@ def _requires_explicit_offset(self, data):
22622259
"""Return whether the provider needs open/close offset metadata."""
22632260
provider_values = {
22642261
str(self.provider or "").strip().lower(),
2265-
str(getattr(self.store, "provider", "") or "").strip().lower()
2266-
if self.store is not None
2267-
else "",
2262+
(
2263+
str(getattr(self.store, "provider", "") or "").strip().lower()
2264+
if self.store is not None
2265+
else ""
2266+
),
22682267
}
22692268
if provider_values & {"ctp", "ctp_gateway"}:
22702269
return True
@@ -3152,7 +3151,9 @@ def _remote_commission(cls, update):
31523151
continue
31533152
if cls._truthy(cls._extract_update_value(update, "commission_signed")):
31543153
return commission
3155-
if key in {"fee", "trade_fee", "trade_commission"} and cls._uses_okx_fee_sign(update):
3154+
if key in {"fee", "trade_fee", "trade_commission"} and cls._uses_okx_fee_sign(
3155+
update
3156+
):
31563157
return -commission
31573158
return abs(commission)
31583159
return None

backtrader/cerebro.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
from .strategy import SignalStrategy, Strategy
4949
from .timer import Timer
5050
from .tradingcal import PandasMarketCalendar, TradingCalendarBase
51-
from .utils import OrderedDict, date2num, num2date, tzparse
51+
from .utils import OrderedDict, date2num, tzparse
5252
from .utils.dateintern import _num2date_cached
5353
from .utils.log_message import get_logger
5454
from .utils.py3 import integer_types, map, range, string_types, zip
@@ -2227,12 +2227,10 @@ def _runnext(self, runstrats):
22272227
ldatas = len(datas)
22282228
single_data = ldatas == 1
22292229
single_default_datanotify = (
2230-
single_data
2231-
and type(data0).get_notifications is AbstractDataBase.get_notifications
2230+
single_data and type(data0).get_notifications is AbstractDataBase.get_notifications
22322231
)
22332232
single_default_haslivedata = (
2234-
single_data
2235-
and type(data0).haslivedata is AbstractDataBase.haslivedata
2233+
single_data and type(data0).haslivedata is AbstractDataBase.haslivedata
22362234
)
22372235
data0_datetime_line = data0.datetime if single_data else None
22382236
broker = self._broker
@@ -2243,8 +2241,7 @@ def _runnext(self, runstrats):
22432241
type(broker).get_notification is BackBroker.get_notification
22442242
)
22452243
default_backbroker_next = (
2246-
default_broker_notifications
2247-
and type(broker).next is BackBroker.next
2244+
default_broker_notifications and type(broker).next is BackBroker.next
22482245
)
22492246
if default_broker_notifications:
22502247
broker_notifications = broker.notifs
@@ -2485,7 +2482,9 @@ def _runnext(self, runstrats):
24852482
udtmaster = _num2date_cached(dt0)
24862483
self._udtmaster = udtmaster
24872484
self._dtmaster = (
2488-
udtmaster if getattr(dmaster, "_tz", None) is None else dmaster.num2date(dt0)
2485+
udtmaster
2486+
if getattr(dmaster, "_tz", None) is None
2487+
else dmaster.num2date(dt0)
24892488
)
24902489

24912490
# Try to get something for those that didn't return
@@ -2648,8 +2647,7 @@ def _runonce(self, runstrats):
26482647
data0 = datas[0]
26492648
single_data = len(datas) == 1
26502649
single_default_datanotify = (
2651-
single_data
2652-
and type(data0).get_notifications is AbstractDataBase.get_notifications
2650+
single_data and type(data0).get_notifications is AbstractDataBase.get_notifications
26532651
)
26542652
cheat_on_open = self.p.cheat_on_open
26552653
has_timers = bool(self._timers)

backtrader/feed.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ def _tick_fill(self, force=False):
641641
value = line_array[lencount - 1]
642642
else:
643643
raise
644-
if value == _INF or value == _NEG_INF:
644+
if value in (_INF, _NEG_INF):
645645
value = 0.0
646646
set_attr(self, tick_name, value)
647647
if is_last:
@@ -659,7 +659,7 @@ def _tick_fill(self, force=False):
659659
tick_last = line_array[lencount - 1]
660660
else:
661661
raise
662-
if tick_last == _INF or tick_last == _NEG_INF:
662+
if tick_last in (_INF, _NEG_INF):
663663
tick_last = 0.0
664664

665665
set_attr(self, "tick_last", tick_last)
@@ -742,7 +742,9 @@ def next(self, datamaster=None, ticks=True):
742742
# If own length is less than cached data length, move forward
743743
try:
744744
line_datetime = self._datetime_line
745-
needs_load = line_datetime.lencount >= (len(line_datetime.array) - line_datetime.extension)
745+
needs_load = line_datetime.lencount >= (
746+
len(line_datetime.array) - line_datetime.extension
747+
)
746748
except AttributeError:
747749
needs_load = len(self) >= self.buflen()
748750

backtrader/feeds/btapifeed.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,7 @@ def _tick_datetime(tick):
8888
return _datetime_to_utc_naive(value)
8989
if isinstance(value, str) and value:
9090
try:
91-
return _datetime_to_utc_naive(
92-
_dt.datetime.fromisoformat(value.replace("Z", "+00:00"))
93-
)
91+
return _datetime_to_utc_naive(_dt.datetime.fromisoformat(value.replace("Z", "+00:00")))
9492
except ValueError:
9593
pass
9694
return _dt.datetime.fromtimestamp(_tick_timestamp(tick), _UTC).replace(tzinfo=None)
@@ -362,8 +360,7 @@ def _ingest_tick(self, tick):
362360

363361
volume = float(_tick_value(tick, "volume", "Volume", default=0.0) or 0.0)
364362
openinterest = float(
365-
_tick_value(tick, "openinterest", "open_interest", "OpenInterest", default=0.0)
366-
or 0.0
363+
_tick_value(tick, "openinterest", "open_interest", "OpenInterest", default=0.0) or 0.0
367364
)
368365

369366
if self._timeframe == TimeFrame.Ticks:

backtrader/feeds/btcsv.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
from .. import feed
1919

20-
2120
_HOURS_PER_DAY = 24.0
2221
_MINUTES_PER_DAY = 1440.0
2322
_SECONDS_PER_DAY = 86400.0
@@ -28,7 +27,7 @@
2827

2928
def _set_current_value(line, value):
3029
"""Set the current line slot, falling back when binding propagation is needed."""
31-
if value == _INF or value == _NEG_INF:
30+
if value in (_INF, _NEG_INF):
3231
value = line._default_value
3332

3433
if line.bindings:
@@ -154,17 +153,17 @@ def _loadline(self, linetokens):
154153
and not line_volume.bindings
155154
and not line_openinterest.bindings
156155
):
157-
if open_value == _INF or open_value == _NEG_INF:
156+
if open_value in (_INF, _NEG_INF):
158157
open_value = line_open._default_value
159-
if high_value == _INF or high_value == _NEG_INF:
158+
if high_value in (_INF, _NEG_INF):
160159
high_value = line_high._default_value
161-
if low_value == _INF or low_value == _NEG_INF:
160+
if low_value in (_INF, _NEG_INF):
162161
low_value = line_low._default_value
163-
if close_value == _INF or close_value == _NEG_INF:
162+
if close_value in (_INF, _NEG_INF):
164163
close_value = line_close._default_value
165-
if volume_value == _INF or volume_value == _NEG_INF:
164+
if volume_value in (_INF, _NEG_INF):
166165
volume_value = line_volume._default_value
167-
if openinterest_value == _INF or openinterest_value == _NEG_INF:
166+
if openinterest_value in (_INF, _NEG_INF):
168167
openinterest_value = line_openinterest._default_value
169168

170169
try:

0 commit comments

Comments
 (0)