diff --git a/console_app.py b/console_app.py index 566800e..170736c 100644 --- a/console_app.py +++ b/console_app.py @@ -181,6 +181,30 @@ def ask_enum_choice(prompt: str, choice_map: dict[int, str]) -> str: print("❌ Geçersiz seçim. Tekrar deneyin.") +def ask_enum_choice(prompt: str, mapping: dict[int, str]) -> Optional[str]: + """Ask the user to choose one of the enum values. + + Parameters + ---------- + prompt: str + Text to show the user. + mapping: dict[int, str] + Maps menu numbers to enum strings. + + Returns + ------- + Optional[str] + Selected enum value or ``None`` if the user pressed Enter. + """ + options = " ".join(f"{k}={v}" for k, v in mapping.items()) + while True: + val = input(f"{prompt} ({options}, boş için Enter): ").strip() + if val == "": + return None + if val.isdigit() and int(val) in mapping: + return mapping[int(val)] + print("❌ Geçersiz seçim. Tekrar deneyin.") + # ——— Portfolio Endpoints ——— # Portfolio Endpoints @@ -237,20 +261,23 @@ def get_stock_create_order(): duration = ask_enum_choice("Order Duration", ORDER_DURATION_MAP) mra = ask_optional_bool("Market Risk Approval?") + if None in (port, symbol, qty, direction, price, method, duration, mra): + print("❌ Tüm alanlar zorunludur.") if None in (port, symbol, qty, price, mra): print("❌ Tüm alanlar doldurulmalı.") + main return if api: resp = api.get_stock_create_order( - portfolio_number=port, - equity_code=symbol, - quantity=qty, - direction=direction, - price=price, - order_method=method, - order_duration=duration, - market_risk_approval=mra + portfolio_number=cast(int, port), + equity_code=cast(str, symbol), + quantity=cast(int, qty), + direction=cast(str, direction), + price=cast(float, price), + order_method=cast(str, method), + order_duration=cast(str, duration), + market_risk_approval=cast(bool, mra) ) print("Response:", resp) @@ -261,28 +288,31 @@ def get_stock_replace_order(): qty = ask_optional_int("New Quantity") if None in (port, ref, price, qty): + print("❌ Tüm alanlar zorunludur.") print("❌ Tüm alanlar doldurulmalı.") return if api: resp = api.get_stock_replace_order( - portfolio_number=port, - order_ref=ref, - price=price, - quantity=qty + portfolio_number=cast(int, port), + order_ref=cast(str, ref), + price=cast(int, price), + quantity=cast(int, qty) ) print("Response:", resp) def get_stock_delete_order(): port = ask_optional_int("Portfolio Number") ref = ask_optional_str("Order Ref to delete") + if port is None or ref is None: + print("❌ Tüm alanlar zorunludur.") if None in (port, ref): print("❌ Tüm alanlar doldurulmalı.") return if api: resp = api.get_stock_delete_order( - portfolio_number=port, - order_ref=ref + portfolio_number=cast(int, port), + order_ref=cast(str, ref) ) print("Response:", resp) @@ -298,6 +328,18 @@ def get_stock_order_list(): page_number = ask_optional_int("Page Number") descending_order = ask_optional_bool("Descending Order?") + if None in ( + port, + order_status, + order_direction, + order_method, + order_duration, + equity_code, + equity_type, + page_number, + descending_order, + ): + print("❌ Tüm alanlar zorunludur.") if None in (port, order_status, order_direction, order_method, order_duration, equity_code, equity_type, page_number, descending_order): @@ -306,15 +348,15 @@ def get_stock_order_list(): if api: resp = api.get_stock_order_list( - portfolio_number=port, - order_status=order_status, - order_direction=order_direction, - order_method=order_method, - order_duration=order_duration, - equity_code=equity_code, - equity_type=equity_type, - page_number=page_number, - descending_order=descending_order + portfolio_number=cast(int, port), + order_status=cast(int, order_status), + order_direction=cast(int, order_direction), + order_method=cast(int, order_method), + order_duration=cast(int, order_duration), + equity_code=cast(str, equity_code), + equity_type=cast(int, equity_type), + page_number=cast(int, page_number), + descending_order=cast(bool, descending_order), ) print("Response:", resp) @@ -326,16 +368,18 @@ def get_stock_positions(): without_t1 = ask_optional_bool("Without T+1 Qty?") if None in (port, equity_code, equity_type, without_dep, without_t1): + print("❌ Tüm alanlar zorunludur.") + return print("❌ Tüm alanlar doldurulmalı.") return if api: resp = api.get_stock_positions( - portfolio_number=port, - equity_code=equity_code, - equity_type=equity_type, - without_depot=without_dep, - without_t1_qty=without_t1 + portfolio_number=cast(int, port), + equity_code=cast(str, equity_code), + equity_type=cast(int, equity_type), + without_depot=cast(bool, without_dep), + without_t1_qty=cast(bool, without_t1) ) print("Response:", resp) @@ -352,20 +396,21 @@ def get_future_create_order(): exp_date = ask_optional_date("Expiration Date") if None in (port, contract, direction, price, qty, method, duration, ahs, exp_date): + print("❌ Tüm alanlar zorunludur.") print("❌ Tüm alanlar doldurulmalı.") return if api: resp = api.get_future_create_order( - portfolio_number=port, - contract_code=contract, - direction=direction, - price=price, - quantity=qty, - order_method=method, - order_duration=duration, - after_hour_session_valid=ahs, - expiration_date=exp_date + portfolio_number=cast(int, port), + contract_code=cast(str, contract), + direction=cast(int, direction), + price=cast(int, price), + quantity=cast(int, qty), + order_method=cast(int, method), + order_duration=cast(int, duration), + after_hour_session_valid=cast(bool, ahs), + expiration_date=cast(str, exp_date) ) print("Response:", resp) @@ -378,17 +423,18 @@ def get_future_replace_order(): exp_date = ask_optional_date("Expiration Date") if None in (port, ref, qty, price, otype, exp_date): + print("❌ Tüm alanlar zorunludur.") print("❌ Tüm alanlar doldurulmalı.") return if api: resp = api.get_future_replace_order( - portfolio_number=port, - order_ref=ref, - quantity=qty, - price=price, - order_type=otype, - expiration_date=exp_date + portfolio_number=cast(int, port), + order_ref=cast(str, ref), + quantity=cast(int, qty), + price=cast(int, price), + order_type=cast(int, otype), + expiration_date=cast(str, exp_date) ) print("Response:", resp) @@ -396,14 +442,17 @@ def get_future_delete_order(): port = ask_optional_int("Portfolio Number") ref = ask_optional_str("Order Ref to delete") + if port is None or ref is None: + print("❌ Tüm alanlar zorunludur.") + return if None in (port, ref): print("❌ Tüm alanlar doldurulmalı.") return - if api: + if api: resp = api.get_future_delete_order( - portfolio_number=port, - order_ref=ref + portfolio_number=cast(int, port), + order_ref=cast(str, ref) ) print("Response:", resp) @@ -431,21 +480,23 @@ def get_future_order_list(): cancelled_orders, after_hour_session_valid, ): + print("❌ Tüm alanlar zorunludur.") + print("❌ Tüm alanlar doldurulmalı.") return if api: resp = api.get_future_order_list( - portfolio_number=port, - order_validity_date=order_validity_date, - contract_code=contract_code, - contract_type=contract_type, - long_short=long_short, - pending_orders=pending_orders, - untransmitted_orders=untransmitted_orders, - partially_executed_orders=partially_executed_orders, - cancelled_orders=cancelled_orders, - after_hour_session_valid=after_hour_session_valid + portfolio_number=cast(int, port), + order_validity_date=cast(str, order_validity_date), + contract_code=cast(str, contract_code), + contract_type=cast(int, contract_type), + long_short=cast(int, long_short), + pending_orders=cast(bool, pending_orders), + untransmitted_orders=cast(bool, untransmitted_orders), + partially_executed_orders=cast(bool, partially_executed_orders), + cancelled_orders=cast(bool, cancelled_orders), + after_hour_session_valid=cast(bool, after_hour_session_valid) ) print("Response:", resp) @@ -455,7 +506,7 @@ def get_future_positions(): print("❌ Portfolio Number gerekli.") return if api: - resp = api.get_future_positions(portfolio_number=port) + resp = api.get_future_positions(portfolio_number=cast(int, port)) print("Response:", resp) def main():