Skip to content

Commit 5b68725

Browse files
authored
Remove non-primitive functions default args (#37)
1 parent 731f8ef commit 5b68725

7 files changed

Lines changed: 871 additions & 847 deletions

File tree

examples/placed_order_example_advanced.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ async def order_loop(
8383
async with socket_connect_condition:
8484
await socket_connect_condition.wait()
8585

86-
for j in range(NUM_ORDERS_PER_PRICE_LEVEL):
86+
for _ in range(NUM_ORDERS_PER_PRICE_LEVEL):
8787
(external_id, order_response) = await place_order(i, trading_client, markets_cache)
8888
print(f"placed order {external_id}")
8989
condition = order_condtions.get(external_id)

poetry.lock

Lines changed: 790 additions & 833 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
55

66
[tool.poetry]
77
name = "x10-python-trading"
8-
version = "0.4.3"
8+
version = "0.4.4"
99
description = "Python client for X10 API"
1010
authors = ["X10 <tech@ex10.org>"]
1111
repository = "https://github.com/x10xchange/python_sdk"
@@ -44,6 +44,7 @@ websockets = "==12.0"
4444
[tool.poetry.group.dev.dependencies]
4545
black = "==23.12.0"
4646
flake8 = "==6.1.0"
47+
flake8-bugbear = "==24.12.12"
4748
freezegun = "==1.4.0"
4849
isort = "==5.13.2"
4950
mypy = "==1.8.0"

tests/perpetual/test_order_object.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,67 @@
1212
FROZEN_NONCE = 1473459052
1313

1414

15+
@pytest.mark.asyncio
16+
async def test_create_sell_order_with_default_expiration(
17+
mocker: MockerFixture, create_trading_account, create_btc_usd_market
18+
):
19+
mocker.patch("x10.utils.starkex.generate_nonce", return_value=FROZEN_NONCE)
20+
21+
freezer = freeze_time("2024-01-05 01:08:56.860694")
22+
frozen_time = freezer.start()
23+
24+
from x10.perpetual.order_object import create_order_object
25+
26+
frozen_time.move_to("2024-01-05 01:08:57")
27+
28+
trading_account = create_trading_account()
29+
btc_usd_market = create_btc_usd_market()
30+
order_obj = create_order_object(
31+
account=trading_account,
32+
market=btc_usd_market,
33+
amount_of_synthetic=Decimal("0.00100000"),
34+
price=Decimal("43445.11680000"),
35+
side=OrderSide.SELL,
36+
)
37+
38+
freezer.stop()
39+
40+
assert_that(
41+
order_obj.to_api_request_json(),
42+
equal_to(
43+
{
44+
"id": "2096045681239655445582070517240411138302380632690430411530650608228763263945",
45+
"market": "BTC-USD",
46+
"type": "LIMIT",
47+
"side": "SELL",
48+
"qty": "0.00100000",
49+
"price": "43445.11680000",
50+
"reduceOnly": False,
51+
"postOnly": False,
52+
"timeInForce": "GTT",
53+
"expiryEpochMillis": 1704445737000,
54+
"fee": "0.0005",
55+
"nonce": "1473459052",
56+
"selfTradeProtectionLevel": "ACCOUNT",
57+
"cancelId": None,
58+
"settlement": {
59+
"signature": {
60+
"r": "0x39ff8493e8e26c9a588a7046e1380b6e1201287a179e10831b7040d3efc26d",
61+
"s": "0x5c9acd1879bf8d43e4ccd14648186d2a9edf387fe1b61e491fe0a539de3272b",
62+
},
63+
"starkKey": "0x61c5e7e8339b7d56f197f54ea91b776776690e3232313de0f2ecbd0ef76f466",
64+
"collateralPosition": "10002",
65+
},
66+
"trigger": None,
67+
"tpSlType": None,
68+
"takeProfit": None,
69+
"stopLoss": None,
70+
"debuggingAmounts": {"collateralAmount": "43445116", "feeAmount": "21723", "syntheticAmount": "1000"},
71+
}
72+
),
73+
)
74+
75+
1576
@freeze_time("2024-01-05 01:08:56.860694")
1677
@pytest.mark.asyncio
1778
async def test_create_sell_order(mocker: MockerFixture, create_trading_account, create_btc_usd_market):

x10/perpetual/order_object.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def create_order_object(
3434
side: OrderSide,
3535
post_only: bool = False,
3636
previous_order_id: Optional[str] = None,
37-
expire_time=utc_now() + timedelta(hours=8),
37+
expire_time: Optional[datetime] = None,
3838
order_external_id: Optional[str] = None,
3939
time_in_force: TimeInForce = TimeInForce.GTT,
4040
self_trade_protection_level: SelfTradeProtectionLevel = SelfTradeProtectionLevel.ACCOUNT,
@@ -43,6 +43,7 @@ def create_order_object(
4343
Creates an order object to be placed on the exchange using the `place_order` method.
4444
"""
4545
fees = account.trading_fee.get(market.name, DEFAULT_FEES)
46+
4647
return __create_order_object(
4748
market,
4849
amount_of_synthetic,
@@ -72,7 +73,7 @@ def __create_order_object(
7273
signer: Callable[[int], Tuple[int, int]],
7374
public_key: int,
7475
exact_only: bool = False,
75-
expire_time: datetime = utc_now() + timedelta(hours=1),
76+
expire_time: Optional[datetime] = None,
7677
post_only: bool = False,
7778
previous_order_external_id: Optional[str] = None,
7879
order_external_id: Optional[str] = None,
@@ -82,6 +83,9 @@ def __create_order_object(
8283
if exact_only:
8384
raise NotImplementedError("`exact_only` option is not supported yet")
8485

86+
if expire_time is None:
87+
expire_time = utc_now() + timedelta(hours=8)
88+
8589
nonce = generate_nonce()
8690
is_buying_synthetic = side == OrderSide.BUY
8791
rounding_context = ROUNDING_BUY_CONTEXT if is_buying_synthetic else ROUNDING_SELL_CONTEXT

x10/perpetual/trading_client/trading_client.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from datetime import timedelta
1+
from datetime import datetime
22
from decimal import Decimal
3-
from typing import Dict
3+
from typing import Dict, Optional
44

55
from x10.perpetual.accounts import StarkPerpetualAccount
66
from x10.perpetual.configuration import EndpointConfig
@@ -18,7 +18,6 @@
1818
MarketsInformationModule,
1919
)
2020
from x10.perpetual.trading_client.order_management_module import OrderManagementModule
21-
from x10.utils.date import utc_now
2221
from x10.utils.http import WrappedApiResponse
2322
from x10.utils.log import get_logger
2423

@@ -46,7 +45,7 @@ async def place_order(
4645
side: OrderSide,
4746
post_only: bool = False,
4847
previous_order_id=None,
49-
expire_time=utc_now() + timedelta(hours=8),
48+
expire_time: Optional[datetime] = None,
5049
time_in_force: TimeInForce = TimeInForce.GTT,
5150
self_trade_protection_level: SelfTradeProtectionLevel = SelfTradeProtectionLevel.ACCOUNT,
5251
) -> WrappedApiResponse[PlacedOrderModel]:

x10/perpetual/user_client/onboarding.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,12 @@ def get_onboarding_payload(
187187
account: LocalAccount,
188188
signing_domain: str,
189189
key_pair: StarkKeyPair,
190-
time: datetime = datetime.now(timezone.utc),
190+
time: datetime | None = None,
191191
referral_code: str | None = None,
192192
) -> OnboardingPayLoad:
193+
if time is None:
194+
time = datetime.now(timezone.utc)
195+
193196
registration_payload = get_registration_struct_to_sign(
194197
account_index=0, address=account.address, timestamp=time, action=register_action
195198
)
@@ -210,12 +213,11 @@ def get_onboarding_payload(
210213

211214

212215
def get_sub_account_creation_payload(
213-
account_index: int,
214-
l1_address: str,
215-
key_pair: StarkKeyPair,
216-
description: str,
217-
time: datetime = datetime.now(timezone.utc),
216+
account_index: int, l1_address: str, key_pair: StarkKeyPair, description: str, time: datetime | None = None
218217
):
218+
if time is None:
219+
time = datetime.now(timezone.utc)
220+
219221
registration_payload = get_registration_struct_to_sign(
220222
account_index=account_index,
221223
address=l1_address,

0 commit comments

Comments
 (0)