semvec/pypi-packages huggingface dataset:
py-kabusapi 1.0.0
Python wrapper for kabuステーション API
Requires Python: >=3.10

# py-kabusapi

Python wrapper for kabuステーション API

## インストール

### GitHubから直接インストール

```bash
pip install git+https://github.com/sk-guritech/py-kabusapi.git
```

### ローカルでの開発用インストール

```bash
git clone https://github.com/sk-guritech/py-kabusapi.git
cd py-kabusapi
pip install -e .
```

## 使い方

### クイックスタート

```python
from py_kabusapi import KabuStationAPI

# APIクライアントの初期化
api = KabuStationAPI(environment="test")

# 認証
api.token("your_api_password")

# 口座情報の取得
cash_info = api.wallet_cash()
```

### 詳細なドキュメント

詳細な使い方については、[docsフォルダ](./docs/)のドキュメントを参照してください：

- **[基本的な使い方](./docs/basic-usage.md)** - APIクライアントの初期化と基本設定
- **[認証](./docs/authentication.md)** - APIトークンの取得と管理
- **[注文機能](./docs/orders.md)** - 現物・先物・オプション注文の発注方法
- **[口座情報](./docs/wallet.md)** - 取引余力と建玉情報の取得
- **[市場情報](./docs/market-data.md)** - 株価・板情報・ランキングの取得
- **[エラーハンドリング](./docs/error-handling.md)** - 堅牢なエラー処理の実装
- **[設定](./docs/configuration.md)** - 環境設定とDocker対応

## 必要なパッケージ

- requests
- pydantic

## 機能

### 対応API

- ✅ **認証** - APIトークンの取得
- ✅ **注文** - 現物・先物・オプション注文の発注・取消
- ✅ **口座情報** - 取引余力・建玉情報の取得
- ✅ **市場情報** - 時価・板情報・ランキングの取得
- ✅ **銘柄情報** - 銘柄詳細・銘柄コード検索
- ✅ **為替情報** - 主要通貨ペアのレート取得

### 特徴

- 🔧 **型安全性** - 完全な型ヒント対応
- 🚀 **使いやすさ** - Literal型でIDEの自動補完をサポート
- 🛡️ **エラーハンドリング** - 包括的なエラー処理機能
- 🐳 **Docker対応** - コンテナ環境での実行をサポート
- 📚 **豊富なドキュメント** - 実用的なコード例を含む詳細ドキュメント

## テスト

テスト実行方法、環境設定、トラブルシューティングについては **[tests/README_TESTS.md](./tests/README_TESTS.md)** を参照してください。

## 関連リンク

- **[📚 詳細ドキュメント](./docs/)** - 使い方の詳細ガイド
- **[🔗 kabuステーション API仕様](https://kabucom.github.io/kabusapi/ptal/index.html)** - 公式API仕様書

## ライセンス

このプロジェクトは [MIT License](./LICENSE) の下で公開されています。

Copyright (c) 2025 Sakaguchi Ryo <sakaguchi@sk-techfirm.com>
onkeypress 0.0.7
A simple program that allows users to make their terminal reactive to keypresses
Requires Python: >=3.8


# onkeypress

Allows users to make terminal react to keypresses

# installation

```
pip install onkeypress
```

# quickstart

```python
from onkeypress import while_not_exit, onkeypress, Key

def print_up():
    print("up is pressed")

def print_down():
    print("down is pressed")

while_not_exit(
    onkeypress(Key.UP).call(print_up),
    onkeypress(Key.DOWN).call(print_down),
    exit_key=Key.ENTER,
)
```

| key pressed | printed text |
| ----------- | ------------ |
| Up | up is pressed |
| Down | down is pressed |

If you hit Enter (or Control-C), the program exits

# A slightly harder example using .args(*args) and .kwargs(**kwargs)

```python
from onkeypress import while_not_exit, onkeypress, Key

def myfunc(*args, **kwargs):
    print(f"{args=} {kwargs=}")

while_not_exit(
    onkeypress(Key.UP).call(myfunc).args("up"),
    onkeypress(Key.DOWN).call(myfunc).kwargs(key="down"),
    onkeypress("a").call(myfunc).args("a").kwargs(key="a"),
    onkeypress("s").call(myfunc).args("s", "s").kwargs(key="s", val="s"),
    exit_key=Key.ENTER,
)
```

| key pressed | printed text |
| ----------- | ------------ |
| Up | args=('up',) kwargs={} |
| Down | args=() kwargs={'key': 'down'} |
| a | args=('a',) kwargs={'key': 'a'} |
| s | args=('s', 's') kwargs={'key': 's', 'val': 's'} |

# We can use Key.ALL_OTHERS to match all other keys

```python
from onkeypress import while_not_exit, onkeypress, Key
import random

def print_1_to_5_chars(char: str):
    if char.isalnum():
        print(char * random.randrange(1, 5), end="")
    else:
        print(char, end="")

while_not_exit(
    onkeypress(Key.ALL_OTHERS).call(print_1_to_5_chars),
    exit_key=Key.CONTROL_C,
)
```

Key.ALL_OTHERS match all other keys which were not declared

^ when we type a letter, it randomly repeats itself 1-5 times

# More advanced example: Arrow keys to move "X" around in 6x6 board

```python
from onkeypress import while_not_exit, onkeypress, Key
from copy import deepcopy
from unprint import unprint

BOARD = [["-"]*6 for _ in range(6)]

def print_board(board: list, user_row: int, user_col: int):
    board = deepcopy(board)
    board[user_row][user_col] = "X"
    [print(*row, sep=" ") for row in board]
    print()

print_board(BOARD, 0, 0)

state = {"row":0 , "col": 0}

def handle_keypress(row_diff: int, col_diff: int, state: dict):
    new_row = state["row"] + row_diff
    new_col = state["col"] + col_diff
    if new_row not in range(6) or new_col not in range(6):
        return
    state["row"], state["col"] = new_row, new_col
    unprint(7)
    print_board(BOARD, new_row, new_col)

while_not_exit(
    onkeypress(Key.UP).call(handle_keypress).args(-1, 0, state),
    onkeypress(Key.DOWN).call(handle_keypress).args(1, 0, state),
    onkeypress(Key.LEFT).call(handle_keypress).args(0, -1, state),
    onkeypress(Key.RIGHT).call(handle_keypress).args(0, 1, state),
    exit_key=Key.CONTROL_C,
)
```

Note - try hitting your arrow keys. Notice that your "X" moves around