Skip to main content

A simple custom input validation utility

Project description

my-ask-lib (Ultimate Edition) 👑

"เขียนฟังก์ชันรับ Input บรรทัดเดียว ดักจับได้ทุกสถานการณ์"

หมดปัญหาการเขียนลูป while True, try-except, และเงื่อนไข if-else ซ้ำๆ ทุกครั้งที่ต้องการรับค่าจากผู้ใช้ ไลบรารีนี้จะรวมทุกตรรกะการตรวจสอบความถูกต้อง (Validation) ขั้นสูงไว้ในฟังก์ชันเดียว พร้อมการแสดงผลแจ้งเตือนที่สวยงามด้วย rich.logging


🔥 ฟีเจอร์เด่น (Superpowers)

  • 🛡️ Auto-Validation: ตรวจสอบประเภทข้อมูลให้อัตโนมัติ (str, int, float, ฯลฯ)
  • 🧠 Smart Boolean: แปลงค่า Yes/No, ใช่/ไม่, True/False, 1/0 เป็น True/False ของ Python ได้อย่างอัจฉริยะ
  • 🎯 Choices Enforcement: ล็อกตัวเลือกให้พิมพ์ได้เฉพาะค่าที่กำหนดเท่านั้น
  • 📏 Range Control: ควบคุมช่วงของตัวเลข (ค่าต่ำสุด/สูงสุด) โดยไม่ต้องเขียนโค้ดเพิ่ม
  • 🔍 Regex Pattern: ดักจับฟอร์แมตขั้นสูง เช่น Email, เบอร์โทรศัพท์, หรือรหัสเฉพาะตัวด้วย Regular Expression
  • 🤫 Secret Input: ซ่อนการพิมพ์บนหน้าจอ Terminal สำหรับการรับรหัสผ่าน
  • ⏱️ Max Retries: จำกัดจำนวนครั้งที่กรอกผิด ป้องกันผู้ใช้กรอกมั่วจนระบบค้าง
  • 💡 Smart Prompt: แสดงคำใบ้ ช้อยส์ หรือค่า Default บน Prompt ให้อัตโนมัติ

🚀 การติดตั้ง

pip install my-ask-lib

🎯 ตัวอย่างการใช้งานจริง (Examples)

ดึงฟังก์ชัน ask ไปใช้งานในโปรเจกต์ของคุณ:

from my_ask import ask

# 1. ระบบเลือกเมนู (Enforce Choices)
role = ask("เลือกสิทธิ์การใช้งาน", choices=["admin", "user", "guest"])
# แสดงผล: เลือกสิทธิ์การใช้งาน (choices: admin, user, guest):

# 2. ระบบคุมช่วงตัวเลข (Min / Max Validation)
score = ask("กรอกคะแนนสอบ", type_fn=int, min_val=0, max_val=100)
# ถ้ากรอกต่ำกว่า 0 หรือเกิน 100 ระบบจะเตือนและดีดให้กรอกใหม่ทันที

# 3. ตรวจสอบฟอร์แมตอีเมลด้วย Regex (Pattern Matching)
email_pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
email = ask("กรอก Email", pattern=email_pattern, error_msg="รูปแบบอีเมลไม่ถูกต้องนะ!")

# 4. รับรหัสผ่านแบบซ่อนตัวอักษร (Secret Input)
password = ask("กรอกรหัสผ่าน", secret=True)

# 5. แปลงค่า Boolean อัจฉริยะ (Smart Bool)
is_ready = ask("คุณพร้อมหรือยัง? (y/n)", type_fn=bool)
# รองรับทั้ง: y, yes, true, 1, ใช่, n, no, false, 0, ไม่

# 6. ตั้งค่าเริ่มต้น และจำกัดจำนวนครั้งที่กรอกผิด (Default & Max Retries)
speed = ask("ตั้งค่าความเร็ว", type_fn=int, default=60, max_retries=3)
# ถ้ากด Enter ผ่านเลยจะได้ค่า 60 ทันที แต่ถ้าพิมพ์มั่วเกิน 3 ครั้งจะโยน TimeoutError ออกมา

⚙️ รายละเอียดพารามิเตอร์ (API Reference)

Parameter Type Default Description
prompt str Required ข้อความที่ต้องการแสดงเพื่อขอรับข้อมูลจากผู้ใช้
type_fn Callable str ฟังก์ชันแปลงประเภทข้อมูล เช่น int, float, bool (มีระบบ Smart Bool ในตัว)
validate Callable / List None ฟังก์ชันหรือ Lambda สำหรับเช็คเงื่อนไขเพิ่มเติม (ใส่เป็นลิสต์ของหลายฟังก์ชันได้)
choices List None ลิสต์รายการข้อมูลที่อนุญาตให้ผู้ใช้กรอกเท่านั้น
default Any None ค่าเริ่มต้นที่จะคืนกลับไปทันทีหากผู้ใช้กด Enter ผ่าน (ค่าว่าง)
min_val int / float None ค่าตัวเลขต่ำสุดที่ยอมรับได้
max_val int / float None ค่าตัวเลขสูงสุดที่ยอมรับได้
pattern str (Regex) None สตริง Regular Expression ที่ใช้ตรวจสอบรูปแบบของข้อมูล
secret bool False หากเป็น True จะทำการซ่อนตัวอักษรขณะพิมพ์ (เหมาะสำหรับรหัสผ่าน)
max_retries int None จำกัดจำนวนครั้งที่กรอกผิด หากเกินกำหนดจะระเบิด TimeoutError
error_msg str None ข้อความแจ้งเตือนแบบกำหนดเองเมื่อเกิดการกรอกข้อมูลผิดพลาด
allow_empty bool False หากเป็น True จะยอมให้ค่าว่างผ่านไปได้โดยคืนค่ากลับเป็น None (กรณีไม่มี default)

📝 License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

my_ask_lib-0.2.0.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

my_ask_lib-0.2.0-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file my_ask_lib-0.2.0.tar.gz.

File metadata

  • Download URL: my_ask_lib-0.2.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for my_ask_lib-0.2.0.tar.gz
Algorithm Hash digest
SHA256 483737e105dee8e5ba4e841d23a1b80ed159232f799015774e9d716d72d9b61d
MD5 abdd81b6ff98da43a8acc8a5c0b46186
BLAKE2b-256 61d9ea6393d1d29c907936795b237e372029ad596ecd181eaa2a7ef70845ef94

See more details on using hashes here.

File details

Details for the file my_ask_lib-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: my_ask_lib-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 5.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for my_ask_lib-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a5c5903831b85c63841f78d94fb85fc27c7319cb838ba21b5b0ebc8afb783b4
MD5 fb7fb9004cf64db8fa1a3bd436a8e109
BLAKE2b-256 049f66b6f4e8b7c7ee5375f6e72110ba94b5586c2a912886f22c8b5be01f9281

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page