architect-py 5.0.0b3__py3-none-any.whl → 5.1.0b1__py3-none-any.whl
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.
- architect_py/__init__.py +432 -5
- architect_py/async_client.py +72 -38
- architect_py/client.py +11 -4
- architect_py/client.pyi +504 -0
- architect_py/common_types/__init__.py +2 -1
- architect_py/common_types/time_in_force.py +94 -0
- architect_py/common_types/tradable_product.py +9 -0
- architect_py/graphql_client/__init__.py +1 -216
- architect_py/graphql_client/client.py +2 -1043
- architect_py/graphql_client/enums.py +0 -72
- architect_py/graphql_client/fragments.py +4 -152
- architect_py/grpc/__init__.py +0 -143
- architect_py/grpc/client.py +6 -1
- architect_py/grpc/models/Core/RestartCptyRequest.py +40 -0
- architect_py/grpc/models/Core/RestartCptyResponse.py +20 -0
- architect_py/grpc/models/Marketdata/Liquidation.py +0 -1
- architect_py/grpc/models/Marketdata/TickersRequest.py +38 -12
- architect_py/grpc/models/Marketdata/Trade.py +0 -1
- architect_py/grpc/models/Oms/Order.py +33 -24
- architect_py/grpc/models/Oms/PlaceOrderRequest.py +33 -24
- architect_py/grpc/models/__init__.py +113 -2
- architect_py/grpc/models/definitions.py +2 -32
- architect_py/grpc/utils.py +1 -4
- architect_py/tests/test_order_entry.py +1 -2
- architect_py/tests/test_orderflow.py +1 -1
- architect_py/utils/pandas.py +4 -3
- architect_py-5.1.0b1.dist-info/METADATA +66 -0
- {architect_py-5.0.0b3.dist-info → architect_py-5.1.0b1.dist-info}/RECORD +47 -66
- {architect_py-5.0.0b3.dist-info → architect_py-5.1.0b1.dist-info}/WHEEL +1 -1
- examples/book_subscription.py +1 -2
- examples/candles.py +1 -3
- examples/common.py +1 -2
- examples/external_cpty.py +2 -2
- examples/funding_rate_mean_reversion_algo.py +9 -6
- examples/order_sending.py +27 -7
- examples/stream_l1_marketdata.py +1 -2
- examples/stream_l2_marketdata.py +1 -2
- examples/trades.py +1 -2
- examples/tutorial_async.py +5 -7
- examples/tutorial_sync.py +5 -6
- scripts/add_imports_to_inits.py +146 -0
- scripts/correct_sync_interface.py +143 -0
- scripts/postprocess_grpc.py +57 -11
- scripts/preprocess_grpc_schema.py +2 -0
- scripts/prune_graphql_schema.py +187 -0
- architect_py/client_interface.py +0 -63
- architect_py/common_types/scalars.py +0 -25
- architect_py/graphql_client/cancel_all_orders_mutation.py +0 -17
- architect_py/graphql_client/cancel_order_mutation.py +0 -23
- architect_py/graphql_client/create_jwt.py +0 -17
- architect_py/graphql_client/get_account_history_query.py +0 -27
- architect_py/graphql_client/get_account_query.py +0 -23
- architect_py/graphql_client/get_account_summaries_query.py +0 -27
- architect_py/graphql_client/get_account_summary_query.py +0 -25
- architect_py/graphql_client/get_candle_snapshot_query.py +0 -27
- architect_py/graphql_client/get_fills_query.py +0 -69
- architect_py/graphql_client/get_historical_orders_query.py +0 -27
- architect_py/graphql_client/get_l_1_book_snapshot_query.py +0 -21
- architect_py/graphql_client/get_l_1_book_snapshots_query.py +0 -23
- architect_py/graphql_client/get_l_2_book_snapshot_query.py +0 -25
- architect_py/graphql_client/get_market_status_query.py +0 -25
- architect_py/graphql_client/get_open_orders_query.py +0 -25
- architect_py/graphql_client/list_accounts_query.py +0 -23
- architect_py/graphql_client/place_order_mutation.py +0 -23
- architect_py/graphql_client/subscribe_candles.py +0 -16
- architect_py/graphql_client/subscribe_orderflow.py +0 -100
- architect_py/graphql_client/subscribe_trades.py +0 -27
- architect_py/graphql_client/user_email_query.py +0 -17
- architect_py/internal_utils/__init__.py +0 -0
- architect_py/internal_utils/no_pandas.py +0 -3
- architect_py-5.0.0b3.dist-info/METADATA +0 -123
- scripts/generate_sync_interface.py +0 -226
- {architect_py-5.0.0b3.dist-info → architect_py-5.1.0b1.dist-info}/licenses/LICENSE +0 -0
- {architect_py-5.0.0b3.dist-info → architect_py-5.1.0b1.dist-info}/top_level.txt +0 -0
@@ -1,55 +1,34 @@
|
|
1
|
-
architect_py/__init__.py,sha256=
|
2
|
-
architect_py/async_client.py,sha256=
|
3
|
-
architect_py/client.py,sha256=
|
4
|
-
architect_py/
|
5
|
-
architect_py/common_types/__init__.py,sha256=
|
1
|
+
architect_py/__init__.py,sha256=18bhau9o35uBVHpoQlkCgF0aT-qNHYCO3JJpWkDykjM,16077
|
2
|
+
architect_py/async_client.py,sha256=Re743h6J6Qax5TAwf8Rv3A1AYTaHTYmcI5y1x5q7Eh8,58787
|
3
|
+
architect_py/client.py,sha256=fpgE23nqB9GGsOyGdf0WRhVektOjso-qRm-XiQVF690,6048
|
4
|
+
architect_py/client.pyi,sha256=OTlM_F_zANNHKuWV0XNGvcM9vIeENaZjBLSa8VMQXiI,23050
|
5
|
+
architect_py/common_types/__init__.py,sha256=fzOdIlKGWVN9V2Onc5z1v2bpvtZ4H9RSFA9ymJcBi3k,197
|
6
6
|
architect_py/common_types/order_dir.py,sha256=ebyWTcXzJWrotkc2D9wNGc6JXbE5I3NLLuAz3I7FTZ8,2191
|
7
|
-
architect_py/common_types/
|
8
|
-
architect_py/common_types/tradable_product.py,sha256=
|
9
|
-
architect_py/graphql_client/__init__.py,sha256=
|
7
|
+
architect_py/common_types/time_in_force.py,sha256=lzGAQCm_BqJ0mlNdZfhHYcybbHhP-Uc7dlcxrrCwQRo,3051
|
8
|
+
architect_py/common_types/tradable_product.py,sha256=S4sFIvG13KA4SVqUI9w2smWwomqL6Qh0xIkvKAIxKH0,2131
|
9
|
+
architect_py/graphql_client/__init__.py,sha256=fTZjb1MbdYM80p9dCklWwu5T0c7C3KYMLLGGsF7ZGAA,2306
|
10
10
|
architect_py/graphql_client/base_model.py,sha256=o2d-DixASFCGztr3rTiGX0AwgFu7Awr7EgD70FI8a-I,620
|
11
|
-
architect_py/graphql_client/
|
12
|
-
architect_py/graphql_client/
|
13
|
-
architect_py/graphql_client/client.py,sha256=2umynBj67CiQg8PDt4o8S6GAu4eYecxtk5-i_068hLg,43266
|
14
|
-
architect_py/graphql_client/create_jwt.py,sha256=PiiOOjGnHLXro8AU7FSu_vQA_adEK1iZM6XAzHpJP5E,285
|
15
|
-
architect_py/graphql_client/enums.py,sha256=ROE1yM0CFL0k2Jb9hUokSWlFPf1Sh9bbQLSrTSxX98Q,1532
|
11
|
+
architect_py/graphql_client/client.py,sha256=qsjGZG7M9KwGLL1f6dVLV8-r27vUIYA9al0IDJw4ugo,9976
|
12
|
+
architect_py/graphql_client/enums.py,sha256=DWXc19XsyY73AGwhZAMw-3XKxC4I6NYoLeW8F-lkYUw,158
|
16
13
|
architect_py/graphql_client/exceptions.py,sha256=OQu-ZYCCV4VyMWTd1HR8gIjIK2CrA_JMlFxqOAJugWY,2411
|
17
|
-
architect_py/graphql_client/fragments.py,sha256=
|
18
|
-
architect_py/graphql_client/get_account_history_query.py,sha256=eRx07b_vAroTOMvIxnigtSguQ3GmGBL8l8veS-ABRAM,605
|
19
|
-
architect_py/graphql_client/get_account_query.py,sha256=l3eUIFkWJXxDWDKmqltJC3qT0UcOlO4BPMRJZ24El8M,478
|
20
|
-
architect_py/graphql_client/get_account_summaries_query.py,sha256=3ZKIvNFqb4xLOLYuMg4Z4ZGQGZAd7W31yBIyqgKkhbA,627
|
21
|
-
architect_py/graphql_client/get_account_summary_query.py,sha256=15MgJMzNG8mmDd1-NFZK65E8vvR6LoMRe_5wwRBuXnE,574
|
22
|
-
architect_py/graphql_client/get_candle_snapshot_query.py,sha256=KjY1gCkfVTIJ-JXmHc2CzHgi9LB51w66Lvc0qHZ-Bok,633
|
14
|
+
architect_py/graphql_client/fragments.py,sha256=BR943TWicChGO7NG7VPYuhPBOPevDuqbOWvu0im8F7s,1661
|
23
15
|
architect_py/graphql_client/get_execution_info_query.py,sha256=SFrCAAI3nBOezy0uz7VViWcyLlDgfWjbjdR66-lqSF8,585
|
24
16
|
architect_py/graphql_client/get_execution_infos_query.py,sha256=fa5_sVw2xghrZiX8uSDx5rPbbV4wW_XpE5LxeaTID78,627
|
25
|
-
architect_py/graphql_client/get_fills_query.py,sha256=4CvsyULxPuDkHQgCuwB2ooIMnCqKmT1aX7gLL1KqbSE,2294
|
26
17
|
architect_py/graphql_client/get_first_notice_date_query.py,sha256=YT9nzW0GihGwr3eQ1_NULnb68RezVnT3xUnQNYcDTn0,665
|
27
18
|
architect_py/graphql_client/get_future_series_query.py,sha256=pRfdJ31gW2bxYotmXvll6PtwFz8K6eNAZSo3DYBj1jI,383
|
28
|
-
architect_py/graphql_client/get_historical_orders_query.py,sha256=FwxWPICnnfvdcQ7zftOLiROWOvaCrBLEibtaLsG_bnk,609
|
29
|
-
architect_py/graphql_client/get_l_1_book_snapshot_query.py,sha256=UVfuPb7Rw62S5xwyS2Z8ynpNzY8WKroEmyCcFQ-HUWg,501
|
30
|
-
architect_py/graphql_client/get_l_1_book_snapshots_query.py,sha256=CejehYMtqbibcat8pO8CICZo3Vhl1N1zRaiPaJWMhVw,542
|
31
|
-
architect_py/graphql_client/get_l_2_book_snapshot_query.py,sha256=paAIdFw-YWZEFrbD1YdidzgTIyYHuG3AUmxEn3x8oOM,590
|
32
|
-
architect_py/graphql_client/get_market_status_query.py,sha256=0O5KqC1kgbB5uHqESmZ505ORE5SZdCZT7h2kI0riEVY,578
|
33
|
-
architect_py/graphql_client/get_open_orders_query.py,sha256=23Qk_RwXrDK8Ub_r-ma3N_YYwm_FWnVjv7QKuVuZE5Y,517
|
34
19
|
architect_py/graphql_client/get_product_info_query.py,sha256=oxDDx3J2jGSnNXQZw-lDHdzZO33XCOC0hpNSofjqKQ0,598
|
35
20
|
architect_py/graphql_client/get_product_infos_query.py,sha256=vZImiKh19LCG0yKiw9aP9y1lnUgxgywW7whj1FeSnGk,601
|
36
21
|
architect_py/graphql_client/input_types.py,sha256=6Obe-vvDm4TDgH3oRZUzbEvkbquaQOHYRK_62B1_0FA,57
|
37
22
|
architect_py/graphql_client/juniper_base_client.py,sha256=njikUx3G2PLqYmx6PGhT_EHALUwD9EHlI2o4W1XMnMk,12609
|
38
|
-
architect_py/graphql_client/list_accounts_query.py,sha256=C-CpCZfbIfrT_4KJbvQlLIRKQb2DWGQCNWYFJy-K87g,487
|
39
|
-
architect_py/graphql_client/place_order_mutation.py,sha256=KG45qNafDPvbuy3gfrBtre1zdLanam_gBKMmdf6GtFs,486
|
40
23
|
architect_py/graphql_client/search_symbols_query.py,sha256=hbGa6gF-gMWtRYQm2vlCTPDex8RWrJ4Yn4nT0VRQnCQ,614
|
41
|
-
architect_py/graphql_client/subscribe_candles.py,sha256=IWc1Rjs8aAPR4nDhDe_IzMYRVjdSSy5k7MpvSsTIH6w,295
|
42
|
-
architect_py/graphql_client/subscribe_orderflow.py,sha256=64GvkTUsHlkRFtZLa3NLnNs7kmGETxmS8zq6MF_5k8Q,3402
|
43
|
-
architect_py/graphql_client/subscribe_trades.py,sha256=105LyG0kPvYHk_IsJaEjpEQh2AGP9Wqmp93Q8HF89BA,654
|
44
|
-
architect_py/graphql_client/user_email_query.py,sha256=KDFLFfLW5YtAptBm6CMQ_dVpcuEBofv4XlaYkW-VmcA,305
|
45
24
|
architect_py/graphql_client/user_id_query.py,sha256=tWKJJLgEINzd8e7rYlGklQCnwcwHzYFpCGQvhxQGX20,334
|
46
|
-
architect_py/grpc/__init__.py,sha256=
|
47
|
-
architect_py/grpc/client.py,sha256=
|
25
|
+
architect_py/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
|
+
architect_py/grpc/client.py,sha256=6NolGeMdIxEcx1R0ij_wWW-o1MspS_XqYE2TtQqaxsk,3343
|
48
27
|
architect_py/grpc/resolve_endpoint.py,sha256=HnOYC7n7taeSdnGY5E4TCSArCuY2LTwsGOnt_YLh9vQ,2415
|
49
28
|
architect_py/grpc/server.py,sha256=Abmdfe1eYbctVgzoJYBBBLpd7UD70FbYQLtJImSyRzs,1934
|
50
|
-
architect_py/grpc/utils.py,sha256=
|
51
|
-
architect_py/grpc/models/__init__.py,sha256=
|
52
|
-
architect_py/grpc/models/definitions.py,sha256=
|
29
|
+
architect_py/grpc/utils.py,sha256=5sykLExUNZbcQHcxLCCM9DdOOiJJZcpputGrDtaMifY,667
|
30
|
+
architect_py/grpc/models/__init__.py,sha256=RrTLZvU7mNykDNp1oOm4-dekzab9ugIXd_my7Sm0Vx4,9153
|
31
|
+
architect_py/grpc/models/definitions.py,sha256=R7saySbcFH_OADDO-aWZqlJmF6hjWY-TxopDX_Mu3qk,75743
|
53
32
|
architect_py/grpc/models/Accounts/AccountsRequest.py,sha256=1a88cltSebOb53EdJ0hKEGR7FlmBiibrCtGzLTKqDBY,1524
|
54
33
|
architect_py/grpc/models/Accounts/AccountsResponse.py,sha256=DlXbkd3UbRybblBAfokw-K6nRvLNZgqz7cc0EKiW1zI,636
|
55
34
|
architect_py/grpc/models/Accounts/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
@@ -81,6 +60,8 @@ architect_py/grpc/models/Boss/WithdrawalsResponse.py,sha256=th6r28rjNBUuMBs95lwf
|
|
81
60
|
architect_py/grpc/models/Boss/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
82
61
|
architect_py/grpc/models/Core/ConfigRequest.py,sha256=9taH97J4b-_Co7d-o_zHOPg_vckc_InvnADXYpd_MlM,809
|
83
62
|
architect_py/grpc/models/Core/ConfigResponse.py,sha256=pQimTNwdE-FL2Z1Pq6_YRPmagt-ZgJoub9P1lpj0gVk,556
|
63
|
+
architect_py/grpc/models/Core/RestartCptyRequest.py,sha256=Hl_uSGkMFE9yPonClcNE24neeib8LP3fHH6UwpI_WSQ,916
|
64
|
+
architect_py/grpc/models/Core/RestartCptyResponse.py,sha256=aCyJfucfFGHieGURjEejeT9HPoaKJ2xCGPVqw5pcCJs,427
|
84
65
|
architect_py/grpc/models/Core/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
85
66
|
architect_py/grpc/models/Cpty/CptyRequest.py,sha256=eWBayFNnhAZgszneP7f6hDvzQ82JQrFLDSeOPAyiRlg,1711
|
86
67
|
architect_py/grpc/models/Cpty/CptyResponse.py,sha256=UObbkmbtD3sWWklml4hx-Ggc1RaI1v1-J5QW9doWpe4,2865
|
@@ -113,7 +94,7 @@ architect_py/grpc/models/Marketdata/L1BookSnapshotsRequest.py,sha256=TFGnuPfTcHM
|
|
113
94
|
architect_py/grpc/models/Marketdata/L2BookSnapshot.py,sha256=MEyDSZ6LfAtyujGLRZ6pts5o7UNIp8A9_kqV6K7Y-k8,2572
|
114
95
|
architect_py/grpc/models/Marketdata/L2BookSnapshotRequest.py,sha256=9qRKbwY2KLtW2F-40XOvRfT73kVPTymL0Q3JCR2EbtU,1072
|
115
96
|
architect_py/grpc/models/Marketdata/L2BookUpdate.py,sha256=i-kWdJZvAoYEI280TfC3sTH46VIpMoj8N2UxWAkTDLs,2602
|
116
|
-
architect_py/grpc/models/Marketdata/Liquidation.py,sha256=
|
97
|
+
architect_py/grpc/models/Marketdata/Liquidation.py,sha256=cLKfosZl0gdVuL3qoFuJ32UB7Xjk9vVhOxsoc_QNLEw,2420
|
117
98
|
architect_py/grpc/models/Marketdata/MarketStatus.py,sha256=4Kt2z16t7dpjpiELWshJyyH1b-D07YdQchjGMvZkSRM,977
|
118
99
|
architect_py/grpc/models/Marketdata/MarketStatusRequest.py,sha256=ajyI4UlvFusyM0743dukT4KFZTlp9iUh0lTGWl6n7nw,1056
|
119
100
|
architect_py/grpc/models/Marketdata/SubscribeCandlesRequest.py,sha256=ck5pQx54uymlpR-jxFpxcW0LPDLU7R8GvqLqF-7GmoU,1508
|
@@ -127,9 +108,9 @@ architect_py/grpc/models/Marketdata/SubscribeTradesRequest.py,sha256=7P8FyNx6wij
|
|
127
108
|
architect_py/grpc/models/Marketdata/Ticker.py,sha256=XOZbaSwCOyE8sDQi4aKA7jc39igXay63JCFOpeQN1Fo,11091
|
128
109
|
architect_py/grpc/models/Marketdata/TickerRequest.py,sha256=Ay--5JKgCfdvlVWD2H6YSa_66NC3Dt6c-XK8JkbWhus,1008
|
129
110
|
architect_py/grpc/models/Marketdata/TickerUpdate.py,sha256=sJ4wvCeGckMV30HwAcAsEMQbCzjN31OxF19q70jdxok,437
|
130
|
-
architect_py/grpc/models/Marketdata/TickersRequest.py,sha256=
|
111
|
+
architect_py/grpc/models/Marketdata/TickersRequest.py,sha256=_BYkOO2pk-terLNwyxN8gtHQxIrfPA7klodDeTS5ouM,2200
|
131
112
|
architect_py/grpc/models/Marketdata/TickersResponse.py,sha256=CLzKx-ItwH9-Qq8YruFhXh7TmtHwzNRMEOPJ9LQD9co,574
|
132
|
-
architect_py/grpc/models/Marketdata/Trade.py,sha256=
|
113
|
+
architect_py/grpc/models/Marketdata/Trade.py,sha256=RKZq_HUDLxIE41caDrwf99V0c48kH2pm3XRCn5RLcEQ,2476
|
133
114
|
architect_py/grpc/models/Marketdata/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
134
115
|
architect_py/grpc/models/Oms/Cancel.py,sha256=P550abgbBqVbC3UE7YaOaEytF__DsTYWsepNvkHaAQE,2357
|
135
116
|
architect_py/grpc/models/Oms/CancelAllOrdersRequest.py,sha256=oCRbluj6nyoDCHQszPDRIBt4ygFyO7QHZhCf8T8-fYM,1474
|
@@ -137,10 +118,10 @@ architect_py/grpc/models/Oms/CancelAllOrdersResponse.py,sha256=YM1H_nrV4RhpLMEwS
|
|
137
118
|
architect_py/grpc/models/Oms/CancelOrderRequest.py,sha256=0yJysCf0IcwUevEqVnAkIm-OkOAbp_vOwh1p1ljSsp8,1939
|
138
119
|
architect_py/grpc/models/Oms/OpenOrdersRequest.py,sha256=5Uv9ndI2WqRJgOWNLeKcIV8czb0ff6wHUW0gokeBktg,1804
|
139
120
|
architect_py/grpc/models/Oms/OpenOrdersResponse.py,sha256=HT4YXjbbwdp2rLLXxoetF33DGe2j403soMLme2p18ts,592
|
140
|
-
architect_py/grpc/models/Oms/Order.py,sha256=
|
121
|
+
architect_py/grpc/models/Oms/Order.py,sha256=wcLx5lK_xF3z99Ix1Q1j43Mjk4zvoyBGwgFuYmOB-5E,10257
|
141
122
|
architect_py/grpc/models/Oms/PendingCancelsRequest.py,sha256=jdbBOpCHBlZFAZfF6urJZXXa5Dr5cTRR3AJ9ss4rY6E,1620
|
142
123
|
architect_py/grpc/models/Oms/PendingCancelsResponse.py,sha256=mWRNRDa489Vdg-r7dJMOmfOO8l57yg8lBMynBDcY60A,628
|
143
|
-
architect_py/grpc/models/Oms/PlaceOrderRequest.py,sha256=
|
124
|
+
architect_py/grpc/models/Oms/PlaceOrderRequest.py,sha256=se2iSEC_TrL5y-m_CRJkk9jsYLFOGnE57QFwz4Dqtck,8317
|
144
125
|
architect_py/grpc/models/Oms/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
145
126
|
architect_py/grpc/models/OptionsMarketdata/OptionsChain.py,sha256=8Sdp57aUXlW13X1POlBKxxaEZofwRZ7VGDLzq1l9GoU,732
|
146
127
|
architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeks.py,sha256=Jhb5CM4t84EdETDO3SOakHkuaWG30Dm4lREpKgBFzFM,742
|
@@ -172,43 +153,43 @@ architect_py/grpc/models/Symbology/UploadProductCatalogResponse.py,sha256=AiUFNc
|
|
172
153
|
architect_py/grpc/models/Symbology/UploadSymbologyRequest.py,sha256=XRMC6W6LLG0dyAU54RitAD0p0dCZTs16NFxubK_WNI0,1840
|
173
154
|
architect_py/grpc/models/Symbology/UploadSymbologyResponse.py,sha256=LM6iHjta4yZY784qMR5etG9gKjiBsBCntZqAcmaOHac,444
|
174
155
|
architect_py/grpc/models/Symbology/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
175
|
-
architect_py/internal_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
176
|
-
architect_py/internal_utils/no_pandas.py,sha256=RFlzX85yjI7XnoWHutqvtYlzKVHw8DF2y-DyoeS_vys,44
|
177
156
|
architect_py/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
178
157
|
architect_py/tests/conftest.py,sha256=5CcEuqakcU-ZapywYZRcLI5y1GicrTeOxiEixt--R0w,3552
|
179
158
|
architect_py/tests/test_book_building.py,sha256=biqs8X9bw1YSb6mrCDS-ELesdD-P5F6bE3MYXP0BeQ4,1236
|
180
159
|
architect_py/tests/test_marketdata.py,sha256=mhYIiNhmsY706PQD3Nvto0l4uDl5dPHn8BcqGPgFCA8,4714
|
181
|
-
architect_py/tests/test_order_entry.py,sha256=
|
182
|
-
architect_py/tests/test_orderflow.py,sha256=
|
160
|
+
architect_py/tests/test_order_entry.py,sha256=qRKWa4QvIlurZG96AK2CMF9dpRAKep9RquOuEAdAuRY,1148
|
161
|
+
architect_py/tests/test_orderflow.py,sha256=PRCr4Yzaif9OG0Eq1zxCUpTfFsHA3WEWSBiETRDvnIE,1038
|
183
162
|
architect_py/tests/test_portfolio_management.py,sha256=LPlkLP2SllLPm0Un7OptfVo96uqiDI7-osTaHxH5m54,677
|
184
163
|
architect_py/tests/test_rounding.py,sha256=cAQ1-tWOVgxENt0Fzs9YcFDdDDYmCtOHvAA_w76wy9g,1417
|
185
164
|
architect_py/tests/test_symbology.py,sha256=892FN_FGwE8t4lVQtUMGKav69MGzHACeF5RAYrAEdBw,2707
|
186
165
|
architect_py/utils/nearest_tick.py,sha256=i1cCGMSi-sP4Grbp0RCwEsoLzMWN9iC6gPMBm2daDWM,4810
|
187
166
|
architect_py/utils/nearest_tick_2.py,sha256=f-o6b73Mo8epCIaOYBS9F0k_6UHUDSVG1N_VWg7iFBU,3641
|
188
167
|
architect_py/utils/orderbook.py,sha256=JM02NhHbmK3sNaS2Ara8FBY4TvKvtMIzJW1oVd8KC3s,1004
|
189
|
-
architect_py/utils/pandas.py,sha256=
|
168
|
+
architect_py/utils/pandas.py,sha256=QHz2ynj4T92FobuzRaNoH3ypArHoSDCiGtZ3PVXJ2vo,1017
|
190
169
|
architect_py/utils/price_bands.py,sha256=j7ioSA3dx025CD5E2Vg7XQvmjPvxQb-gzQBfQTovpTw,21874
|
191
170
|
architect_py/utils/symbol_parsing.py,sha256=OjJzk2c6QU2s0aJMSyVEzlWD5Vy-RlakJVW7jNHVDJk,845
|
192
|
-
architect_py-5.
|
171
|
+
architect_py-5.1.0b1.dist-info/licenses/LICENSE,sha256=6P0_5gYN8iPWPZeqA9nxiO3tRQmcSA1ijAVR7C8j1SI,11362
|
193
172
|
examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
194
|
-
examples/book_subscription.py,sha256=
|
195
|
-
examples/candles.py,sha256=
|
196
|
-
examples/common.py,sha256=
|
197
|
-
examples/external_cpty.py,sha256=
|
198
|
-
examples/funding_rate_mean_reversion_algo.py,sha256=
|
199
|
-
examples/order_sending.py,sha256=
|
200
|
-
examples/stream_l1_marketdata.py,sha256=
|
201
|
-
examples/stream_l2_marketdata.py,sha256=
|
202
|
-
examples/trades.py,sha256=
|
203
|
-
examples/tutorial_async.py,sha256=
|
204
|
-
examples/tutorial_sync.py,sha256=
|
173
|
+
examples/book_subscription.py,sha256=eyXEt23dTyyArXt7N7C-XdRmLFSdZSntOYZaL0W-PBU,1440
|
174
|
+
examples/candles.py,sha256=AicLj6d-yUVbZVX-mQUBJkI6KEoJeC-BErvxD9-8Z8Y,735
|
175
|
+
examples/common.py,sha256=K2ppu4vdlTNsL1oX5RDrNKczljfPVOTPzDia1Abrppg,2987
|
176
|
+
examples/external_cpty.py,sha256=xxGXONXwoWIS8ys0SgxHLSmntAi1BlwV2NR9WD1kvpc,2527
|
177
|
+
examples/funding_rate_mean_reversion_algo.py,sha256=iP3bghdYMzERfaJMs_QJZ-e3SUVhLgHLNPvOf2sDkIQ,6482
|
178
|
+
examples/order_sending.py,sha256=2Wple0qOe1I-9c8nTX9xtOuMjIvPydIezUfn6LQnWlE,3290
|
179
|
+
examples/stream_l1_marketdata.py,sha256=Oi7ovb0i4hTdWfkhcRYUJLW5Ou64JxWzZMGhqSL8f_I,707
|
180
|
+
examples/stream_l2_marketdata.py,sha256=e5d0z4Hft3X51oZsPwJbb_5VG2iDfCMlbbFv3qOkma4,1070
|
181
|
+
examples/trades.py,sha256=AGKX8g7Xaf5r-KPWEeeAfL7XxoVeh8WsZvaWW5kBuMg,540
|
182
|
+
examples/tutorial_async.py,sha256=HTh2iVJOlXckenWRJxYxp8awhNGBiFPDgtIe4f8mBYk,2626
|
183
|
+
examples/tutorial_sync.py,sha256=egXb184Q-HuSK7G-NHcnOFM8ywmv08tlKr4GUrk75sY,2813
|
184
|
+
scripts/add_imports_to_inits.py,sha256=bryhz6RpKAJsSieVMnXnRyLp8evNkpOsNUkBUPkk1WQ,4518
|
185
|
+
scripts/correct_sync_interface.py,sha256=O8qxSqNSNIL8KrgZ4C8rjs_pUCdcA1WeqKAggM2DINw,4056
|
205
186
|
scripts/generate_functions_md.py,sha256=-rVRhbHlDodGH2a32UCsMLIpgXtDvOhBmkHa0RqDpCA,6232
|
206
|
-
scripts/
|
207
|
-
scripts/
|
208
|
-
scripts/
|
187
|
+
scripts/postprocess_grpc.py,sha256=QqFZdOLH6hLPRCLUkf7qvuGooLsXulcpMghCpleHc-A,23198
|
188
|
+
scripts/preprocess_grpc_schema.py,sha256=p9LdoMZzixBSsVx7Dy3_8uJzOy_QwCoVMkAABQKUsBA,22894
|
189
|
+
scripts/prune_graphql_schema.py,sha256=hmfw5FD_iKGKMFkq6H1neZiXXtljFFrOwi2fiusTWE4,6210
|
209
190
|
templates/exceptions.py,sha256=tIHbiO5Q114h9nPwJXsgHvW_bERLwxuNp9Oj41p6t3A,2379
|
210
191
|
templates/juniper_base_client.py,sha256=x3W5bRmeAK-oznsjJm_4TvrRJJICW23jKHcCKUIj7Vg,12577
|
211
|
-
architect_py-5.
|
212
|
-
architect_py-5.
|
213
|
-
architect_py-5.
|
214
|
-
architect_py-5.
|
192
|
+
architect_py-5.1.0b1.dist-info/METADATA,sha256=gdF0ZucoSHYWHr8320fPwGYKbfaPeFghMQmfLzFX5_I,2369
|
193
|
+
architect_py-5.1.0b1.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
194
|
+
architect_py-5.1.0b1.dist-info/top_level.txt,sha256=UjtO97OACFQ9z5MzS-X2wBlt5Ovk1vxakQPKfokI454,40
|
195
|
+
architect_py-5.1.0b1.dist-info/RECORD,,
|
examples/book_subscription.py
CHANGED
@@ -3,8 +3,7 @@ import os
|
|
3
3
|
|
4
4
|
from pydantic import ValidationError
|
5
5
|
|
6
|
-
from architect_py
|
7
|
-
from architect_py.common_types.tradable_product import TradableProduct
|
6
|
+
from architect_py import AsyncClient, TradableProduct
|
8
7
|
from architect_py.graphql_client.exceptions import GraphQLClientHttpError
|
9
8
|
|
10
9
|
from .common import connect_async_client
|
examples/candles.py
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
-
from architect_py
|
4
|
-
from architect_py.common_types.tradable_product import TradableProduct
|
3
|
+
from architect_py import AsyncClient, CandleWidth, TradableProduct
|
5
4
|
from architect_py.graphql_client.exceptions import GraphQLClientHttpError
|
6
|
-
from architect_py.grpc.models.definitions import CandleWidth
|
7
5
|
|
8
6
|
from .common import connect_async_client
|
9
7
|
|
examples/common.py
CHANGED
examples/external_cpty.py
CHANGED
@@ -5,8 +5,7 @@ from typing import Iterator
|
|
5
5
|
|
6
6
|
import grpc
|
7
7
|
|
8
|
-
from architect_py
|
9
|
-
from architect_py.grpc.models.definitions import (
|
8
|
+
from architect_py import (
|
10
9
|
CptyLoginRequest,
|
11
10
|
CptyLogoutRequest,
|
12
11
|
ExecutionInfo,
|
@@ -14,6 +13,7 @@ from architect_py.grpc.models.definitions import (
|
|
14
13
|
SimpleDecimal,
|
15
14
|
Unit,
|
16
15
|
)
|
16
|
+
from architect_py.grpc.models.Cpty.CptyResponse import Symbology
|
17
17
|
from architect_py.grpc.models.Orderflow.OrderflowRequest import CancelOrder, PlaceOrder
|
18
18
|
from architect_py.grpc.server import (
|
19
19
|
CptyServicer,
|
@@ -6,11 +6,14 @@ import asyncio
|
|
6
6
|
from decimal import Decimal
|
7
7
|
from typing import AsyncIterator, Optional
|
8
8
|
|
9
|
-
from architect_py
|
10
|
-
|
11
|
-
|
9
|
+
from architect_py import (
|
10
|
+
AsyncClient,
|
11
|
+
OrderDir,
|
12
|
+
OrderType,
|
13
|
+
TimeInForce,
|
14
|
+
TradableProduct,
|
15
|
+
)
|
12
16
|
from architect_py.graphql_client.exceptions import GraphQLClientHttpError
|
13
|
-
from architect_py.grpc.models.definitions import OrderType, TimeInForceEnum
|
14
17
|
from architect_py.grpc.models.Orderflow.Orderflow import (
|
15
18
|
TaggedOrderAck,
|
16
19
|
TaggedOrderOut,
|
@@ -124,7 +127,7 @@ async def step_to_target_position(
|
|
124
127
|
quantity=Decimal(1),
|
125
128
|
execution_venue=None,
|
126
129
|
limit_price=best_ask_price,
|
127
|
-
time_in_force=
|
130
|
+
time_in_force=TimeInForce.DAY,
|
128
131
|
order_type=OrderType.LIMIT,
|
129
132
|
)
|
130
133
|
|
@@ -139,7 +142,7 @@ async def step_to_target_position(
|
|
139
142
|
quantity=Decimal(1),
|
140
143
|
execution_venue=None,
|
141
144
|
limit_price=best_bid_price,
|
142
|
-
time_in_force=
|
145
|
+
time_in_force=TimeInForce.DAY,
|
143
146
|
order_type=OrderType.LIMIT,
|
144
147
|
)
|
145
148
|
|
examples/order_sending.py
CHANGED
@@ -3,10 +3,7 @@ import logging
|
|
3
3
|
from datetime import datetime, timedelta, timezone
|
4
4
|
from decimal import Decimal
|
5
5
|
|
6
|
-
from architect_py
|
7
|
-
from architect_py.common_types.order_dir import OrderDir
|
8
|
-
from architect_py.common_types.tradable_product import TradableProduct
|
9
|
-
from architect_py.grpc.models.definitions import GoodTilDate, OrderType, TimeInForceEnum
|
6
|
+
from architect_py import AsyncClient, OrderDir, OrderType, TimeInForce, TradableProduct
|
10
7
|
from examples.common import connect_async_client
|
11
8
|
|
12
9
|
LOGGER = logging.getLogger(__name__)
|
@@ -35,7 +32,7 @@ async def test_send_order(client: AsyncClient, account: str):
|
|
35
32
|
best_bid_price, best_bid_quantity = snapshot.best_bid
|
36
33
|
|
37
34
|
d = datetime.now(tz=timezone.utc) + timedelta(days=1)
|
38
|
-
gtd =
|
35
|
+
gtd = TimeInForce.GTD(d)
|
39
36
|
|
40
37
|
order = await client.place_limit_order(
|
41
38
|
symbol=symbol,
|
@@ -45,7 +42,8 @@ async def test_send_order(client: AsyncClient, account: str):
|
|
45
42
|
execution_venue="CME",
|
46
43
|
post_only=True,
|
47
44
|
limit_price=best_bid_price
|
48
|
-
- (snapshot.best_ask[0] - best_bid_price)
|
45
|
+
- (snapshot.best_ask[0] - best_bid_price)
|
46
|
+
* Decimal(10), # this sends the buy order for way below the market
|
49
47
|
account=account,
|
50
48
|
time_in_force=gtd,
|
51
49
|
)
|
@@ -72,10 +70,32 @@ async def test_send_market_pro_order(client: AsyncClient, account: str):
|
|
72
70
|
odir=OrderDir.BUY,
|
73
71
|
quantity=Decimal(1),
|
74
72
|
account=account,
|
75
|
-
time_in_force=
|
73
|
+
time_in_force=TimeInForce.IOC,
|
76
74
|
)
|
77
75
|
|
78
76
|
|
77
|
+
async def send_NQ_buy_for_mid(client: AsyncClient, account: str):
|
78
|
+
CME = "CME"
|
79
|
+
NQ_lead_future = await client.get_front_future("NQ CME Futures", CME)
|
80
|
+
|
81
|
+
snapshot = await client.get_l1_book_snapshot(NQ_lead_future, CME)
|
82
|
+
if snapshot is None or snapshot.best_ask is None or snapshot.best_bid is None:
|
83
|
+
return ValueError(f"Market snapshot for {NQ_lead_future} is None")
|
84
|
+
|
85
|
+
order = await client.place_limit_order(
|
86
|
+
symbol=NQ_lead_future,
|
87
|
+
odir=OrderDir.BUY,
|
88
|
+
quantity=Decimal(1),
|
89
|
+
order_type=OrderType.LIMIT,
|
90
|
+
execution_venue=CME,
|
91
|
+
post_only=True,
|
92
|
+
limit_price=(snapshot.best_ask[0] + snapshot.best_bid[0]) / 2,
|
93
|
+
account=account,
|
94
|
+
time_in_force=TimeInForce.IOC,
|
95
|
+
)
|
96
|
+
print(order)
|
97
|
+
|
98
|
+
|
79
99
|
async def main():
|
80
100
|
client: AsyncClient = await connect_async_client()
|
81
101
|
accounts = await client.list_accounts()
|
examples/stream_l1_marketdata.py
CHANGED
examples/stream_l2_marketdata.py
CHANGED
examples/trades.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
-
from architect_py
|
4
|
-
from architect_py.common_types.tradable_product import TradableProduct
|
3
|
+
from architect_py import AsyncClient, TradableProduct
|
5
4
|
from architect_py.graphql_client.exceptions import GraphQLClientHttpError
|
6
5
|
|
7
6
|
from .common import connect_async_client
|
examples/tutorial_async.py
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
import asyncio
|
2
2
|
from decimal import Decimal
|
3
3
|
|
4
|
-
from architect_py
|
5
|
-
from architect_py.common_types.tradable_product import TradableProduct
|
6
|
-
from architect_py.graphql_client.enums import OrderStatus
|
4
|
+
from architect_py import OrderDir, OrderStatus, TradableProduct
|
7
5
|
from examples.common import connect_async_client
|
8
6
|
|
9
7
|
|
@@ -63,7 +61,7 @@ async def main():
|
|
63
61
|
# Poll order status until rejected or fully executed
|
64
62
|
# After 5 seconds, cancel the order
|
65
63
|
i = 0
|
66
|
-
while order.status is OrderStatus.
|
64
|
+
while order.status is OrderStatus.Open:
|
67
65
|
await asyncio.sleep(1)
|
68
66
|
print(f"...order state: {order.status}")
|
69
67
|
order = await c.get_order(order.id)
|
@@ -73,11 +71,11 @@ async def main():
|
|
73
71
|
print("Canceling order")
|
74
72
|
await c.cancel_order(order.id)
|
75
73
|
|
76
|
-
if order.status is OrderStatus.
|
74
|
+
if order.status is OrderStatus.Rejected:
|
77
75
|
print(f"Order was rejected: {order.reject_reason}")
|
78
|
-
elif order.status is OrderStatus.
|
76
|
+
elif order.status is OrderStatus.Canceled:
|
79
77
|
print("Order was canceled")
|
80
|
-
elif order.status is OrderStatus.
|
78
|
+
elif order.status is OrderStatus.Out:
|
81
79
|
print(f"Order was filled for qty: {order.filled_quantity}")
|
82
80
|
print(f"Average execution price: {order.average_fill_price}")
|
83
81
|
|
examples/tutorial_sync.py
CHANGED
@@ -2,8 +2,7 @@ import pprint
|
|
2
2
|
import time
|
3
3
|
from decimal import Decimal
|
4
4
|
|
5
|
-
from architect_py
|
6
|
-
from architect_py.graphql_client.enums import OrderStatus
|
5
|
+
from architect_py import OrderDir, OrderStatus
|
7
6
|
from architect_py.utils.nearest_tick import TickRoundMethod
|
8
7
|
|
9
8
|
from .common import confirm, connect_client, print_book, print_open_orders
|
@@ -79,17 +78,17 @@ assert order is not None
|
|
79
78
|
print(f"\nOrder placed with ID: {order.id}")
|
80
79
|
|
81
80
|
# Poll order status until rejected or fully executed
|
82
|
-
while order.status is OrderStatus.
|
81
|
+
while order.status is OrderStatus.Open:
|
83
82
|
time.sleep(1)
|
84
83
|
print(f"...order state: {order.status}")
|
85
84
|
order = c.get_order(order.id)
|
86
85
|
assert order is not None
|
87
86
|
|
88
87
|
# Print final order state
|
89
|
-
if order.status is OrderStatus.
|
88
|
+
if order.status is OrderStatus.Rejected:
|
90
89
|
print(f"Order was rejected: {order.reject_reason}")
|
91
|
-
elif order.status is OrderStatus.
|
90
|
+
elif order.status is OrderStatus.Canceled:
|
92
91
|
print("Order was canceled")
|
93
|
-
elif order.status is OrderStatus.
|
92
|
+
elif order.status is OrderStatus.Out:
|
94
93
|
print(f"Order was filled for qty: {order.filled_quantity}")
|
95
94
|
print(f"Average execution price: {order.average_fill_price}")
|
@@ -0,0 +1,146 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
import argparse
|
3
|
+
import ast
|
4
|
+
from pathlib import Path
|
5
|
+
|
6
|
+
|
7
|
+
def collect_definitions(py_file: Path) -> list[str]:
|
8
|
+
"""
|
9
|
+
Parse the given .py file with ast and return a list of:
|
10
|
+
- all top-level class names
|
11
|
+
- all top-level names assigned via Annotated[...]
|
12
|
+
- all top-level names assigned to a bare type alias (e.g. SomeAlias = str)
|
13
|
+
"""
|
14
|
+
src = py_file.read_text()
|
15
|
+
tree = ast.parse(src, filename=str(py_file))
|
16
|
+
names: list[str] = []
|
17
|
+
|
18
|
+
for node in tree.body:
|
19
|
+
# 1) class definitions
|
20
|
+
if isinstance(node, ast.ClassDef):
|
21
|
+
names.append(node.name)
|
22
|
+
|
23
|
+
# 2) Annotated aliases: e.g. OrderId = Annotated[...]
|
24
|
+
elif (
|
25
|
+
isinstance(node, ast.Assign)
|
26
|
+
and len(node.targets) == 1
|
27
|
+
and isinstance(node.targets[0], ast.Name)
|
28
|
+
):
|
29
|
+
target = node.targets[0].id
|
30
|
+
val = node.value
|
31
|
+
# Annotated[...]?
|
32
|
+
if (
|
33
|
+
isinstance(val, ast.Subscript)
|
34
|
+
and isinstance(val.value, ast.Name)
|
35
|
+
and val.value.id == "Annotated"
|
36
|
+
):
|
37
|
+
names.append(target)
|
38
|
+
# simple alias: = SomeType (e.g. = str, = int, = UUID, etc.)
|
39
|
+
elif isinstance(val, ast.Name):
|
40
|
+
names.append(target)
|
41
|
+
|
42
|
+
return names
|
43
|
+
|
44
|
+
|
45
|
+
def get_version(py_file: Path) -> str:
|
46
|
+
prev = py_file.read_text()
|
47
|
+
prev_lines = prev.splitlines()
|
48
|
+
for line in prev_lines:
|
49
|
+
if line.startswith("__version__"):
|
50
|
+
return line
|
51
|
+
raise ValueError("Could not find __version__ in the existing __init__.py file.")
|
52
|
+
|
53
|
+
|
54
|
+
def main(architect_path: Path, output: Path):
|
55
|
+
"""
|
56
|
+
Generate static imports + __all__ (including definitions.py) for grpc/models
|
57
|
+
|
58
|
+
This only works for the main request/response classes that the file is named after.
|
59
|
+
The definitions.py file is not included for the grpc __init__ because it causes circular imports.
|
60
|
+
"""
|
61
|
+
|
62
|
+
models_root = architect_path / "grpc" / "models"
|
63
|
+
|
64
|
+
version = get_version(output)
|
65
|
+
import_lines: list[str] = [
|
66
|
+
"# ruff: noqa:I001\n",
|
67
|
+
version,
|
68
|
+
"",
|
69
|
+
"from .utils.nearest_tick import TickRoundMethod",
|
70
|
+
"from .async_client import AsyncClient",
|
71
|
+
"from .client import Client",
|
72
|
+
"from .common_types import OrderDir, TradableProduct, TimeInForce, Venue",
|
73
|
+
]
|
74
|
+
|
75
|
+
all_names: list[str] = [
|
76
|
+
"TickRoundMethod",
|
77
|
+
"AsyncClient",
|
78
|
+
"Client",
|
79
|
+
"OrderDir",
|
80
|
+
"TradableProduct",
|
81
|
+
"TimeInForce",
|
82
|
+
"Venue",
|
83
|
+
]
|
84
|
+
|
85
|
+
# 1) definitions.py
|
86
|
+
defs = models_root / "definitions.py"
|
87
|
+
if defs.exists():
|
88
|
+
defs_names = collect_definitions(defs)
|
89
|
+
if defs_names:
|
90
|
+
import_lines.append(
|
91
|
+
f"from .grpc.models.definitions import {', '.join(defs_names)}"
|
92
|
+
)
|
93
|
+
all_names.extend(defs_names)
|
94
|
+
|
95
|
+
# 2) sub-packages under models/
|
96
|
+
|
97
|
+
model_lines: list[str] = []
|
98
|
+
model_all: list[str] = []
|
99
|
+
for sub in sorted(models_root.iterdir()):
|
100
|
+
if not sub.is_dir() or not (sub / "__init__.py").exists():
|
101
|
+
continue
|
102
|
+
|
103
|
+
pkg = f"grpc.models.{sub.name}"
|
104
|
+
|
105
|
+
for module_path in sorted(sub.iterdir()):
|
106
|
+
if module_path.suffix != ".py" or module_path.name.startswith("_"):
|
107
|
+
continue
|
108
|
+
mod = module_path.stem
|
109
|
+
|
110
|
+
import_lines.append(f"from .{pkg}.{mod} import {mod}")
|
111
|
+
all_names.append(mod)
|
112
|
+
|
113
|
+
model_lines.append(f"from .{sub.name}.{mod} import {mod}")
|
114
|
+
model_all.append(mod)
|
115
|
+
|
116
|
+
unique = sorted(set(model_all))
|
117
|
+
model_lines.append("")
|
118
|
+
model_lines.append(f"__all__ = [{', '.join(f'"{n}"' for n in model_all)}]")
|
119
|
+
model_lines.append("")
|
120
|
+
|
121
|
+
(models_root / "__init__.py").write_text("\n".join(model_lines))
|
122
|
+
|
123
|
+
# 3) write __all__
|
124
|
+
unique = sorted(set(all_names))
|
125
|
+
import_lines.append("") # blank line
|
126
|
+
import_lines.append(f"__all__ = [{', '.join(f'"{n}"' for n in unique)}]")
|
127
|
+
|
128
|
+
import_lines.append("") # blank line
|
129
|
+
|
130
|
+
output.write_text("\n".join(import_lines))
|
131
|
+
|
132
|
+
|
133
|
+
if __name__ == "__main__":
|
134
|
+
p = argparse.ArgumentParser(
|
135
|
+
description="Generate static imports + __all__ (including definitions.py) for grpc/models"
|
136
|
+
)
|
137
|
+
p.add_argument(
|
138
|
+
"--architect-path",
|
139
|
+
type=Path,
|
140
|
+
default=Path("architect_py"),
|
141
|
+
help="Path to your top-level architect_py folder",
|
142
|
+
)
|
143
|
+
args = p.parse_args()
|
144
|
+
|
145
|
+
out = args.architect_path / "__init__.py"
|
146
|
+
main(args.architect_path, out)
|