وات د فاک
یک پکیج داریم به اسم is odd تو جاوا اسکریپت
به صورت هفتگی ۳۰۰۰ هزار دانلود داره
و سایز آنپک پکیج هم ۶ کیلو بایته 💀
@PyBackendHub
یک پکیج داریم به اسم is odd تو جاوا اسکریپت
به صورت هفتگی ۳۰۰۰ هزار دانلود داره
و سایز آنپک پکیج هم ۶ کیلو بایته 💀
@PyBackendHub
🥴20😁9👍1🤣1
Forwarded from Python BackendHub (Mani)
یک مشکلی همیشه تو تستا وجود داره وقتی دارین از container استفاده میکنید
اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن.
و خیلیمشکلات دیگه
و خیلیوقتا ماک یا استفاده از SQLite پاسخگو نیاز نیست مثلا ماگریشن دارین یا functionality خاصی از دیتابیس استفاده میکنید یا … و تستاتون flaky میشه
اکثر این مشکلات رو testcontainer حلشون کرده.
https://testcontainers.com/
@PyBackendHub
اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن.
و خیلیمشکلات دیگه
و خیلیوقتا ماک یا استفاده از SQLite پاسخگو نیاز نیست مثلا ماگریشن دارین یا functionality خاصی از دیتابیس استفاده میکنید یا … و تستاتون flaky میشه
اکثر این مشکلات رو testcontainer حلشون کرده.
https://testcontainers.com/
@PyBackendHub
Testcontainers
Testcontainers is an opensource library for providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
👍9
Python BackendHub
یک مشکلی همیشه تو تستا وجود داره وقتی دارین از container استفاده میکنید اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن. و خیلیمشکلات دیگه و خیلیوقتا ماک یا استفاده از SQLite پاسخگو…
من شروع به استفاده testcontainer کردم و واقعا خوبه.
اگه دیتابیستون رو میبرید رو pg چند آپتمایزشن میتونید انجام بدید که سرعت دیتابیستون خیلی بالا بره:
fsync=off
full_page_writes=off
shared_buffers=256MB
checkpoint_timeout=30min
checkpoint_completion_target=0.9
autovacuum=off
اینکه تک تک چی هستن رو توصیه میکنم گوگل کنید تو یک پست نمیگنجه بخوام کلش رو توضیح بدم. آف کردن این چیزا reliability دیتابیس رو به شدت پایین میاره ولی درعوض آپریشن های معمولی خیلی سریعتر انجام میشه مخصوصا fsync. و خب یک دیتابیس موقت تستی که قراره بعد تست بیاد پایین و پاک شه اصلا reliability براش معنایی نداره.
@PyBackendHub
اگه دیتابیستون رو میبرید رو pg چند آپتمایزشن میتونید انجام بدید که سرعت دیتابیستون خیلی بالا بره:
fsync=off
full_page_writes=off
shared_buffers=256MB
checkpoint_timeout=30min
checkpoint_completion_target=0.9
autovacuum=off
اینکه تک تک چی هستن رو توصیه میکنم گوگل کنید تو یک پست نمیگنجه بخوام کلش رو توضیح بدم. آف کردن این چیزا reliability دیتابیس رو به شدت پایین میاره ولی درعوض آپریشن های معمولی خیلی سریعتر انجام میشه مخصوصا fsync. و خب یک دیتابیس موقت تستی که قراره بعد تست بیاد پایین و پاک شه اصلا reliability براش معنایی نداره.
@PyBackendHub
👏9👍5
Forwarded from TorhamDev | تورهام 😳
سادگی همیشه خبر از پیچیدگی میده!
خیلی وقتها ما از کتابخونه و فریمورکها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو برامون خیلی راحت میکنن. اما اینجا یک چیزی گاهی فراموش میشه.
سادگی همیشه خبر از پیچیدگی میده که شما نمیبینیدش.
یا به عبارت دیگه
کدی که شما الان نمیزنید رو قبلا یکی دیگه زده.
و شاید بگید خوب این خوبه دیگه یارو کد برای ما زده و استفاده میکنیم و لذتشو میبریم. تو خیلی از مواقع این درسته، ولی امان از اون روزی که بخوایید یکچیزی رو تغییر بدید که فریمورک/کتابخونه براتون انجام داده :) اونجاست که این سادگی که ازش لذت میبردید تبدیل کابوس میشه :D
این رو نگفتم که بگم از جنگو استفاده نکنید یا فلان کتابخونه بده و ...
این گفتم که بدونید همیشه هر سادگی خوب نیست، گاهی بهتره تن به کار بدید و اون کد خودتون بزنید تا با نیاز شما هماهنگ باشه نه اینکه یک کتابخونه هزارخطی نصب کنید تا از ۱۰۰ خطش استفاده کنید.
@TorhamDevCH
خیلی وقتها ما از کتابخونه و فریمورکها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو برامون خیلی راحت میکنن. اما اینجا یک چیزی گاهی فراموش میشه.
سادگی همیشه خبر از پیچیدگی میده که شما نمیبینیدش.
یا به عبارت دیگه
کدی که شما الان نمیزنید رو قبلا یکی دیگه زده.
و شاید بگید خوب این خوبه دیگه یارو کد برای ما زده و استفاده میکنیم و لذتشو میبریم. تو خیلی از مواقع این درسته، ولی امان از اون روزی که بخوایید یکچیزی رو تغییر بدید که فریمورک/کتابخونه براتون انجام داده :) اونجاست که این سادگی که ازش لذت میبردید تبدیل کابوس میشه :D
این رو نگفتم که بگم از جنگو استفاده نکنید یا فلان کتابخونه بده و ...
این گفتم که بدونید همیشه هر سادگی خوب نیست، گاهی بهتره تن به کار بدید و اون کد خودتون بزنید تا با نیاز شما هماهنگ باشه نه اینکه یک کتابخونه هزارخطی نصب کنید تا از ۱۰۰ خطش استفاده کنید.
@TorhamDevCH
👍35👎4🍌2❤1😁1
میتونید git-fame رو نصب کنید
و با وارد کردن این دستور, ببینید چند خط با یک پسوند الان رو سورس کد وجود داره که شما کامیت کردین؟ (کدایی که قبلا زده شده و پاک شده و دیگه تو سورس کد نیست رو حساب نمیکنه).
@PyBackendHub
و با وارد کردن این دستور, ببینید چند خط با یک پسوند الان رو سورس کد وجود داره که شما کامیت کردین؟ (کدایی که قبلا زده شده و پاک شده و دیگه تو سورس کد نیست رو حساب نمیکنه).
git-fame --incl '(.*)py$'
@PyBackendHub
👍11🔥7🥱2
This media is not supported in your browser
VIEW IN TELEGRAM
حق 👌
درواقع این همین <توهم بدن شناگر> هست. این باور جا افتاده که شناگر ها بدشون عالیه، چون شناگر هستن. درصورتی که این باور توهمه، و اگه کسی مثل شناگر ها ورزش کنه لزوما نمیتونه بدنش عالی باشه.
درواقع ریشه این مشکل اینجاست:
Correlation is not causation
که نمیتونم خوب ترجمش کنم
@PyBackendHub
درواقع این همین <توهم بدن شناگر> هست. این باور جا افتاده که شناگر ها بدشون عالیه، چون شناگر هستن. درصورتی که این باور توهمه، و اگه کسی مثل شناگر ها ورزش کنه لزوما نمیتونه بدنش عالی باشه.
درواقع ریشه این مشکل اینجاست:
Correlation is not causation
که نمیتونم خوب ترجمش کنم
@PyBackendHub
👍48👏6🤡4
This media is not supported in your browser
VIEW IN TELEGRAM
یک توصیه خوب برای جونیور ها و کسایی که تازه شروع کردن
@PyBackendHub
@PyBackendHub
👌33👍9👏2🤬2❤1👎1
امروز خیلی خوشحالم که بالاخره Naked SQLAlchemy رو معرفی میکنم، یه thin wrapper روی SQLAlchemy Core که کار با دیتابیسها تو پایتون رو سادهتر میکنه. بعد از اینکه با pitfallهای ORM مواجه شدم—مثل اینکه دادههای توی حافظه با وضعیت واقعی دیتابیس یکی نبود به خاطر پیچیدگیهایی مثل identity mapping و dirty tracking—فهمیدم این ویژگیهایی که قرار بوده کار رو راحت کنن، در واقع باعث پیچیدگی و سختتر شدن یادگیری میشن. Naked SQLAlchemy با ترویج استفاده صریح از SQL و map مستقیم نتایج کوئری به dataclassهای پایتون، این لایههای غیرضروری رو کنار میزنه.
علاوه بر بهبود سرعت قابل توجه (تقریباً دو برابر سریعتر از ORM)، یادگیری Naked SQLAlchemy آسونه چون بر پایه دانشی هست که احتمالاً از قبل داری. امکاناتی مثل مپ کردن dataclass، مدیریت session بدون داشتن state، و امکان تعریف SQL View رو لایه ORM. با تمرکز روی ویژگیهای اساسی و دوری از abstractionهای پیچیده، به شما این امکان رو میده که کدهای واضح و explicit و قابل نگهداری بنویسن، بدون دردسرهای معمول ORM.
فلسفه من اینه که کمتر، بیشتره. با کنار گذاشتن لایههای غیرضروری، Naked SQLAlchemy یه راهکار قابل اعتماد، کارآمد و ساده برای دسترسی به دیتابیس تو پایتون ارائه میده. اگه دنبال ابزاری هستی که از pitfallهای معمول ORM دوری کنه و از تخصص SQLی که از قبل داری استفاده کنه، دعوتت میکنم Naked SQLAlchemy رو امتحان کنی.
لینک ریپازیتوری
لینک مستندات
اگه این پست یا این کتابخونه برات مفید بوده، خیلی ممنون میشم اگه بهش یه ستاره بدی یا این پست رو بازنشر کنی. حمایت شما به من انگیزه میده که به توسعه و بهبود فریمورکهای متنباز ادامه بدم. مرسی 🙂🙏
@PyBackendHub
علاوه بر بهبود سرعت قابل توجه (تقریباً دو برابر سریعتر از ORM)، یادگیری Naked SQLAlchemy آسونه چون بر پایه دانشی هست که احتمالاً از قبل داری. امکاناتی مثل مپ کردن dataclass، مدیریت session بدون داشتن state، و امکان تعریف SQL View رو لایه ORM. با تمرکز روی ویژگیهای اساسی و دوری از abstractionهای پیچیده، به شما این امکان رو میده که کدهای واضح و explicit و قابل نگهداری بنویسن، بدون دردسرهای معمول ORM.
فلسفه من اینه که کمتر، بیشتره. با کنار گذاشتن لایههای غیرضروری، Naked SQLAlchemy یه راهکار قابل اعتماد، کارآمد و ساده برای دسترسی به دیتابیس تو پایتون ارائه میده. اگه دنبال ابزاری هستی که از pitfallهای معمول ORM دوری کنه و از تخصص SQLی که از قبل داری استفاده کنه، دعوتت میکنم Naked SQLAlchemy رو امتحان کنی.
لینک ریپازیتوری
لینک مستندات
اگه این پست یا این کتابخونه برات مفید بوده، خیلی ممنون میشم اگه بهش یه ستاره بدی یا این پست رو بازنشر کنی. حمایت شما به من انگیزه میده که به توسعه و بهبود فریمورکهای متنباز ادامه بدم. مرسی 🙂🙏
@PyBackendHub
GitHub
GitHub - ManiMozaffar/naked-sqla: A simple and lightweight object mapper around SQLAlchemy core, simple alternative to SQLAlchemy…
A simple and lightweight object mapper around SQLAlchemy core, simple alternative to SQLAlchemy ORM. - ManiMozaffar/naked-sqla
❤17👍3👏3🔥2
یکی از دلایل اصلی که این لایبری رو نوشتم این بود:
تو یک سناریو آپدیت نسبتا پیچیده, چیزی که ORM بعد از آپدیت از حالت آخر row برمیگردوند و چیزی که واقعا از دیتابیس برگشته بود یکی نبود
همین موضوع راجب view هم رخ میده. که دلایلش داکیومنت شده اینجا که چرا این موضوع fail میشه.
تست فیل شدن آپدیت
تست فیل شدن view
دوم خیلی نگران کننده نیست, چون همه از view استفاده نمیکنن. ولی باگ اول تقریبا تو کله سورس کدمون هست
@PyBackendHub
تو یک سناریو آپدیت نسبتا پیچیده, چیزی که ORM بعد از آپدیت از حالت آخر row برمیگردوند و چیزی که واقعا از دیتابیس برگشته بود یکی نبود
همین موضوع راجب view هم رخ میده. که دلایلش داکیومنت شده اینجا که چرا این موضوع fail میشه.
تست فیل شدن آپدیت
تست فیل شدن view
دوم خیلی نگران کننده نیست, چون همه از view استفاده نمیکنن. ولی باگ اول تقریبا تو کله سورس کدمون هست
@PyBackendHub
👍10❤1
AioClock
در ماه ۴ هزار دانلود داره 🚀
یک شرکت بزرگ تو برزیل هم داره ازش استفاده میکنه و تو لینکدین ازم تشکر کردن خیلی حس خوبی داشت :))
واقعا دوست دارم فول تایم اوپن سورس کار کنم. و مثلا همین پروژه naked sqlalchemy ام حاصله دو شب کار بود.
ولی متاسفانه هنوز به نقطه ای نرسیدم که بتونم کسب درآمد کنم از پروژه اوپن سورسم
برای همین به حمایتتون نیاز دارم این حمایت میتونه یک استار گیت هاب باشه, که پروژه هام بیشتر دیده شه و به اون نقطه نزدیک تر شم 🫶
فریم ورک/لایبری های مفید اوپن سورسی که تاحالا منتشر کردم:
AioClock - A modern python scheduling framework with dependency injection and modular integration support. Alternative for Rocketry or apscheduler
Naked SQLA - A simple and lightweight object mapper around SQLAlchemy core, simple alternative to SQLAlchemy ORM.
CfCrawler - Cloudflare scraper and cralwer written in Async, In-place library for HTTPX. Crawl website that has cloudflare enabled, easier than ever!
@PyBackendHub
در ماه ۴ هزار دانلود داره 🚀
یک شرکت بزرگ تو برزیل هم داره ازش استفاده میکنه و تو لینکدین ازم تشکر کردن خیلی حس خوبی داشت :))
واقعا دوست دارم فول تایم اوپن سورس کار کنم. و مثلا همین پروژه naked sqlalchemy ام حاصله دو شب کار بود.
ولی متاسفانه هنوز به نقطه ای نرسیدم که بتونم کسب درآمد کنم از پروژه اوپن سورسم
برای همین به حمایتتون نیاز دارم این حمایت میتونه یک استار گیت هاب باشه, که پروژه هام بیشتر دیده شه و به اون نقطه نزدیک تر شم 🫶
فریم ورک/لایبری های مفید اوپن سورسی که تاحالا منتشر کردم:
AioClock - A modern python scheduling framework with dependency injection and modular integration support. Alternative for Rocketry or apscheduler
Naked SQLA - A simple and lightweight object mapper around SQLAlchemy core, simple alternative to SQLAlchemy ORM.
CfCrawler - Cloudflare scraper and cralwer written in Async, In-place library for HTTPX. Crawl website that has cloudflare enabled, easier than ever!
@PyBackendHub
❤38👍14👏3
اگه اسلاید انجام میدین
برای presentation یک چیزی
https://sli.dev/
این خیلی کمکتون میکنه.
حتی میتونید استرینگ فایل رو یک جا ذخیره نکنید. به جاش تو کدتون داشته باشید. و اعداد تو اسلاید رو dynamic جنریت کنید. اینطوری میتونید همیشه یک ورژن آپدیت اسلاید داشته باشین با ران کردن یک اسکریپت.
بیشتر به درد تیم های ریسرچ میخوره که زیاد اسلاید میزنن.
@PyBackendHub
برای presentation یک چیزی
https://sli.dev/
این خیلی کمکتون میکنه.
حتی میتونید استرینگ فایل رو یک جا ذخیره نکنید. به جاش تو کدتون داشته باشید. و اعداد تو اسلاید رو dynamic جنریت کنید. اینطوری میتونید همیشه یک ورژن آپدیت اسلاید داشته باشین با ران کردن یک اسکریپت.
بیشتر به درد تیم های ریسرچ میخوره که زیاد اسلاید میزنن.
@PyBackendHub
sli.dev
Slidev
Presentation slides for developers
👍14❤🔥1👎1🙏1
بد ترین نحوه استفاده از AI
برید یک کدی باهاش جنریت کنید، خودتونم نفهمید چی شده و همونو مستقیم تو پروداکشن استفاده کنید ✅
اگه ۴ ساعت برای نوشتن کوئری زمان میذارین یعنیهنوز SQL بلد نیستین و در پروسه یاد گیری هستین که مشکلیم نداره. و قطعا این روشازیک جایی به بعد جوابنمیده، هرچی تسک پیچیده تر شه کوئری که مینویسه ضعیف تره و اصلا ریزالتی که میخواین رو نمیده. خودتونم متوجه نمیشین و ران میکنید و اتفاقی ریزالتی مشابه اون چیزی که میخواین میگیرین و فکر میکنید کار کرده.
@PyBackendHub
برید یک کدی باهاش جنریت کنید، خودتونم نفهمید چی شده و همونو مستقیم تو پروداکشن استفاده کنید ✅
اگه ۴ ساعت برای نوشتن کوئری زمان میذارین یعنیهنوز SQL بلد نیستین و در پروسه یاد گیری هستین که مشکلیم نداره. و قطعا این روشازیک جایی به بعد جوابنمیده، هرچی تسک پیچیده تر شه کوئری که مینویسه ضعیف تره و اصلا ریزالتی که میخواین رو نمیده. خودتونم متوجه نمیشین و ران میکنید و اتفاقی ریزالتی مشابه اون چیزی که میخواین میگیرین و فکر میکنید کار کرده.
@PyBackendHub
👍45👎11👏3😁1🍌1
خیلی وقت پیش یکی تو گروه پرسید چطور با زبونای دیگه مثل rust برای پایتون لایبری مینویسن.
منم جوابشونو دادم ولی یادم رفت بفرستم تو کانال. برای همین پست بعدیو به این موضوع اختصاص میدم.
منم جوابشونو دادم ولی یادم رفت بفرستم تو کانال. برای همین پست بعدیو به این موضوع اختصاص میدم.
❤3👎1😁1
ما یک لایبری داریم تو راست به اسم pyo3 که بهت اجازه میده تو راست کد binding بزنی بدون اینکه بخوای یک عالمه بویلرپلیت بنویسی. اما چطور؟ core پایتون expose شده تحت لایبری C به اسم libpython
لایبری مثل Pyo3 که اجازه میده با راست برای پایتون کد binding بزنی اینطوری کار میکنه که میاد اون لایبری libpython رو wrap میکنه ولی به صورت تایپ سیف و مموری سیف. من الان یکم داکشو خوندم فکر کنم بخوام یک ادد ساده بنویسم این شکلی میشه:
و ظاهرا خوده PyO3 برام فایل stub هم میسازه که مشخص شه اینترفیس پکیجم چطوری شده.
بعد با این لایبری میام کد rustمو کامپایل میکنم. میزنم maturin develop که پکیج رو کامپایل میکنه به فایل so یا dll. و خودش هم میفرسته رو pypi همون فایلو با دستور maturin publish.
بعدش پکیجمو نصب میکنم نویسم
و جوابش میاد میشه ۳. اما تو ران تایم چطوری اجرا میشه؟
فایل .so بهش میگن shared object.
وقتی داری یک چیزی رو کامپایل میکنی دو حالت داره:
۱. یا اینکه بیای static linking انجام بدی. یک executable میدی بیرون که اونو اجرا میکنی درجا اجرا میشه.
۲. یا اینکه بیای dynamic loading انجام بدی. یعنی نمیای executable بدی که قابل اجراست و و همه چیز داخلش هست. به جاش میای باینری کد برنامتو کمپایل میکنی به همراه یک سری symbol و executable نیست دیگه مستقیم.سیمبل میشه function ها و variable هات.و یک برنامه دیگه اونوقت میتونه بیاد با استفاده از اون سیمبل ها, به صورت داینامیک از ماشین کدت استفاده کنه.
حالا چطوری؟ تو سیستم عامل یک چیزی وجود داره به اسم dynamic loader که وظیفش اینه دقیقا همین فایل های .so رو ران کنه. اینم رفرنس لینوکیسش.
در نهایت مفسر پایتون میتونه تو ران تایم کد rust ای که تحت فایل .so داری رو با داینامیک لودر ران کنه. و اون کد so دقیقا توابعی که تو راست نوشتی ماشین کدشو به صورت callable پایتون داره و از اون جایی که libpython هم wrap شده میتونی از api های libpython استفاده کنی. مثل گرفتن GIL و ریلیز کردنش. بقیه extension های C هم همینطوری کار میکنند.
@PyBackendHub
لایبری مثل Pyo3 که اجازه میده با راست برای پایتون کد binding بزنی اینطوری کار میکنه که میاد اون لایبری libpython رو wrap میکنه ولی به صورت تایپ سیف و مموری سیف. من الان یکم داکشو خوندم فکر کنم بخوام یک ادد ساده بنویسم این شکلی میشه:
use pyo3::prelude::*;
#[pyfunction]
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[pymodule]
fn my_module(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(add, m)?)?;
Ok(())
}
و ظاهرا خوده PyO3 برام فایل stub هم میسازه که مشخص شه اینترفیس پکیجم چطوری شده.
def add(a: int, b: int) -> int
بعد با این لایبری میام کد rustمو کامپایل میکنم. میزنم maturin develop که پکیج رو کامپایل میکنه به فایل so یا dll. و خودش هم میفرسته رو pypi همون فایلو با دستور maturin publish.
بعدش پکیجمو نصب میکنم نویسم
from my_module import add
add(1,2)
و جوابش میاد میشه ۳. اما تو ران تایم چطوری اجرا میشه؟
فایل .so بهش میگن shared object.
وقتی داری یک چیزی رو کامپایل میکنی دو حالت داره:
۱. یا اینکه بیای static linking انجام بدی. یک executable میدی بیرون که اونو اجرا میکنی درجا اجرا میشه.
۲. یا اینکه بیای dynamic loading انجام بدی. یعنی نمیای executable بدی که قابل اجراست و و همه چیز داخلش هست. به جاش میای باینری کد برنامتو کمپایل میکنی به همراه یک سری symbol و executable نیست دیگه مستقیم.سیمبل میشه function ها و variable هات.و یک برنامه دیگه اونوقت میتونه بیاد با استفاده از اون سیمبل ها, به صورت داینامیک از ماشین کدت استفاده کنه.
حالا چطوری؟ تو سیستم عامل یک چیزی وجود داره به اسم dynamic loader که وظیفش اینه دقیقا همین فایل های .so رو ران کنه. اینم رفرنس لینوکیسش.
در نهایت مفسر پایتون میتونه تو ران تایم کد rust ای که تحت فایل .so داری رو با داینامیک لودر ران کنه. و اون کد so دقیقا توابعی که تو راست نوشتی ماشین کدشو به صورت callable پایتون داره و از اون جایی که libpython هم wrap شده میتونی از api های libpython استفاده کنی. مثل گرفتن GIL و ریلیز کردنش. بقیه extension های C هم همینطوری کار میکنند.
@PyBackendHub
GitHub
GitHub - PyO3/maturin: Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages - PyO3/maturin
👍21🔥3🤣3❤1👎1
Python BackendHub
Next one is loading... ⌛️🚀 @PyBackendHub
همیشه با خودم فکر میکردم چی میشد اگه همونطوری که FastAPI ریسپانس 2xx که ریترن میکنیم و تو سواگر میاره, بقیه حالت ها رو هم بیاره. مثلا اگه احراز هویت کاربر درست انجام نشد بهش تو سواگر نشون بده چه ریسپانسی ممکنه بگیره.
برای همین پروژه ای نوشتم که اینکارو انجام میده. شما تو این پروژه فقط یک خط کد میتونید این قابلیت رو به پروژتون اضافه کنید!
لینک گیتهاب
لینک داکیومنتشن
لایبری RichAPI با استفاده از Abstract Syntax Tree کل کد FastAPI شما رو آنالیز میکنه و میبینه زیر روتر های شما چه اکسپشن هایی ممکنه رخ بده و اون رو به سواگر اضافه میکنه!
اگه این پست یا این کتابخونه برات مفید بوده، خیلی ممنون میشم اگه بهش یه ستاره بدی. استار گیت هاب شما به من خیلی انگیزه میده که به توسعه و بهبود فریمورکهای متنباز ادامه بدم. 🙂🙏
@PyBackendHub
برای همین پروژه ای نوشتم که اینکارو انجام میده. شما تو این پروژه فقط یک خط کد میتونید این قابلیت رو به پروژتون اضافه کنید!
لینک گیتهاب
لینک داکیومنتشن
لایبری RichAPI با استفاده از Abstract Syntax Tree کل کد FastAPI شما رو آنالیز میکنه و میبینه زیر روتر های شما چه اکسپشن هایی ممکنه رخ بده و اون رو به سواگر اضافه میکنه!
اگه این پست یا این کتابخونه برات مفید بوده، خیلی ممنون میشم اگه بهش یه ستاره بدی. استار گیت هاب شما به من خیلی انگیزه میده که به توسعه و بهبود فریمورکهای متنباز ادامه بدم. 🙂🙏
@PyBackendHub
GitHub
GitHub - ManiMozaffar/richapi: Find HTTPExceptions and turn them into documented responses! 🎉
Find HTTPExceptions and turn them into documented responses! 🎉 - ManiMozaffar/richapi
🔥35❤3👍3👎2👏2
Python BackendHub
همیشه با خودم فکر میکردم چی میشد اگه همونطوری که FastAPI ریسپانس 2xx که ریترن میکنیم و تو سواگر میاره, بقیه حالت ها رو هم بیاره. مثلا اگه احراز هویت کاربر درست انجام نشد بهش تو سواگر نشون بده چه ریسپانسی ممکنه بگیره. برای همین پروژه ای نوشتم که اینکارو انجام…
خروجی لایبری به همچین چیزی تبدیل میشه که کلاینت و فرانت شما دقیقا میتونه ببینه API شما چه حالت هایی و اکسپشن هایی داره!
@PyBackendHub
@PyBackendHub
🔥13👏5🤯3👍2❤1👎1
Python BackendHub
همیشه با خودم فکر میکردم چی میشد اگه همونطوری که FastAPI ریسپانس 2xx که ریترن میکنیم و تو سواگر میاره, بقیه حالت ها رو هم بیاره. مثلا اگه احراز هویت کاربر درست انجام نشد بهش تو سواگر نشون بده چه ریسپانسی ممکنه بگیره. برای همین پروژه ای نوشتم که اینکارو انجام…
این لایبری پتانسیل زیادی داره بنظرم چون در همون راستای FastAPI هست که داکیومنت خودکار انجام شه.
سباستین هم لایک کرده پست لینکدین رو 🤞
تو لینکدین دیشب پست کردم و خیلی share شده. ممنون میشم اگه قصد حمایت دارین، ریپست کنید که بیشتر دیده شه
لینک لینکدین
@PyBackendHub
سباستین هم لایک کرده پست لینکدین رو 🤞
تو لینکدین دیشب پست کردم و خیلی share شده. ممنون میشم اگه قصد حمایت دارین، ریپست کنید که بیشتر دیده شه
لینک لینکدین
@PyBackendHub
Linkedin
GitHub - ManiMozaffar/richapi: Find HTTPExceptions and turn them into… | Mani Mozaffar | 11 comments
🌟 Introducing RichAPI!
A big thank you to Sebastián Ramírez Montaño for creating FastAPI, which made seamless documentation possible. Inspired by his work and Marcelo Trylesinski similar library(Fast-Responses), I developed RichAPI – a tool that uses AST…
A big thank you to Sebastián Ramírez Montaño for creating FastAPI, which made seamless documentation possible. Inspired by his work and Marcelo Trylesinski similar library(Fast-Responses), I developed RichAPI – a tool that uses AST…
🔥20👍2❤1
Python BackendHub
همیشه با خودم فکر میکردم چی میشد اگه همونطوری که FastAPI ریسپانس 2xx که ریترن میکنیم و تو سواگر میاره, بقیه حالت ها رو هم بیاره. مثلا اگه احراز هویت کاربر درست انجام نشد بهش تو سواگر نشون بده چه ریسپانسی ممکنه بگیره. برای همین پروژه ای نوشتم که اینکارو انجام…
از این لایبری استفاده کردین؟ چطور بود؟
به زودی یک پروژه سمپل هم میذارم با این لایبری که چطور اسکیما 4xx های بهتری بسازین.
@PyBackendHub
به زودی یک پروژه سمپل هم میذارم با این لایبری که چطور اسکیما 4xx های بهتری بسازین.
@PyBackendHub
👍9🙏2👎1
این لایبری عالیه
https://github.com/adamchainz/time-machine
میتونید باهاش تایم رو ماک کنید تو پای تست.
اینطوری انگار برگشتین عقب به تایم.
اگه از این لایبری استفاده نکنید باید now رو یک جا run کنید و همه جا پاسش بدید که یکم اذیت کنندست
@PyBackendHub
https://github.com/adamchainz/time-machine
میتونید باهاش تایم رو ماک کنید تو پای تست.
اینطوری انگار برگشتین عقب به تایم.
اگه از این لایبری استفاده نکنید باید now رو یک جا run کنید و همه جا پاسش بدید که یکم اذیت کنندست
@PyBackendHub
GitHub
GitHub - adamchainz/time-machine: Travel through time in your tests.
Travel through time in your tests. Contribute to adamchainz/time-machine development by creating an account on GitHub.
👍14👎1
یک فیچر جدید به RichAPI اضافه شد.
شما میتونید اکسپشن کاستوم با context بنویسید.
اینطوری دیگه لازم نیست کل متن exception تون رو stringify کنید تو detail که اصلا پترن خوبی نیست. اینطوری دیتا رو کامل تر میتونید به کلاینت بدید و بذارین خوده کلاینت متن ارور رو بسازه.
و خوبیش هم اینجاست که صورت خودکار به سواگرتون اضافه میشه 🚀
لینک گیتهاب
لینک داکیومنتشن
@PyBackendHub
شما میتونید اکسپشن کاستوم با context بنویسید.
اینطوری دیگه لازم نیست کل متن exception تون رو stringify کنید تو detail که اصلا پترن خوبی نیست. اینطوری دیتا رو کامل تر میتونید به کلاینت بدید و بذارین خوده کلاینت متن ارور رو بسازه.
و خوبیش هم اینجاست که صورت خودکار به سواگرتون اضافه میشه 🚀
لینک گیتهاب
لینک داکیومنتشن
@PyBackendHub
❤18👍2🔥2👎1🤩1