ru
Feedback
TorhamDev | تورهام 😳

TorhamDev | تورهام 😳

Открыть в Telegram

زه گهواره تا گور، زور است زور

Больше
2 869
Подписчики
Нет данных24 часа
+107 дней
+6330 день
Архив постов
اگر یک روزی داشتید روی گیت کار میکرید و اشتباهی انجام دادید. مثلا چیزی رو پاک کردید یا اشتباه rebase کردید میتونطد با دستور git reflog تمام هیستوری کارهایی که کردید رو ببینید و برای مثال برید به لحظه قبل از شروع rebase با دستور git reset برای مثال تغییری که دادید head 25 هستش git reset - -hard HEAD@{25} با این دستور برمیگردید به لحظه قبل از rebase @TorhamDevCH

The Red Clay Strays - I m Still Fine.flac22.00 MB

چطوری اسم گذاری کنیم داخل کد. البته من بعد یک مدت دنبال کردن این پترن‌ها رسیدم به اسم‌های خیلی طولانی که طبق قوانین درسته ولی حس میکنم اشتباس :)))) https://youtu.be/-J3wNP6u5YU?si=VMlBQqu-gFR3noXv

Matt Maltese - As the World Caves In.flac23.10 MB

دلم سوخت. چت رو ۲ طرف پاک کرد گایز. بریم بخوابیم

but I'm real 😭😭😭😭
but I'm real 😭😭😭😭

داداشم صاحب کل گیت هابه.

وای داده chat gpt 😂😂😂😂😂😂😂
وای داده chat gpt 😂😂😂😂😂😂😂

اعتماد کردم تموم شد
اعتماد کردم تموم شد

چی بگم والا #موقت
چی بگم والا #موقت

منم بگم یعنی؟ میدونید دیگه. مستند پایتون هم دیروز اومد https://youtu.be/GfH4QL4VqJ0 هنوز ندیدم احتمالا ۵-۶ روز آینده بهش برسم، تو صفه

awfultune - MINE.flac11.80 MB

امروز یکسری حالات مختلف از teardown کردن تست‌ها در pytest یاد گرفتم خوب بود هر کدوم کاربرد و جای خودش داره. به سه حالت مختلف رسیدم. حالت اول زمانی که شما نیاز به یک resource دارید برای تست‌هاتون برای مثال اول لاگین کنید و بعدش ریکوئست بزنید. تو این مواقع بهتر که یک fixture داشته باشید که براتون لاگین کنه و وقتی کارتون تموم شد خودش لاگ اوت کنه. به اون پروسه لاگ‌اوت کردن میگن teardown یکدونه هم tear up داریم که پروسه لاگین کردن تو این مثاله. مقال دیگش میشه زمانی که نیاز دارید یک رکورد خاص داخل دیتابیس ساخته بشه و بعد از تست حذف بشه. به ساختنش میگن tear up به حذف کردنش میگن tear down. خب حالا حال اول که fixture باشه.
import pytest

@pytest.fixture
def client() -> AuthedClient:
    #login and etc
    yeild client
    client.logout()
داخل فیکسچر‌ها pytest هرچیزی که بعد از yield بیارید teardown و هرچی که قبلش بیاد tearup. حالت دوم شما یک مقدار از درون تست نیاز دارید برای tear down کردن. برای مثال شما یک تست دارید پست زدن داخل توییتر رو تست میکنه. شما برای teardown کردن این تست لازم دارید پست رو پاک کنید اما برای پاک کردنش نیاز به id اون پست دارید. اینجاس که شما یک مقدار لازم دارید که داخل خود تست‌ ساخته شده. برای این مورد به نظر من بهترین حالت در حال حاظر با دانش الان من استفاده از try-finally هستش.
def test_twt_post_create_success(twt_client):
    post_id = None
    try:
        post = twt_client.post("Hello from test")
        post_id = post.id
    finally:
       if post_id:
             twt_client.remove_post(post_id)
اینجا فیکسچر‌های شما که برای مثال twt_client هست براتون کلاین tear up و tear down میکنن به روش اول. و try-finally پستی که ساختید رو tear down میکنه. مهدی سینیور ما باشد گفت که یک فیکسچر بسازم که داخلش یک yeild خالی باشه و بعد از yeild از داخل یک متغیر گلوبال بیاد ایدی پست ها رو بخونه و همرو حذف کنه که برای این کار لازمه داخل هر تست هر وقت پست ساختیم اضافه اش کنید به اون متغیر که من به نظرم try finally بهتر بود در نتیجه همون زدم فرستادم تک‌لید :) @TorhamDevCH

1|1 - The Ringer - Eminem (320).mp313.10 MB

یک چیز دیگه هم چند روزه میخواستم بنویسم دربارش. درباره functions.wraps زمانی که یک دکوریتور مینویسید اگر از wraps استفاده نکنید باعث میشید سیگنچر فانکشن‌هایی که از دکوریتور استفاده میکنن تغییر کنه.
def logged(func):
     def with_logging(*args, **kwargs):
           print(func.__name__ + " called")
           return func(*args, **kwargs)

     return with_logging
`
وقتی شما از این دکوریتور استفاده میکنید برای مثال:
@logged
def foo(x):
      return x ** x
در حقیقت دارید میگید
def foo(x):
     return x ** x

foo = logged(foo)
حالا اتفاقی که میوفته اینه که سیگنچر foo تغییر میکنه به logged یعنی اگر شما داک استرینگ foo بگیرید بعد دکوریت شدن توسط logged چیزی که خواهید دید داک استرینگ logged. میتونید داک استرینگ رو با داندرلاین doc بگیرید. حالا اگر از @wraps استفاده کنید این اتفاق نمیوفته و سیگنچر فانکشن foo باقی خواهد موند.
from functools import wraps

def logged(func):
     @wraps
      def with_logging(*args, **kwargs):
           print("logged")
           return func(*args, **kwargs)

@logged
def foo(x):
     return x * x
اره خلاصه @TorhamDevCH

یک چیز جالب دیروز درباره pytest خوندم داخل داکیومنتش و اینه که شما میتونید scope یک fixture رو داینامیک کنید نسبت به تستی که اجرا میکنید.
def determine_scooe(fixture_name, config):

    if config.getoption("--keep-containers",  None)
        return "session"
     return "function"


@pytest.fixture(scope=datermine_scope)
def docker_container():
    yield spwan_container()
این مثال خود داکیومنت و همینطوری که میبینید اگه یک فانکشن(callable) به جای اسکوپ بدید پای‌تست اون اجرا میکنه و دوتا ورودی بهش میده و از خروجی اون برای scope استفاده میکنه. @TorhamDevCH

Derik Fein - Shadow.flac19.53 MB

Derik Fein - Chains.flac22.14 MB

اونجایی فهمیدم برنامه‌نویس واقعی هستم که مشکلاتم رو recursive حل کردم 🗿

https://t.me/+1vq3Dm7meIozNTBk فرصت محدود