งูต้นฉบับแปลงซองที่มีเส้นทางแบบ URI ให้เป็นแผ่นทางเดินในเครื่องบนฉากสว่าง

Python Path.from_uri: แปลง file URI เป็น path โดยตรวจ scheme ให้ก่อน

พี่โชว์Engineering

ระบบ 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 แยกเมื่อแอปรองรับทั้งสองระบบ