Python Path.from_uri: แปลง file URI เป็น path โดยตรวจ scheme ให้ก่อน
ระบบ desktop, browser และ editor มักส่งตำแหน่งไฟล์มาเป็น file: URI ถ้าเราแกะด้วยการลบ prefix เอง จะพลาด percent-encoding, รูปแบบ Windows หรือ authority ได้ง่าย Path.from_uri ทำการแปลงตาม platform และปฏิเสธ scheme ที่ไม่ใช่ file
เหมือนส่งที่อยู่หน้าซองให้ไปรษณีย์แปลงเป็นเส้นทางท้องถิ่น แทนการตัดคำว่า “ถนน” แล้วหวังว่าส่วนที่เหลือจะใช้ได้ทุกจังหวัด
from pathlib import Path
import unittest
class PathFromUriTests(unittest.TestCase):
def test_decodes_local_file_uri(self):
path = Path.from_uri("file:///tmp/Showkhun%20Lab/report.txt")
self.assertEqual(path.name, "report.txt")
self.assertEqual(path.parent.name, "Showkhun Lab")
def test_rejects_non_file_scheme(self):
with self.assertRaises(ValueError):
Path.from_uri("https://example.com/report.txt")
if __name__ == "__main__":
unittest.main()
การ parse สำเร็จไม่ได้แปลว่า path ปลอดภัยสำหรับเปิดไฟล์ ข้อมูลจากผู้ใช้ยังอาจชี้ออกนอก working directory, ไปยัง symlink หรือไฟล์สำคัญ ต้อง resolve ตาม policy แล้วตรวจว่าอยู่ใต้ root ที่อนุญาตก่อนอ่าน และเปิดด้วยสิทธิ์น้อยที่สุด
บน Windows รูปแบบ drive และ UNC มีความหมายเฉพาะ platform; อย่าเอาผลจาก Unix ไปสมมติว่าจะเหมือนกันทุกเครื่อง Python 3.14 ยังเข้มขึ้นกับ authority ที่ไม่ตรง hostname บนระบบที่ไม่รองรับ UNC จึงควรมี test บน OS เป้าหมาย
Recap
- ใช้
Path.from_uriแทนการตัด prefix เอง - รับเฉพาะ
file:และจัดการValueError - ตรวจ resolved path กับ allowed root ก่อนเปิด
- ทดสอบ Windows/Unix แยกเมื่อแอปรองรับทั้งสองระบบ