tradx 0.1.1.3__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. {tradx-0.1.1.3 → tradx-0.1.3}/.gitignore +2 -1
  2. {tradx-0.1.1.3 → tradx-0.1.3}/PKG-INFO +2 -2
  3. {tradx-0.1.1.3 → tradx-0.1.3}/pyproject.toml +2 -2
  4. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/baseAlgo.py +167 -7
  5. tradx-0.1.3/src/tradx/baseClass/order.py +55 -0
  6. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/marketDataEngine.py +14 -11
  7. tradx-0.1.1.3/src/tradx/baseClass/order.py +0 -27
  8. {tradx-0.1.1.3 → tradx-0.1.3}/.vscode/settings.json +0 -0
  9. {tradx-0.1.1.3 → tradx-0.1.3}/README.md +0 -0
  10. {tradx-0.1.1.3 → tradx-0.1.3}/examples/example1.log +0 -0
  11. {tradx-0.1.1.3 → tradx-0.1.3}/examples/example1.py +0 -0
  12. {tradx-0.1.1.3 → tradx-0.1.3}/examples/example2.log +0 -0
  13. {tradx-0.1.1.3 → tradx-0.1.3}/examples/example2.py +0 -0
  14. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/__init__.py +0 -0
  15. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/algoContainer.py +0 -0
  16. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/candleData.py +0 -0
  17. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/cmInstrument.py +0 -0
  18. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/futureInstrument.py +0 -0
  19. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/index.py +0 -0
  20. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/instrumentPropertyChangeData.py +0 -0
  21. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/ltpData.py +0 -0
  22. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/ltpPartialData.py +0 -0
  23. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/marketDepthData.py +0 -0
  24. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/marketStatusData.py +0 -0
  25. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/openInterestData.py +0 -0
  26. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/openInterestPartialData.py +0 -0
  27. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/optionsInstrument.py +0 -0
  28. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/orderEvent.py +0 -0
  29. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/position.py +0 -0
  30. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/positionEvent.py +0 -0
  31. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/touchLineData.py +0 -0
  32. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/touchLinePartialData.py +0 -0
  33. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/tradeConversionEvent.py +0 -0
  34. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/baseClass/tradeEvent.py +0 -0
  35. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/constants/holidays.py +0 -0
  36. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/dualHashMap.py +0 -0
  37. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/interactiveEngine.py +0 -0
  38. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/logger/logger.py +0 -0
  39. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/logger/logger2.py +0 -0
  40. {tradx-0.1.1.3 → tradx-0.1.3}/src/tradx/py.typed +0 -0
  41. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_candleData.py +0 -0
  42. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_interactiveEngine.log +0 -0
  43. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_interactiveEngine.py +0 -0
  44. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_logger.log +0 -0
  45. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_logger.py +0 -0
  46. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_ltpData.py +0 -0
  47. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_ltpPartailData.py +0 -0
  48. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_marketDataEngine.log +0 -0
  49. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_marketDataEngine.py +0 -0
  50. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_marketDepthData.py +0 -0
  51. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_marketStatusData.py +0 -0
  52. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_openInterestData.py +0 -0
  53. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_openInterestPartialData.py +0 -0
  54. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_option.py +0 -0
  55. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_orderEvent.py +0 -0
  56. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_positionEvent.py +0 -0
  57. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_touchLineData.py +0 -0
  58. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_tradeConversionEvent.py +0 -0
  59. {tradx-0.1.1.3 → tradx-0.1.3}/test/test_tradeEvent.py +0 -0
@@ -12,4 +12,5 @@ wheels/
12
12
 
13
13
  # User-generated files
14
14
  .env
15
- uv.lock
15
+ uv.lock
16
+ uv.lock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradx
3
- Version: 0.1.1.3
3
+ Version: 0.1.3
4
4
  Summary: A Package Designed to simplify strategy development on package xts-api-client
5
5
  Author-email: "jatin.kumawat" <jatin.kumawat@rmoneyindia.com>
6
6
  Requires-Python: >=3.12
@@ -8,7 +8,7 @@ Requires-Dist: aiohttp==3.11.11
8
8
  Requires-Dist: pydantic==2.10.4
9
9
  Requires-Dist: pytest==8.3.4
10
10
  Requires-Dist: shortuuid==1.0.13
11
- Requires-Dist: xts-api-client==0.1.6
11
+ Requires-Dist: xts-api-client>=0.1.7
12
12
  Description-Content-Type: text/markdown
13
13
 
14
14
  # Changelog
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tradx"
3
- version = "0.1.1.3"
3
+ version = "0.1.3"
4
4
  description = "A Package Designed to simplify strategy development on package xts-api-client"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "pydantic==2.10.4",
13
13
  "pytest==8.3.4",
14
14
  "shortuuid==1.0.13",
15
- "xts-api-client==0.1.6",
15
+ "xts-api-client>=0.1.7",
16
16
  ]
17
17
 
18
18
  [build-system]
@@ -1,17 +1,20 @@
1
1
  from abc import ABC, abstractmethod
2
2
  import shortuuid
3
- from typing import Any, TYPE_CHECKING, List
3
+ from typing import Any, TYPE_CHECKING, List, Dict
4
+ from decimal import Decimal
4
5
  from tradx.baseClass.order import Order
5
6
  from tradx.baseClass.position import Position
7
+
6
8
  import asyncio
7
9
 
8
10
 
9
11
  if TYPE_CHECKING:
10
- from tradx import interactiveEngine, marketDataEngine
12
+ from tradx.marketDataEngine import marketDataEngine
13
+ from tradx.interactiveEngine import interactiveEngine
14
+ from tradx.baseClass.touchLineData import TouchLineData
11
15
  from tradx.baseClass.orderEvent import OrderEvent
12
16
  from tradx.baseClass.tradeEvent import TradeEvent
13
17
  from tradx.baseClass.candleData import CandleData
14
- from tradx.baseClass.touchLineData import TouchLineData
15
18
 
16
19
 
17
20
  class BaseAlgo(ABC):
@@ -71,7 +74,6 @@ class BaseAlgo(ABC):
71
74
  self.order_nos = shortuuid
72
75
  self.position_diary: List[Position] = []
73
76
  self.order_diary: List[Order] = []
74
-
75
77
  # Registering inside interactive engine
76
78
  self.name = interactiveEngine.shortuuid.ShortUUID().random(length=4)
77
79
  self.interactiveEngine.strategy_to_id[self.name] = self
@@ -157,7 +159,17 @@ class BaseAlgo(ABC):
157
159
  else:
158
160
  # Insert the new order by creating an object
159
161
  new_order = Order(
160
- order.OrderUniqueIdentifier, order.AppOrderID, order.OrderStatus
162
+ order.OrderUniqueIdentifier,
163
+ order.AppOrderID,
164
+ order.ProductType,
165
+ order.OrderType,
166
+ order.OrderQuantity,
167
+ order.OrderDisclosedQuantity,
168
+ order.OrderPrice,
169
+ order.OrderStopPrice,
170
+ order.OrderSide,
171
+ order.TimeInForce,
172
+ order.OrderStatus,
161
173
  )
162
174
  self.order_diary.append(new_order)
163
175
  if self.interactiveEngine.user_logger:
@@ -305,7 +317,7 @@ class BaseAlgo(ABC):
305
317
 
306
318
  qty = 0
307
319
  for position in self.position_diary:
308
- qty += abs(position.Quantity)
320
+ qty += position.Quantity
309
321
  return qty != 0
310
322
 
311
323
  async def liquidateIntradayDummy(self) -> None:
@@ -327,7 +339,7 @@ class BaseAlgo(ABC):
327
339
  if position.Quantity != 0:
328
340
  _order_no = self.order_no()
329
341
  asyncio.ensure_future(
330
- self.marketDataEngine.dummy_market_order(
342
+ self.marketDataEngine.dummy_order(
331
343
  position.ExchangeSegment,
332
344
  position.ExchangeInstrumentID,
333
345
  position.ProductType,
@@ -336,3 +348,151 @@ class BaseAlgo(ABC):
336
348
  self,
337
349
  )
338
350
  )
351
+
352
+ async def safe_market_order(
353
+ self, ExchangeSegment, ExchangeInstrumentID, ProductType, Quantity
354
+ ):
355
+ """
356
+ Places a safe market order by continuously modifying the order until it is filled.
357
+ Args:
358
+ ExchangeSegment (str): The segment of the exchange.
359
+ ExchangeInstrumentID (int): The instrument ID of the exchange.
360
+ ProductType (str): The type of the product.
361
+ Quantity (int): The quantity to be ordered. Positive for buy, negative for sell.
362
+ Returns:
363
+ None
364
+ Raises:
365
+ Exception: If there is an issue with fetching market data or placing/modifying the order.
366
+ This method performs the following steps:
367
+ 1. Generates a unique identifier for the order.
368
+ 2. Fetches the latest market data for the given instrument.
369
+ 3. Places a limit order with a slight price adjustment.
370
+ 4. Continuously checks the order status until it is filled.
371
+ 5. If the order is not filled, modifies the order with updated market data.
372
+ """
373
+ OrderUniqueIdentifier = self.order_no()
374
+ _adjust = Decimal("0.05")
375
+ Data: TouchLineData = (
376
+ await self.marketDataEngine.fetch_ltp(
377
+ [
378
+ {
379
+ "exchangeSegment": ExchangeSegment,
380
+ "exchangeInstrumentID": ExchangeInstrumentID,
381
+ }
382
+ ]
383
+ )
384
+ )[0]
385
+
386
+ await self.interactiveEngine.limit_order(
387
+ ExchangeSegment,
388
+ ExchangeInstrumentID,
389
+ ProductType,
390
+ Quantity,
391
+ (
392
+ (Data.AskInfo.Price + _adjust).to_eng_string()
393
+ if Quantity > 0
394
+ else (Data.BidInfo.Price - _adjust).to_eng_string()
395
+ ),
396
+ OrderUniqueIdentifier,
397
+ )
398
+ if self.interactiveEngine.user_logger:
399
+ self.interactiveEngine.user_logger.info(
400
+ f"Placing Limit Order for {ExchangeInstrumentID} with Quantity {Quantity}",
401
+ caller=f"{self.__class__.__name__}.safe_market_order",
402
+ )
403
+ await asyncio.sleep(0.1)
404
+ order = next(
405
+ (
406
+ O
407
+ for O in self.order_diary
408
+ if O.OrderUniqueIdentifier == OrderUniqueIdentifier
409
+ ),
410
+ None,
411
+ )
412
+ while order is None or (order is not None and order.OrderStatus != "Filled"):
413
+ await asyncio.sleep(0.1)
414
+ order = next(
415
+ (
416
+ O
417
+ for O in self.order_diary
418
+ if O.OrderUniqueIdentifier == OrderUniqueIdentifier
419
+ ),
420
+ None,
421
+ )
422
+ if order is not None and order.OrderStatus == "Rejected":
423
+ if self.interactiveEngine.user_logger:
424
+ self.interactiveEngine.user_logger.info(
425
+ f"Order Rejected for {ExchangeInstrumentID} with Quantity {Quantity}",
426
+ caller=f"{self.__class__.__name__}.safe_market_order",
427
+ )
428
+ break
429
+ if order is not None and order.OrderStatus != "Filled":
430
+ Data: TouchLineData = (
431
+ await self.marketDataEngine.fetch_ltp(
432
+ [
433
+ {
434
+ "exchangeSegment": ExchangeSegment,
435
+ "exchangeInstrumentID": ExchangeInstrumentID,
436
+ }
437
+ ]
438
+ )
439
+ )[0]
440
+
441
+ await self.interactiveEngine.xt.modify_order(
442
+ order.AppOrderID,
443
+ order.ProductType,
444
+ order.OrderType,
445
+ order.OrderQuantity,
446
+ order.OrderDisclosedQuantity,
447
+ (
448
+ (Data.AskInfo.Price + _adjust).to_eng_string()
449
+ if Quantity > 0
450
+ else (Data.BidInfo.Price - _adjust).to_eng_string()
451
+ ),
452
+ order.OrderStopPrice.to_eng_string(),
453
+ order.TimeInForce,
454
+ order.OrderUniqueIdentifier,
455
+ "*****",
456
+ )
457
+ if self.interactiveEngine.user_logger:
458
+ self.interactiveEngine.user_logger.info(
459
+ f"Modifying Order for {ExchangeInstrumentID} with Quantity {Quantity} and Price "
460
+ f"{(Data.AskInfo.Price + _adjust).to_eng_string() if Quantity > 0 else (Data.BidInfo.Price - _adjust).to_eng_string()}",
461
+ caller=f"{self.__class__.__name__}.safe_market_order",
462
+ )
463
+ await asyncio.sleep(0.7)
464
+
465
+ async def safeLiquidateIntraday(self) -> None:
466
+ """
467
+ Asynchronously liquidates all intraday positions and cancels all open orders.
468
+ This method performs the following actions:
469
+ 1. Logs the action of canceling open orders and squaring off positions if a user logger is available.
470
+ 2. Iterates through the order diary and cancels any orders with a status of "PendingNew" or "New".
471
+ 3. Iterates through the position diary and places market orders to square off any positions with a non-zero quantity.
472
+ Returns:
473
+ None
474
+ """
475
+
476
+ if self.interactiveEngine.user_logger:
477
+ self.interactiveEngine.user_logger.info(
478
+ f"Cancel open order and square off position for strategy {self.name}",
479
+ caller=f"{self.__class__.__name__}.safeLiquidateIntraday",
480
+ )
481
+
482
+ for order in self.order_diary:
483
+ if order.OrderStatus in ["PendingNew", "New"]:
484
+ asyncio.ensure_future(
485
+ self.interactiveEngine.cancel_order(
486
+ order.AppOrderID, order.OrderUniqueIdentifier
487
+ )
488
+ )
489
+ for position in self.position_diary:
490
+ if position.Quantity != 0:
491
+ asyncio.ensure_future(
492
+ self.safe_market_order(
493
+ position.ExchangeSegment,
494
+ position.ExchangeInstrumentID,
495
+ position.ProductType,
496
+ -1 * position.Quantity,
497
+ )
498
+ )
@@ -0,0 +1,55 @@
1
+ from pydantic import BaseModel
2
+ from decimal import Decimal
3
+
4
+
5
+ class Order(BaseModel):
6
+ """
7
+ Order class representing an order in the system.
8
+ Attributes:
9
+ OrderUniqueIdentifier (str): A unique identifier for the order.
10
+ AppOrderID (int): The application-specific order ID.
11
+ OrderStatus (str): The status of the order. Defaults to an empty string.
12
+ Methods:
13
+ __init__(OrderUniqueIdentifier: str, AppOrderID: int, OrderStatus: str = ""):
14
+ Initializes a new instance of the Order class.
15
+ """
16
+
17
+ OrderUniqueIdentifier: str
18
+ AppOrderID: int
19
+ OrderStatus: str
20
+ ProductType: str
21
+ OrderType: str
22
+ OrderQuantity: int
23
+ OrderDisclosedQuantity: int
24
+ OrderPrice: Decimal
25
+ OrderStopPrice: Decimal
26
+ TimeInForce: str
27
+ OrderSide: str
28
+
29
+ def __init__(
30
+ self,
31
+ OrderUniqueIdentifier: str,
32
+ AppOrderID: int,
33
+ ProductType: str,
34
+ OrderType: str,
35
+ OrderQuantity: int,
36
+ OrderDisclosedQuantity: int,
37
+ OrderPrice: Decimal,
38
+ OrderStopPrice: Decimal,
39
+ OrderSide: str,
40
+ TimeInForce: str,
41
+ OrderStatus: str = "",
42
+ ):
43
+ super().__init__(
44
+ OrderUniqueIdentifier=OrderUniqueIdentifier,
45
+ AppOrderID=AppOrderID,
46
+ ProductType=ProductType,
47
+ OrderType=OrderType,
48
+ OrderQuantity=OrderQuantity,
49
+ OrderDisclosedQuantity=OrderDisclosedQuantity,
50
+ OrderPrice=OrderPrice,
51
+ OrderStopPrice=OrderStopPrice,
52
+ OrderStatus=OrderStatus,
53
+ OrderSide=OrderSide,
54
+ TimeInForce=TimeInForce,
55
+ )
@@ -646,16 +646,19 @@ class marketDataEngine(MarketDataSocketClient):
646
646
  baseAlgo: BaseAlgo,
647
647
  ):
648
648
  """
649
- Simulates a market order for the given instrument.
649
+ Simulates a market order and generates a trade event.
650
650
  Args:
651
- exchangeSegment (str): The exchange segment of the instrument.
652
- exchangeInstrumentID (int): The exchange instrument ID.
653
- productType (str): The product type.
651
+ exchangeSegment (str): The segment of the exchange where the order is placed.
652
+ exchangeInstrumentID (int): The ID of the instrument being traded.
653
+ productType (str): The type of product being traded.
654
654
  orderQuantity (int): The quantity of the order. Positive for buy, negative for sell.
655
655
  orderUniqueIdentifier (str): A unique identifier for the order.
656
- baseAlgo (BaseAlgo): An instance of a class derived from BaseAlgo, representing the algorithm to be used for processing the trade event.
656
+ baseAlgo (BaseAlgo): An instance of the BaseAlgo class to handle the trade event.
657
657
  Returns:
658
658
  None
659
+ This function fetches the last traded price (LTP) for the given instrument and creates a TradeEvent
660
+ based on whether the order is a buy or sell. The TradeEvent is then passed to the baseAlgo's trade_
661
+ method for further processing.
659
662
  """
660
663
  _list = await self.fetch_ltp(
661
664
  [
@@ -691,7 +694,7 @@ class marketDataEngine(MarketDataSocketClient):
691
694
  "OrderQuantity": abs(orderQuantity),
692
695
  "OrderStopPrice": 0,
693
696
  "OrderStatus": "Filled",
694
- "OrderAverageTradedPrice": _data.BidInfo.Price,
697
+ "OrderAverageTradedPrice": _data.LastTradedPrice,
695
698
  "LeavesQuantity": 0,
696
699
  "CumulativeQuantity": abs(orderQuantity),
697
700
  "OrderDisclosedQuantity": 0,
@@ -701,13 +704,13 @@ class marketDataEngine(MarketDataSocketClient):
701
704
  "CancelRejectReason": "",
702
705
  "OrderUniqueIdentifier": orderUniqueIdentifier,
703
706
  "OrderLegStatus": "SingleOrderLeg",
704
- "LastTradedPrice": _data.BidInfo.Price,
707
+ "LastTradedPrice": _data.LastTradedPrice,
705
708
  "LastTradedQuantity": 0,
706
709
  "LastExecutionTransactTime": "2025-01-06T10:14:40",
707
710
  "ExecutionID": "402597456",
708
711
  "ExecutionReportIndex": 4,
709
712
  "IsSpread": False,
710
- "OrderAverageTradedPriceAPI": _data.BidInfo.Price,
713
+ "OrderAverageTradedPriceAPI": _data.LastTradedPrice,
711
714
  "OrderSideAPI": "SELL",
712
715
  "OrderGeneratedDateTimeAPI": datetime.now(),
713
716
  "ExchangeTransactTimeAPI": datetime.now(),
@@ -743,7 +746,7 @@ class marketDataEngine(MarketDataSocketClient):
743
746
  "OrderQuantity": orderQuantity,
744
747
  "OrderStopPrice": 0,
745
748
  "OrderStatus": "Filled",
746
- "OrderAverageTradedPrice": _data.AskInfo.Price,
749
+ "OrderAverageTradedPrice": _data.LastTradedPrice,
747
750
  "LeavesQuantity": 0,
748
751
  "CumulativeQuantity": orderQuantity,
749
752
  "OrderDisclosedQuantity": 0,
@@ -753,13 +756,13 @@ class marketDataEngine(MarketDataSocketClient):
753
756
  "CancelRejectReason": "",
754
757
  "OrderUniqueIdentifier": orderUniqueIdentifier,
755
758
  "OrderLegStatus": "SingleOrderLeg",
756
- "LastTradedPrice": _data.AskInfo.Price,
759
+ "LastTradedPrice": _data.LastTradedPrice,
757
760
  "LastTradedQuantity": 0,
758
761
  "LastExecutionTransactTime": "2025-01-15T15:09:56",
759
762
  "ExecutionID": "409661490",
760
763
  "ExecutionReportIndex": 3,
761
764
  "IsSpread": False,
762
- "OrderAverageTradedPriceAPI": _data.AskInfo.Price,
765
+ "OrderAverageTradedPriceAPI": _data.LastTradedPrice,
763
766
  "OrderSideAPI": "BUY",
764
767
  "OrderGeneratedDateTimeAPI": "15-01-2025 15:10:00",
765
768
  "ExchangeTransactTimeAPI": "15-01-2025 15:09:56",
@@ -1,27 +0,0 @@
1
- from pydantic import BaseModel
2
-
3
-
4
- class Order(BaseModel):
5
- """
6
- Order class representing an order in the system.
7
- Attributes:
8
- OrderUniqueIdentifier (str): A unique identifier for the order.
9
- AppOrderID (int): The application-specific order ID.
10
- OrderStatus (str): The status of the order. Defaults to an empty string.
11
- Methods:
12
- __init__(OrderUniqueIdentifier: str, AppOrderID: int, OrderStatus: str = ""):
13
- Initializes a new instance of the Order class.
14
- """
15
-
16
- OrderUniqueIdentifier: str
17
- AppOrderID: int
18
- OrderStatus: str
19
-
20
- def __init__(
21
- self, OrderUniqueIdentifier: str, AppOrderID: int, OrderStatus: str = ""
22
- ):
23
- super().__init__(
24
- OrderUniqueIdentifier=OrderUniqueIdentifier,
25
- AppOrderID=AppOrderID,
26
- OrderStatus=OrderStatus,
27
- )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes