প্রকল্প সম্পর্কে

fastapi-faults FastAPI-এর জন্য টাইপড এরর কন্ট্রাক্ট প্রদান করে, যা Python এক্সেপশনগুলোকে RFC 9457 Problem Details এবং OpenAPI ডকুমেন্টেশনের সাথে সংযুক্ত করে। এর মূল ধারণা হলো প্রতিটি অ্যাপ্লিকেশন এররের একটি ইমিউটেবল ডেফিনিশন থাকবে, যা এক্সেপশন হ্যান্ডলিং, application/problem+json রেসপন্স এবং জেনারেটেড OpenAPI স্কিমার জন্য ধারাবাহিকভাবে ব্যবহৃত হবে। এই প্রজেক্টটির লক্ষ্য হলো ডুপ্লিকেট রেসপন্স ডিকশনারি, প্রসেস-গ্লোবাল রেজিস্ট্রি এবং ডকুমেন্ট করা বনাম প্রকৃত এন্ডপয়েন্ট এররের মধ্যে অমিল রোধ করা। এর মূল কনসেপ্ট হলো Fault এবং FaultRegistry। একটি Fault একটি ডোমেইন এক্সেপশনকে স্ট্যাটাস, স্টেবল কোড, টাইটেল, ডিটেইল, হেডার, উদাহরণ এবং স্কিমার মতো ফিল্ডগুলোর সাথে ম্যাপ করে। একটি ফিচার তার কোডের পাশে একটি ছোট FaultRegistry সংজ্ঞায়িত করতে পারে এবং অ্যাপ্লিকেশনটি FaultRegistry.merge-এর মাধ্যমে স্পষ্টভাবে রেজিস্ট্রিগুলো কম্পোজ করে। ডেফিনিশনগুলো ইমিউটেবল, মার্জ করার অর্ডার ডিটারমিনিস্টিক এবং কনফ্লিক্টিং এক্সেপশন ক্লাস, কোড, টাইপ URI বা স্কিমা নেম কনফিগারেশনের সময় ফেইল করে। type_base অপশনটি প্রতিটি ফল্ট কোড থেকে একটি স্টেবল প্রবলেম টাইপ URI তৈরি করে; অথবা একটি ফল্ট স্পষ্টভাবে টাইপ প্রদান করতে পারে। যখন কোনো ডোমেইন ফল্টে এই দুটির কোনটিই থাকে না, তখন ইনস্টলেশন ফেইল করে, যা অসম্পূর্ণ কন্ট্রাক্টকে রানিং অ্যাপ্লিকেশন থেকে দূরে রাখে। রুটগুলো FastAPI-এর স্ট্যান্ডার্ড APIRouter ব্যবহার করে এবং registry.responses(...) ডিক্লেয়ার করা ফল্টগুলোর জন্য রেসপন্স মেটাডেটা জেনারেট করে। এই লাইব্রেরিটি APIRouter-কে সাবক্লাস বা রিপ্লেস করে না। ডিক্লেয়ার করা ফল্টগুলোকে অ্যাপ্লিকেশনে ইনস্টল করা রেজিস্ট্রির অন্তর্ভুক্ত হতে হবে। RFC 9457 এক্সটেনশন মেম্বারগুলোকে Pydantic মডেল দিয়ে টাইপ করা যেতে পারে: একটি extensions_model কাস্টম প্রবলেম ফিল্ডগুলো ভ্যালিডেট করে এবং একটি extensions কলঅ্যাবল ভ্যালু তৈরি করে, যেখানে জেনারেটেড প্রবলেম স্কিমা সেই মেম্বারগুলোকে বর্ণনা করে। একটি রেজিস্ট্রি ইনস্টল করলে ডিফল্টভাবে ফ্রেমওয়ার্ক ফেইলিওরগুলোকে নরমালাইজ করা যেতে পারে। রিকোয়েস্ট ভ্যালিডেশন একটি ৪২২ প্রবলেম ডিটেইলস রেসপন্সে পরিণত হয় যাতে স্টেবল এবং লোকেশন-অ্যাওয়ার এরর থাকে। HTTPException এবং রাউটিং এররগুলো ম্যাচিং প্রবলেম ডিটেইলস রেসপন্স পায়। রেসপন্স ভ্যালিডেশন এবং অপ্রত্যাশিত এক্সেপশনগুলো নিরাপদ ইন্টারনাল-এরর রেসপন্সে পরিণত হয়। ইনস্টলেশন অপশনগুলোর মধ্যে রয়েছে include_validation_error, include_http_exceptions এবং include_unhandled_error। টেস্টিং হেল্পারগুলো রিপোজিটরির tests/helpers.py-তে থাকে এবং লাইব্রেরির সাথে শিপড হয় না। একটি চেকআউটের মধ্যে assert_no_undeclared_faults, assert_openapi_contract এবং assert_problem-এর মতো ফাংশনগুলোর মাধ্যমে রানটাইম এবং ডকুমেন্টেশন ড্রিফট অ্যাসার্ট করা যেতে পারে। আনডিক্লেয়ারড-ফল্ট মনিটরটি অ্যাপ্লিকেশনের প্রথম রিকোয়েস্টের আগে এন্টার করতে হবে। প্রয়োজনীয়তা হলো CPython 3.12, 3.13, অথবা 3.14; FastAPI 0.115 বা তার নতুন সংস্করণ (1.0-এর নিচে); এবং Pydantic 2.9 বা তার নতুন সংস্করণ (3.0-এর নিচে)। ইনস্টলেশন করা হয় pip install fastapi_faults-এর মাধ্যমে। ডেভেলপমেন্টের জন্য uv sync --all-groups ব্যবহৃত হয় এবং কোয়ালিটি গেট হিসেবে ruff format --check, ruff check, mypy, pytest এবং uv build চালানো হয়। রানযোগ্য উদাহরণগুলো examples/minimal এবং examples/namespaced-এ রয়েছে। প্রজেক্টটি MIT লাইসেন্সের অধীনে রিলিজ করা হয়েছে।