semvec/pypi-packages huggingface dataset:
lazyfox 1.0.5.post3
Add your description here
Requires Python: >=3.12

# LazyFox

> Hey! Lazyfox!

一个用于浏览器自动化与常见逆向场景的 Python 模板仓库。

当前内置能力：
- 彩色日志模块（`ext/log.py`）
- 临时邮箱模块（`ext/gmail.py`、`ext/mail_service.py`）
- 两个站点流程示例（`demo/trae.py`、`demo/zenmux.py`）

本模板还在 `requirements.txt` 中添加了Camoufox, Playwright, httpx, curl_cffi等常用工具

> 说明：本项目更偏“模板/脚手架”，适合二次开发，不是稳定生产工具。

## 环境要求

- Python 3.12+

## 安装

### 方式 1：使用 `uv`（推荐）

```bash
uv sync
```

### 方式 2：使用 `pip`

```bash
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
```

## 快速开始

运行项目入口：

```bash
python main.py
```

运行模块测试：

```bash
python ext/test.py
```

运行 Trae 示例：

```bash
python demo/trae.py
```

运行 Zenmux 示例：

```bash
python demo/zenmux.py
```

## 项目结构

```text
LazyFox/
├─ main.py                 # 项目入口（欢迎信息）
├─ demo/
│  ├─ trae.py              # Trae 注册流程示例
│  └─ zenmux.py            # Zenmux 登录/注册流程示例
├─ ext/
│  ├─ log.py               # 日志模块
│  ├─ gmail.py             # emailnator 临时邮箱封装（同步+异步）
│  ├─ mail_service.py      # 另一套临时邮箱 API 封装
│  ├─ test.py              # 模块测试脚本
│  └─ __init__.py
├─ pyproject.toml
├─ requirements.txt
└─ README.md
```

## 模板定位

这个仓库适合作为以下工作的起点：
- 新站点自动化流程 PoC
- 逆向接口调试时的基础工程
- 邮件验证码/邮件链接抓取的流程打通
- 注册机

## Tips

- 本项目默认按 Windows 指纹参数配置，若需其他系统/设备，请修改 `demo/zenmux.py` 中 `Camoufox` 初始化参数。
- 目前Camoufox FF146 在 MacOS 有大量问题，请降级至 FF135

## 提出你的建议
要提出建议，请通过以下联系方式联系我：
- 邮箱：[liu_qinyu@outlook.com](mailto:liu_qinyu@outlook.com)
- LinuxDO: [Lonely](https://linux.do/u/Lonely)
- QQ: 1280993766

> Made with ❤️ by Lonely
tinuipicker 1.3.0
tinui扩展数据滚动选择器
Requires Python: >=3.8

# TinUIPicker

为[TinUI](https://github.com/Smart-Space/TinUI)提供滚动选择器功能控件，相比于原版`picker`，TinUIPicker套件加入了日期选择和时间选择的功能。

<img src="./screenshots/1.png" width="500" />

---

## TinUIDatePicker

> [!important]
>
> TinUIDatePicker原始框架代码由**Gemini3**根据TinUI的`picker`源码修改而来，之后我才进行了交互优化和样式优化，AI代码部分未完全审查。

```python
TinUIDatePicker(
    tinui, pos, font=("微软雅黑", 10), command=None, 
    year_range=(2000, 2030), now=datetime.today(), **kwargs
)

# 默认样式表
self.cfg = {
    "fg": kwargs.get("fg", "#1b1b1b"),
    "bg": kwargs.get("bg", "#fbfbfb"),
    "outline": kwargs.get("outline", "#ececec"),
    "activefg": kwargs.get("activefg", "#1b1b1b"),
    "activebg": kwargs.get("activebg", "#f6f6f6"),
    "onbg": kwargs.get("onbg", "#3748d9"),
    "onfg": kwargs.get("onfg", "#eaecfb"),
    "buttonfg": kwargs.get("buttonfg", "#1a1a1a"),
    "buttonbg": kwargs.get("buttonbg", "#f9f9f9"),
    "buttonactivefg": kwargs.get("buttonactivefg", "#1a1a1a"),
    "buttonactivebg": kwargs.get("buttonactivebg", "#f3f3f3"),
    "buttononfg": kwargs.get("buttononfg", "#5d5d5d"),
    "buttononbg": kwargs.get("buttononbg", "#f5f5f5"),
}
```

> `command`接收一个形如`2026-01-30`的字符串参数。

**set_date(year:int=None, month:int=None, day:int=None)**

设置年-月-日，若为`None`则不变。

---

## TinUITimePicker

```python
TinUITimePicker(
    tinui, pos, font=("微软雅黑", 10),
    is_24h=True, show_sec=True,
    now = datetime.now(),
    command=None, anchor='nw', **kwargs
)
```

默认样式同`TinUIDatePicker`

- is_24h-是否是24小时制，如果`否`，则开头显示`AM`和`PM`选项
- show_sec-是否可选`秒`

> `command`接收一个形如`16:00:09`或者`PM 04:00:09`的字符串参数。若`show_sec`为`False`，则不回传`秒`。

**set_time(hour:int=None, minute:int=None, second:int=None)**

设置时-分-秒，若为`None`则不变。

---

## 样式表

TinUIPicker提供了`pickerlight`和`pickerdark`两种配色样式表，均来自于TinUI明暗配色。

<img src="./screenshots/2.png" width="300" /><img src="./screenshots/3.png" width="250" />

---

## 面板布局

通过`TinUIDatePicker.uid`获取TinUIDatePicker的控件标识符。时间选择器类似。

面板布局行为与`picker`一致。

---

## 使用示例

```python
from datetime import datetime
from tkinter import Tk

from tinui import BasicTinUI, ExpandPanel, HorizonPanel
from tinuipicker.datepicker import TinUIDatePicker
from tinuipicker.timepicker import TinUITimePicker
from tinuipicker import pickerlight, pickerdark

root = Tk()
root.geometry('400x400')

ui = BasicTinUI(root)
ui.pack(fill='both', expand=True)

tdp = TinUIDatePicker(ui, (10,10), font=("Segoe UI", 12), now=datetime(2026, 2, 19), command=print, anchor='center', **pickerlight)
tdp.set_date(2016, 10)

ttp = TinUITimePicker(ui, (10,10), font=("Segoe UI", 12), is_24h=False, show_sec=False, now=datetime(1,1,1,6,23,45), command=print, anchor='center', **pickerdark)
ttp.set_time(16,0,19)

rp = ExpandPanel(ui)
hp = HorizonPanel(ui)
rp.set_child(hp)

ep = ExpandPanel(ui, bg='#f3f3f3')
hp.add_child(ep, weight=1)
ep.set_child(tdp.uid)

ep2 = ExpandPanel(ui, bg='#202020')
hp.add_child(ep2, weight=1)
ep2.set_child(ttp.uid)

def update(e):
    rp.update_layout(5,5,e.width-5,e.height-5)
ui.bind('<Configure>',update)

root.mainloop()
```
antony-indicator 0.5.1
A custom indicator package including VPFR.
Requires Python: >=3.7

# Antony Indicator Package

A custom Python package for technical analysis indicators.

## Installation

```bash
pip install .
```

## Usage

### VPFR (Volume Profile Fixed Range)

```python
import pandas as pd
from indicator.vpfr import vpfr

# ... create dataframe ...
result = vpfr(df)
print(result.poc, result.vah, result.val)
```

### VWAP (Volume Weighted Average Price)

```python
from indicator.vwap import vwap

# Standard VWAP
result = vwap(df)
print(result.vwap)

# Session-based VWAP (reset on column)
result_session = vwap(df, reset=True, reset_col='session_id')
```

### CVD (Cumulative Volume Delta)

```python
from indicator.cvd import cvd

# Standard CVD (neutral='ignore')
result = cvd(df, neutral='ignore')
print(result.cvd)

# Split neutral volume (half buy/half sell)
result_split = cvd(df, neutral='split')
```

### Open Interest State

```python
from indicator.oi import oi_state

# Classify state (LB, SB, SC, LU, NEUTRAL)
result = oi_state(df, close_col='close', oi_col='oi')
print(result.state)
```

### Candle Metrics & State

```python
from indicator.candle import candle_metrics, candle_state

# 1. Compute Metrics
metrics = candle_metrics(df)

# 2. Classify State
state_result = candle_state(metrics)
print(state_result.state)
```