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.1.tar.gz (4.4 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.1-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: my_ask_lib-0.2.1.tar.gz
  • Upload date:
  • Size: 4.4 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.1.tar.gz
Algorithm Hash digest
SHA256 d3bd8467ad4fd6351849efc82b57b01bdab01705f96b10959fb247b412d21973
MD5 cd018bb71ccbeb0d76b9f468c4ef4925
BLAKE2b-256 82c5e04fe044bfc845510152205b376beeaaf18fbac9c4aa09fe1257c48ce5df

See more details on using hashes here.

File details

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

File metadata

  • Download URL: my_ask_lib-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 4.9 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 194941e793fd6ea64bad7f37d97534d3fb1ca18e107ee2a83b23acc670f25a03
MD5 dd972f0a306fb95df298b9f50943bc0e
BLAKE2b-256 1598a0c8daa9cd08158d5bfc1f1789e39ad0f5ca9db71f3b2aff0d464663ff09

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