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.2.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.2-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: my_ask_lib-0.2.2.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.2.tar.gz
Algorithm Hash digest
SHA256 7d3b21fcac6bb237ff5f6db56d12e73a448be5893a5def26d812a766b42a1fa1
MD5 9684d3832296f48a424a857ae969ba9c
BLAKE2b-256 84235e2c20dce3bf718fbb2109ea4bde103f769737a90ca8e1cf257c689337e9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: my_ask_lib-0.2.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f6ad26e4cb836f0e7bd8ea8dc1f49a9ad39f773d158b29764f551914ad649fe9
MD5 f08a2075433e783a5ba118456309a4be
BLAKE2b-256 c0de68c0f570fd4943fa5fd4707ff9f7fef9dcd736fc54daed1fc0f8b5c5aa3a

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