হাই, খেলা যাক! আপনার ফাইটার চয়ন করুন (শিলা, কাগজ, কাঁচি): শিলা
অনেক দৈনন্দিন সফ্টওয়্যার একটি CLI প্রোগ্রাম হিসাবে মোড়ানো হয়. উদাহরণ স্বরূপ vim
টেক্সট এডিটর নিন - যে কোনো UNIX সিস্টেমের সাথে পাঠানো একটি টুল যা শুধুমাত্র টার্মিনালে vim <FILE>
চালিয়ে সক্রিয় করা যেতে পারে।
উদাহরণস্বরূপ, যখন আমরা মূল বিভাগে project
সম্পত্তি সেট করতে চাই, তখন আমরা gcloud config set project <PROJECT_ID>
যুক্তি | বিষয়বস্তু |
---|---|
Arg 0 | জিক্লাউড |
Arg 1 | কনফিগারেশন |
… | … |
পূর্ববর্তী উদাহরণের উপর ভিত্তি করে, আমরা gcloud config set project <PROJECT_ID>
চালিয়ে মূল বিভাগে project
সম্পত্তি সেট করি
অন্য কথায়, set
একটি কমান্ড।
তাদের অফিসিয়াল ডকুমেন্টেশনে যেমন বলা হয়েছে, gcloud config
কমান্ডের কথা উল্লেখ করে, gcloud config
হল একটি কমান্ড গ্রুপ যা আপনাকে বৈশিষ্ট্যগুলি পরিবর্তন করতে দেয়। ব্যবহারটি নিম্নরূপ:
gcloud config GROUP | COMMAND [GCLOUD_WIDE_FLAG … ]
যার দ্বারা COMMAND হয় set
যেতে পারে, list
, ইত্যাদি... (মনে রাখবেন GROUP হল config
)
gcloud config
কমান্ড গ্রুপের ব্যবহারে ফিরে যাওয়া, এই ক্ষেত্রে বিকল্পটি হল GCLOUD_WIDE_FLAG
।
উদাহরণস্বরূপ, বলুন যে আমরা কমান্ডের বিস্তারিত ব্যবহার এবং বিবরণ প্রদর্শন করতে চেয়েছিলাম, আমরা gcloud config set –help
। অন্য কথায়, --help
হল বিকল্প।
আরেকটি উদাহরণ হল যখন আমরা একটি নির্দিষ্ট প্রকল্পের কম্পিউট বিভাগে জোন প্রপার্টি সেট করতে চাই, তখন আমরা gcloud config set compute <ZONE_NAME> –project=<PROJECT_ID>
চালাই। অন্য কথায়, --project
হল একটি বিকল্প যা <PROJECT_ID>
মান ধারণ করে।
উদাহরণস্বরূপ, যখন আমরা একটি ডেটাপ্রোক ক্লাস্টার তৈরি করতে চাই, তখন আমরা gcloud dataproc clusters create <CLUSTER_NAME> –region=<REGION>
। এবং তাদের ব্যবহারের ডকুমেন্টেশনে বলা হয়েছে:
gcloud dataproc clusters create (CLUSTER: –region=REGION)
--region
পতাকা বাধ্যতামূলক যদি এটি পূর্বে কনফিগার করা না থাকে।
সংক্ষিপ্ত বিকল্পগুলি দিয়ে শুরু হয় -
একটি একক বর্ণানুক্রমিক অক্ষর দ্বারা অনুসরণ করা হয়, যেখানে দীর্ঘ বিকল্পগুলি --
এর পরে একাধিক অক্ষর দ্বারা শুরু হয়৷ সংক্ষিপ্ত বিকল্পগুলিকে শর্টকাট হিসাবে ভাবুন যখন ব্যবহারকারী নিশ্চিত হন যে তারা কী চান তবে দীর্ঘ বিকল্পগুলি আরও পাঠযোগ্য।
আপনি শিলা চয়ন! কম্পিউটার এখন তার নির্বাচন করবে।
আপনার দল প্রজেক্টের সমস্যা এবং অগ্রগতির ট্র্যাক রাখতে ট্রেলো ব্যবহার করে। আপনার দল বোর্ডের সাথে ইন্টারঅ্যাক্ট করার আরও সহজ উপায় খুঁজছে - টার্মিনালের মাধ্যমে একটি নতুন GitHub সংগ্রহস্থল তৈরি করার মতো কিছু। বোর্ডের 'টু ডু' কলামে একটি নতুন কার্ড যোগ করতে সক্ষম হওয়ার এই মৌলিক প্রয়োজনীয়তার সাথে একটি CLI প্রোগ্রাম তৈরি করতে দলটি আপনার দিকে ফিরেছে।
ক্রিয়ামূলক প্রয়োজনীয়তা
অ-কার্যকর প্রয়োজনীয়তা
ঐচ্ছিক প্রয়োজনীয়তা
Ps শেষ দুটি কলাম সম্পর্কে চিন্তা করবেন না, আমরা এটি সম্পর্কে পরে শিখব...
ইউনিট পরীক্ষা
ট্রেলো
সিএলআই
ইউটিলস (বিবিধ)
অংশ 1
py-trello
ব্যবসায়িক যুক্তির বাস্তবায়নঅংশ ২
পার্ট 3
কম্পিউটার বেছে নিয়েছে কাঁচি! দেখা যাক এই যুদ্ধে কে জয়ী হয়...
trellocli/ __init__.py __main__.py models.py cli.py trelloservice.py tests/ test_cli.py test_trelloservice.py README.md pyproject.toml .env .gitignore
trellocli
: ব্যবহারকারীদের দ্বারা ব্যবহার করা প্যাকেজ নাম হিসাবে কাজ করে যেমন, pip install trellocli
__init__.py
: প্যাকেজের মূল প্রতিনিধিত্ব করে, ফোল্ডারটিকে পাইথন প্যাকেজ হিসাবে মেনে চলে__main__.py
: এন্ট্রি পয়েন্ট সংজ্ঞায়িত করে, এবং ব্যবহারকারীদের -m
ফ্ল্যাগ ব্যবহার করে ফাইল পাথ নির্দিষ্ট না করে মডিউল চালানোর অনুমতি দেয় যেমন, python -m <module_name>
python -m <parent_folder>/<module_name>.py
<module_name>models.py
: বিশ্বব্যাপী ব্যবহৃত ক্লাসগুলি সঞ্চয় করে যেমন, মডেল যেগুলি API প্রতিক্রিয়াগুলি মেনে চলবে বলে আশা করা হয়cli.py
: CLI কমান্ড এবং বিকল্পগুলির জন্য ব্যবসায়িক যুক্তি সংরক্ষণ করেtrelloservice.py
: py-trello
এর সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবসায়িক যুক্তি সংরক্ষণ করেtests
: প্রোগ্রামের জন্য ইউনিট পরীক্ষা সঞ্চয় করেtest_cli.py
: CLI বাস্তবায়নের জন্য ইউনিট পরীক্ষা সঞ্চয় করেtest_trelloservice.py
: py-trello
এর সাথে ইন্টারঅ্যাকশনের জন্য ইউনিট পরীক্ষা সঞ্চয় করেREADME.md
: প্রোগ্রামের জন্য ডকুমেন্টেশন সঞ্চয় করেpyproject.toml
: প্যাকেজের কনফিগারেশন এবং প্রয়োজনীয়তা সংরক্ষণ করে.env
: পরিবেশের ভেরিয়েবল সঞ্চয় করে.gitignore
: সংস্করণ নিয়ন্ত্রণের সময় উপেক্ষা করা ফাইলগুলিকে নির্দিষ্ট করে (ট্র্যাক করা হয়নি)
আমাদের প্যাকেজের __init__.py
ফাইল দিয়ে শুরু, যেখানে প্যাকেজ ধ্রুবক এবং ভেরিয়েবল সংরক্ষণ করা হয়, যেমন অ্যাপের নাম এবং সংস্করণ। আমাদের ক্ষেত্রে, আমরা নিম্নলিখিতগুলি শুরু করতে চাই:
# trellocli/__init__.py __app_name__ = "trellocli" __version__ = "0.1.0" ( SUCCESS, TRELLO_WRITE_ERROR, TRELLO_READ_ERROR ) = range(3) ERRORS = { TRELLO_WRITE_ERROR: "Error when writing to Trello", TRELLO_READ_ERROR: "Error when reading from Trello" }
__main__.py
ফাইলে চলে গেলে, আপনার প্রোগ্রামের মূল প্রবাহ এখানে সংরক্ষণ করা উচিত। আমাদের ক্ষেত্রে, আমরা CLI প্রোগ্রাম এন্ট্রি পয়েন্ট সংরক্ষণ করব, ধরে নিই যে cli.py
এ একটি কলযোগ্য ফাংশন থাকবে।
# trellocli/__main__.py from trellocli import cli def main(): # we'll modify this later - after the implementation of `cli.py` pass if __name__ == "__main__": main()
এখন প্যাকেজটি সেট আপ করা হয়েছে, আসুন আমাদের README.md
ফাইল (প্রধান ডকুমেন্টেশন) আপডেট করার দিকে নজর দেওয়া যাক। আমাদের অবশ্যই অনুসরণ করতে হবে এমন একটি নির্দিষ্ট কাঠামো নেই, তবে একটি ভাল README নিম্নলিখিতগুলি নিয়ে গঠিত:
<!--- README.md --> # Overview # Getting Started # Usage # Architecture ## Data Flow ## Tech Stack # Running Tests # Next Steps # References
# pyproject.toml [project] name = "trellocli_<YOUR_USERNAME>" version = "0.1.0" authors = [ { name = "<YOUR_NAME>", email = "<YOUR_EMAIL>" } ] description = "Program to modify your Trello boards from your computer's command line" readme = "README.md" requires-python = ">=3.7" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] dependencies = [] [project.urls] "Homepage" = ""
তালিকার পরবর্তী হবে আমাদের .env
ফাইল যেখানে আমরা আমাদের পরিবেশ ভেরিয়েবল যেমন API গোপনীয়তা এবং কী সংরক্ষণ করি। এটি মনে রাখা গুরুত্বপূর্ণ যে এই ফাইলটি গিট দ্বারা ট্র্যাক করা উচিত নয় কারণ এতে সংবেদনশীল তথ্য রয়েছে।
আমাদের ক্ষেত্রে, আমরা এখানে আমাদের ট্রেলো শংসাপত্র সংরক্ষণ করব। ট্রেলোতে একটি পাওয়ার-আপ তৈরি করতে, অনুসরণ করুন। আরও নির্দিষ্টভাবে, py-trello
এর ব্যবহারের উপর ভিত্তি করে, যেহেতু আমরা আমাদের অ্যাপ্লিকেশনের জন্য OAuth ব্যবহার করতে চাই, Trello-এর সাথে যোগাযোগ করতে আমাদের নিম্নলিখিতগুলির প্রয়োজন হবে:
একবার আপনি আপনার API কী এবং গোপনীয়তা পুনরুদ্ধার করার পরে, সেগুলিকে .env
ফাইলে সংরক্ষণ করুন
# .env TRELLO_API_KEY=<your_api_key> TRELLO_API_SECRET=<your_api_secret>
শেষ কিন্তু অন্তত নয়, আসুন Python .gitignore
টেমপ্লেটটি ব্যবহার করি যা পাওয়া যাবে। মনে রাখবেন যে আমাদের .env
ফাইলটি কখনই ট্র্যাক করা হয় না তা নিশ্চিত করার জন্য এটি অত্যন্ত গুরুত্বপূর্ণ - যদি কোনও সময়ে, আমাদের .env
ফাইলটি ট্র্যাক করা হয়, এমনকি যদি আমরা পরবর্তী ধাপে ফাইলটি সরিয়ে ফেলি, তাহলে ক্ষতি হয়ে যায় এবং ক্ষতিকারক অভিনেতারা আগেরটি চিহ্নিত করতে পারে। সংবেদনশীল তথ্যের জন্য প্যাচ।
এখন যেহেতু সেটআপ সম্পূর্ণ হয়েছে, আসুন আমাদের পরিবর্তনগুলিকে GitHub-এ ঠেলে দেওয়া যাক। pyproject.toml
এ উল্লেখিত মেটাডেটার উপর নির্ভর করে, সেই অনুযায়ী আপনার লাইসেন্স এবং হোমপেজ URL আপডেট করতে ভুলবেন না। কীভাবে আরও ভাল কমিট লিখতে হয় তার রেফারেন্সের জন্য:
কার্যকরী প্রয়োজনীয়তার উপর ভিত্তি করে, আমাদের প্রধান উদ্বেগ হল ব্যবহারকারীদের একটি নতুন কার্ড যোগ করার অনুমতি দেওয়া। py-trello
এ পদ্ধতিটি উল্লেখ করা: । এটি করতে সক্ষম হওয়ার জন্য, আমাদের অবশ্যই List
ক্লাস থেকে add_card
পদ্ধতিতে কল করতে হবে, যার মধ্যে Board
ক্লাস থেকে get_list
ফাংশন থেকে পুনরুদ্ধার করা যেতে পারে, যার মধ্যে পুনরুদ্ধার করা যেতে পারে...
কোডে ডাইভ করার আগে, আমাদের pyproject.toml
ফাইলটি পরিবর্তন করা যাক যাতে লেখা/চালনা ইউনিট পরীক্ষার জন্য প্রয়োজনীয় নির্ভরতা অন্তর্ভুক্ত করা যায়।
# pyproject.toml [project] dependencies = [ "pytest==7.4.0", "pytest-mock==3.11.1" ]
এর পরে, আসুন আমাদের virtualenv সক্রিয় করি এবং pip install .
নির্ভরতা ইনস্টল করতে।
# tests/test_trelloservice.py # module imports from trellocli import SUCCESS from trellocli.trelloservice import TrelloService from trellocli.models import * # dependencies imports # misc imports def test_get_access_token(mocker): """Test to check success retrieval of user's access token""" mock_res = GetOAuthTokenResponse( token="test", token_secret="test", status_code=SUCCESS ) mocker.patch( "trellocli.trelloservice.TrelloService.get_user_oauth_token", return_value=mock_res ) trellojob = TrelloService() res = trellojob.get_user_oauth_token() assert res.status_code == SUCCESS
আমার নমুনা কোডে লক্ষ্য করুন যে GetOAuthTokenResponse
হল একটি মডেল যা এখনও models.py
এ সেট করা হয়নি। এটি ক্লিনার কোড লেখার জন্য কাঠামো প্রদান করে, আমরা এটি পরে কাজ করে দেখব।
আমাদের পরীক্ষা চালানোর জন্য, কেবল python -m pytest
চালান। আমাদের পরীক্ষাগুলি কীভাবে ব্যর্থ হবে তা লক্ষ্য করুন, তবে এটি ঠিক আছে - এটি শেষ পর্যন্ত কার্যকর হবে৷
চ্যালেঞ্জ কর্নার 💡 আপনি কি নিজে নিজে আরও পরীক্ষা লেখার চেষ্টা করতে পারেন? আমার পরীক্ষাগুলি কেমন দেখায় তা দেখতে পড়ুন নির্দ্বিধায়
আপাতত, আসুন আমাদের trelloservice
তৈরি করি। একটি নতুন নির্ভরতা যোগ করার সাথে শুরু করে, এটি হল py-trello
wrapper।
# pyproject.toml dependencies = [ "pytest==7.4.0", "pytest-mock==3.11.1", "py-trello==0.19.0" ]
আবার, pip install .
নির্ভরতা ইনস্টল করতে।
এখন, আমাদের মডেলগুলি তৈরি করে শুরু করা যাক - আমরা trelloservice
যে প্রতিক্রিয়াগুলি আশা করছি তা নিয়ন্ত্রণ করতে। এই অংশের জন্য, আমাদের ইউনিট পরীক্ষা এবং py-trello
সোর্স কোড উল্লেখ করা উত্তম যাতে আমরা কী ধরনের রিটার্ন মান আশা করতে পারি তা বোঝার জন্য।
উদাহরণস্বরূপ, বলুন যে আমরা ব্যবহারকারীর অ্যাক্সেস টোকেন পুনরুদ্ধার করতে চাই, py-trello
এর create_oauth_token
ফাংশন ( ) উল্লেখ করে, আমরা জানি রিটার্ন মানটি এরকম কিছু হবে
# trellocli/models.py # module imports # dependencies imports # misc imports from typing import NamedTuple class GetOAuthTokenResponse(NamedTuple): token: str token_secret: str status_code: int
অন্যদিকে, বিরোধপূর্ণ নামকরণের রীতি সম্পর্কে সচেতন হোন। উদাহরণস্বরূপ, py-trello
মডিউলের List
নামে একটি ক্লাস রয়েছে। এর জন্য একটি সমাধান হবে আমদানির সময় একটি উপনাম প্রদান করা।
# trellocli/models.py # dependencies imports from trello import List as Trellolist
# trellocli/models.py class GetBoardName(NamedTuple): """Model to store board id Attributes id (str): Extracted board id from Board value type """ id: str
চ্যালেঞ্জ কর্নার 💡 আপনি কি নিজের থেকে আরও মডেল লেখার চেষ্টা করতে পারেন? আমার মডেল দেখতে কেমন তা দেখতে পড়ুন নির্দ্বিধায়৷
মডেল নিচে, আসুন আনুষ্ঠানিকভাবে trelloservice
কোডিং শুরু করা যাক. আবার, আমাদের তৈরি করা ইউনিট পরীক্ষাগুলি উল্লেখ করা উচিত - বলুন যে পরীক্ষার বর্তমান তালিকা পরিষেবার জন্য সম্পূর্ণ কভারেজ প্রদান করে না, সর্বদা ফিরে যান এবং প্রয়োজনে আরও পরীক্ষা যোগ করুন।
স্বাভাবিকভাবে, শীর্ষের দিকে সমস্ত আমদানি বিবৃতি অন্তর্ভুক্ত করুন। তারপর প্রত্যাশিত হিসাবে TrelloService
ক্লাস এবং স্থানধারক পদ্ধতি তৈরি করুন। ধারণাটি হল যে আমরা cli.py
এ পরিষেবাটির একটি ভাগ করা উদাহরণ শুরু করব এবং সেই অনুযায়ী এর পদ্ধতিগুলিকে কল করব। উপরন্তু, আমরা স্কেলেবিলিটির জন্য লক্ষ্য করছি, এইভাবে ব্যাপক কভারেজের প্রয়োজন।
# trellocli/trelloservice.py # module imports from trellocli import TRELLO_READ_ERROR, TRELLO_WRITE_ERROR, SUCCESS from trellocli.models import * # dependencies imports from trello import TrelloClient # misc imports class TrelloService: """Class to implement the business logic needed to interact with Trello""" def __init__(self) -> None: pass def get_user_oauth_token() -> GetOAuthTokenResponse: pass def get_all_boards() -> GetAllBoardsResponse: pass def get_board() -> GetBoardResponse: pass def get_all_lists() -> GetAllListsResponse: pass def get_list() -> GetListResponse: pass def get_all_labels() -> GetAllLabelsResponse: pass def get_label() -> GetLabelResponse: pass def add_card() -> AddCardResponse: pass
Ps লক্ষ্য করুন কিভাবে এই সময় রাউন্ড আমরা আমাদের পরীক্ষা চালানো, আমাদের পরীক্ষা পাস হবে. প্রকৃতপক্ষে, এটি আমাদের নিশ্চিত করতে সাহায্য করবে যে আমরা সঠিক পথে চলেছি। ওয়ার্কফ্লো আমাদের ফাংশন প্রসারিত করা, আমাদের পরীক্ষা চালানো, পাস/ফেল এবং সেই অনুযায়ী রিফ্যাক্টর পরীক্ষা করা উচিত।
__init__
ফাংশন দিয়ে শুরু করা যাক। ধারণা হল এখানে get_user_oauth_token
ফাংশন কল করা এবং TrelloClient
চালু করা। আবার, শুধুমাত্র .env
ফাইলে এই ধরনের সংবেদনশীল তথ্য সংরক্ষণের প্রয়োজনীয়তার উপর জোর দিয়ে, আমরা সংবেদনশীল তথ্য পুনরুদ্ধার করতে python-dotenv
নির্ভরতা ব্যবহার করব। তদনুসারে আমাদের pyproject.toml
ফাইলটি পরিবর্তন করার পরে, আসুন অনুমোদনের পদক্ষেপগুলি বাস্তবায়ন শুরু করি।
# trellocli/trelloservice.py class TrelloService: """Class to implement the business logic needed to interact with Trello""" def __init__(self) -> None: self.__load_oauth_token_env_var() self.__client = TrelloClient( api_key=os.getenv("TRELLO_API_KEY"), api_secret=os.getenv("TRELLO_API_SECRET"), token=os.getenv("TRELLO_OAUTH_TOKEN") ) def __load_oauth_token_env_var(self) -> None: """Private method to store user's oauth token as an environment variable""" load_dotenv() if not os.getenv("TRELLO_OAUTH_TOKEN"): res = self.get_user_oauth_token() if res.status_code == SUCCESS: dotenv_path = find_dotenv() set_key( dotenv_path=dotenv_path, key_to_set="TRELLO_OAUTH_TOKEN", value_to_set=res.token ) else: print("User denied access.") self.__load_oauth_token_env_var() def get_user_oauth_token(self) -> GetOAuthTokenResponse: """Helper method to retrieve user's oauth token Returns GetOAuthTokenResponse: user's oauth token """ try: res = create_oauth_token() return GetOAuthTokenResponse( token=res["oauth_token"], token_secret=res["oauth_token_secret"], status_code=SUCCESS ) except: return GetOAuthTokenResponse( token="", token_secret="", status_code=TRELLO_AUTHORIZATION_ERROR )
এই ইমপ্লিমেন্টেশনে, আমরা একটি সহায়ক পদ্ধতি তৈরি করেছি যাতে কোনো অদূরে দেখা যায় এমন ত্রুটি যেমন, অনুমোদনের সময় ব্যবহারকারী Deny
ক্লিক করে। অধিকন্তু, এটি একটি বৈধ প্রতিক্রিয়া ফেরত না আসা পর্যন্ত বারবার ব্যবহারকারীর অনুমোদনের জন্য জিজ্ঞাসা করার জন্য সেট আপ করা হয়েছে, কারণ সত্যটি হল যে ব্যবহারকারী আমাদের অ্যাপটিকে তাদের অ্যাকাউন্ট ডেটা অ্যাক্সেস করার অনুমতি না দেওয়া পর্যন্ত আমরা চালিয়ে যেতে পারি না।
চ্যালেঞ্জ কর্নার 💡 নোটিশ TRELLO_AUTHORIZATION_ERROR
? আপনি একটি প্যাকেজ ধ্রুবক হিসাবে এই ত্রুটি ঘোষণা করতে পারেন? আরও তথ্যের জন্য সেটআপ পড়ুন
# trellocli/trelloservice.py def get_all_boards(self) -> GetAllBoardsResponse: """Method to list all boards from user's account Returns GetAllBoardsResponse: array of user's trello boards """ try: res = self.__client.list_boards() return GetAllBoardsResponse( res=res, status_code=SUCCESS ) except: return GetAllBoardsResponse( res=[], status_code=TRELLO_READ_ERROR ) def get_board(self, board_id: str) -> GetBoardResponse: """Method to retrieve board Required Args board_id (str): board id Returns GetBoardResponse: trello board """ try: res = self.__client.get_board(board_id=board_id) return GetBoardResponse( res=res, status_code=SUCCESS ) except: return GetBoardResponse( res=None, status_code=TRELLO_READ_ERROR )
তালিকাগুলি (কলাম) পুনরুদ্ধার করার জন্য, আমাদের py-trello
এর Board
ক্লাসটি পরীক্ষা করতে হবে, বা অন্য কথায়, আমাদের অবশ্যই Board
মান প্রকারের একটি নতুন প্যারামিটার গ্রহণ করতে হবে।
# trellocli/trelloservice.py def get_all_lists(self, board: Board) -> GetAllListsResponse: """Method to list all lists (columns) from the trello board Required Args board (Board): trello board Returns GetAllListsResponse: array of trello lists """ try: res = board.all_lists() return GetAllListsResponse( res=res, status_code=SUCCESS ) except: return GetAllListsResponse( res=[], status_code=TRELLO_READ_ERROR ) def get_list(self, board: Board, list_id: str) -> GetListResponse: """Method to retrieve list (column) from the trello board Required Args board (Board): trello board list_id (str): list id Returns GetListResponse: trello list """ try: res = board.get_list(list_id=list_id) return GetListResponse( res=res, status_code=SUCCESS ) except: return GetListResponse( res=None, status_code=TRELLO_READ_ERROR )
চ্যালেঞ্জ কর্নার 💡 আপনি কি নিজে থেকে get_all_labels
এবং get_label
ফাংশন বাস্তবায়ন করতে পারেন? py-trello
Board
ক্লাসটি সংশোধন করুন। আমার বাস্তবায়ন কেমন দেখাচ্ছে তা দেখতে পড়ুন নির্দ্বিধায়
# trellocli/trelloservice.py def add_card( self, col: Trellolist, name: str, desc: str = "", labels: List[Label] = [] ) -> AddCardResponse: """Method to add a new card to a list (column) on the trello board Required Args col (Trellolist): trello list name (str): card name Optional Args desc (str): card description labels (List[Label]): list of labels to be added to the card Returns AddCardResponse: newly-added card """ try: # create new card new_card = col.add_card(name=name) # add optional description if desc: new_card.set_description(description=desc) # add optional labels if labels: for label in labels: new_card.add_label(label=label) return AddCardResponse( res=new_card, status_code=SUCCESS ) except: return AddCardResponse( res=new_card, status_code=TRELLO_WRITE_ERROR )
অভিনন্দন! তুমি জিতেছিলে. আবার খেলবেন (y/N)?