René's URL Explorer Experiment


Title: Build a Command-Line To-Do App With Python and Typer – Real Python

Open Graph Title: Build a Command-Line To-Do App With Python and Typer – Real Python

Description: In this step-by-step project, you'll create a to-do application for your command line using Python and Typer. While you build this app, you'll learn the basics of Typer, a modern and versatile library for building command-line interfaces (CLI).

Open Graph Description: In this step-by-step project, you'll create a to-do application for your command line using Python and Typer. While you build this app, you'll learn the basics of Typer, a modern and versatile library for building command-line interfaces (CLI).

Mail addresses
?subject=Python article for you&body=Build a Command-Line To-Do App With Python and Typer on Real Python https://realpython.com/python-typer-cli/

Opengraph URL: https://realpython.com/python-typer-cli/

X: @realpython

direct link

Domain: realpython.com


Hey, it has json ld scripts:
{
  "@context": "http://schema.org",
  "@type": "Article",
  "headline": "Build a Command-Line To-Do App With Python and Typer",
  "image": {
    "@type": "ImageObject",
    "url": "https://files.realpython.com/media/Create-a-CLI-application-with-Typer_Watermarked.5fca92d22184.jpeg",
    "width": 1920,
    "height": 1080
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://realpython.com/python-typer-cli/",
    "lastReviewed": "2023-08-27",
    "author": {
      "@type": "Person",
      "name": "Leodanis Pozo Ramos",
      "image": "https://realpython.com/cdn-cgi/image/width=862,height=862,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Perfil_final1.9f896bc212f6.jpg",
      "url": "https://realpython.com/team/lpozoramos/",
      "affiliation": {
        "@type": "Organization",
        "@id": "https://realpython.com/#organization",
        "name": "Real Python",
        "url": "https://realpython.com",
        "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
      }
    },
    "reviewedBy": [
      {
        "@type": "Person",
        "name": "Aldren Santos",
        "image": "https://realpython.com/cdn-cgi/image/width=500,height=500,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Aldren_Santos_Real_Python.6b0861d8b841.png",
        "url": "https://realpython.com/team/asantos/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "David Amos",
        "image": "https://realpython.com/cdn-cgi/image/width=400,height=400,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/me-small.f5f49f1c48e1.jpg",
        "url": "https://realpython.com/team/damos/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Martin Breuss",
        "image": "https://realpython.com/cdn-cgi/image/width=456,height=456,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/martin_breuss_python_square.efb2b07faf9f.jpg",
        "url": "https://realpython.com/team/mbreuss/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Sadie Parker",
        "image": "https://realpython.com/cdn-cgi/image/width=800,height=800,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/profpic_sp.a008488b6af0.jpeg",
        "url": "https://realpython.com/team/sparker/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      }
    ]
  },
  "datePublished": "2021-11-08T14:00:00+00:00",
  "dateModified": "2023-08-27T20:38:56.910279+00:00",
  "publisher": {
    "@type": "Organization",
    "@id": "https://realpython.com/#organization",
    "name": "Real Python",
    "url": "https://realpython.com",
    "logo": {
      "@type": "ImageObject",
      "url": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png",
      "width": 512,
      "height": 512
    },
    "description": "Real Python is a leading provider of online Python education and one of the largest language-specific online communities for software developers. It publishes high-quality learning resources, such as tutorials, books, and courses to an audience of millions of developers, data scientists, and machine learning engineers each month.",
    "slogan": "Become a Python Expert",
    "email": "info@realpython.com",
    "sameAs": [
      "https://github.com/realpython",
      "https://www.youtube.com/realpython",
      "https://twitter.com/realpython",
      "https://x.com/realpython",
      "https://www.linkedin.com/company/realpython-com/",
      "https://www.facebook.com/learnrealpython",
      "https://www.instagram.com/realpython",
      "https://www.tiktok.com/@realpython.com"
    ]
  },
  "author": {
    "@type": "Person",
    "name": "Leodanis Pozo Ramos",
    "image": "https://realpython.com/cdn-cgi/image/width=862,height=862,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Perfil_final1.9f896bc212f6.jpg",
    "url": "https://realpython.com/team/lpozoramos/",
    "affiliation": {
      "@type": "Organization",
      "@id": "https://realpython.com/#organization",
      "name": "Real Python",
      "url": "https://realpython.com",
      "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
    }
  },
  "description": "In this step-by-step project, you'll create a to-do application for your command line using Python and Typer. While you build this app, you'll learn the basics of Typer, a modern and versatile library for building command-line interfaces (CLI)."
}

authorReal Python
twitter:cardsummary_large_image
twitter:imagehttps://files.realpython.com/media/Create-a-CLI-application-with-Typer_Watermarked.5fca92d22184.jpeg
og:imagehttps://files.realpython.com/media/Create-a-CLI-application-with-Typer_Watermarked.5fca92d22184.jpeg
twitter:creator@realpython
og:typearticle

Links:

https://realpython.com/
Start Herehttps://realpython.com/start-here/
Learn Python https://realpython.com/python-typer-cli/
Python Tutorials →In-depth articles and video courseshttps://realpython.com/search?kind=article&kind=course&order=newest
Learning Paths →Guided study plans for accelerated learninghttps://realpython.com/learning-paths/
Quizzes & Exercises →Check your learning progresshttps://realpython.com/quizzes/
Browse Topics →Focus on a specific area or skill levelhttps://realpython.com/tutorials/all/
Community Chat →Learn with other Pythonistashttps://realpython.com/community/
Office Hours →Live Q&A calls with Python expertshttps://realpython.com/office-hours/
Podcast →Hear what’s new in the world of Pythonhttps://realpython.com/podcasts/rpp/
Books →Round out your knowledge and learn offlinehttps://realpython.com/products/books/
Reference →Concise definitions for common Python termshttps://realpython.com/ref/
Code Mentor →BetaPersonalized code assistance & learning toolshttps://realpython.com/mentor/
Unlock All Content →https://realpython.com/account/join/
More https://realpython.com/python-typer-cli/
Learner Storieshttps://realpython.com/learner-stories/
Python Newsletterhttps://realpython.com/newsletter/
Python Job Boardhttps://www.pythonjobshq.com
Meet the Teamhttps://realpython.com/team/
Become a Tutorial Writerhttps://realpython.com/write-for-us/
Become a Video Instructorhttps://realpython.com/become-an-instructor/
Searchhttps://realpython.com/search
https://realpython.com/search
Joinhttps://realpython.com/account/join/
Sign‑Inhttps://realpython.com/account/login/?next=%2Fpython-typer-cli%2F
Browse Topicshttps://realpython.com/tutorials/all/
Guided Learning Pathshttps://realpython.com/learning-paths/
Basicshttps://realpython.com/search?level=basics
Intermediatehttps://realpython.com/search?level=intermediate
Advancedhttps://realpython.com/search?level=advanced
aihttps://realpython.com/tutorials/ai/
algorithmshttps://realpython.com/tutorials/algorithms/
apihttps://realpython.com/tutorials/api/
best-practiceshttps://realpython.com/tutorials/best-practices/
careerhttps://realpython.com/tutorials/career/
communityhttps://realpython.com/tutorials/community/
databaseshttps://realpython.com/tutorials/databases/
data-sciencehttps://realpython.com/tutorials/data-science/
data-structureshttps://realpython.com/tutorials/data-structures/
data-vizhttps://realpython.com/tutorials/data-viz/
devopshttps://realpython.com/tutorials/devops/
djangohttps://realpython.com/tutorials/django/
dockerhttps://realpython.com/tutorials/docker/
editorshttps://realpython.com/tutorials/editors/
flaskhttps://realpython.com/tutorials/flask/
front-endhttps://realpython.com/tutorials/front-end/
gamedevhttps://realpython.com/tutorials/gamedev/
guihttps://realpython.com/tutorials/gui/
machine-learninghttps://realpython.com/tutorials/machine-learning/
newshttps://realpython.com/tutorials/news/
numpyhttps://realpython.com/tutorials/numpy/
projectshttps://realpython.com/tutorials/projects/
pythonhttps://realpython.com/tutorials/python/
stdlibhttps://realpython.com/tutorials/stdlib/
testinghttps://realpython.com/tutorials/testing/
toolshttps://realpython.com/tutorials/tools/
web-devhttps://realpython.com/tutorials/web-dev/
web-scrapinghttps://realpython.com/tutorials/web-scraping/
Table of Contentshttps://realpython.com/python-typer-cli/#toc
Demohttps://realpython.com/python-typer-cli/#demo
Project Overviewhttps://realpython.com/python-typer-cli/#project-overview
Prerequisiteshttps://realpython.com/python-typer-cli/#prerequisites
Step 1: Set Up the To-Do Projecthttps://realpython.com/python-typer-cli/#step-1-set-up-the-to-do-project
Set Up the Working Environmenthttps://realpython.com/python-typer-cli/#set-up-the-working-environment
Define the Project Layouthttps://realpython.com/python-typer-cli/#define-the-project-layout
Step 2: Set Up the To-Do CLI App With Python and Typerhttps://realpython.com/python-typer-cli/#step-2-set-up-the-to-do-cli-app-with-python-and-typer
Create the Typer CLI Applicationhttps://realpython.com/python-typer-cli/#create-the-typer-cli-application
Create an Entry-Point Scripthttps://realpython.com/python-typer-cli/#create-an-entry-point-script
Set Up Initial CLI Tests With pytesthttps://realpython.com/python-typer-cli/#set-up-initial-cli-tests-with-pytest
Step 3: Prepare the To-Do Database for Usehttps://realpython.com/python-typer-cli/#step-3-prepare-the-to-do-database-for-use
Set Up the Application’s Configurationshttps://realpython.com/python-typer-cli/#set-up-the-applications-configurations
Get the To-Do Database Ready for Usehttps://realpython.com/python-typer-cli/#get-the-to-do-database-ready-for-use
Implement the init CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-init-cli-command
Step 4: Set Up the To-Do App Back Endhttps://realpython.com/python-typer-cli/#step-4-set-up-the-to-do-app-back-end
Define a Single To-Dohttps://realpython.com/python-typer-cli/#define-a-single-to-do
Communicate With the CLIhttps://realpython.com/python-typer-cli/#communicate-with-the-cli
Communicate With the Databasehttps://realpython.com/python-typer-cli/#communicate-with-the-database
Write the Controller Class, Todoerhttps://realpython.com/python-typer-cli/#write-the-controller-class-todoer
Step 5: Code the Adding and Listing To-Dos Functionalitieshttps://realpython.com/python-typer-cli/#step-5-code-the-adding-and-listing-to-dos-functionalities
Define Unit Tests for Todoer.add()https://realpython.com/python-typer-cli/#define-unit-tests-for-todoeradd
Implement the add CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-add-cli-command
Implement the list Commandhttps://realpython.com/python-typer-cli/#implement-the-list-command
Step 6: Code the To-Do Completion Functionalityhttps://realpython.com/python-typer-cli/#step-6-code-the-to-do-completion-functionality
Step 7: Code the Remove To-Dos Functionalityhttps://realpython.com/python-typer-cli/#step-7-code-the-remove-to-dos-functionality
Implement the remove CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-remove-cli-command
Implement the clear CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-clear-cli-command
Conclusionhttps://realpython.com/python-typer-cli/#conclusion
Next Stepshttps://realpython.com/python-typer-cli/#next-steps
https://realpython.com/feedback/survey/article/python-typer-cli/liked/?from=article-sidebar
https://realpython.com/feedback/survey/article/python-typer-cli/disliked/?from=article-sidebar
Building a Python Command-Line To-Do App With Typer 1h 57m · 18 lessons https://realpython.com/courses/build-command-line-todo-app-typer/
Leodanis Pozo Ramoshttps://realpython.com/python-typer-cli/#author
https://realpython.com/python-typer-cli/#reader-comments
intermediatehttps://realpython.com/tutorials/intermediate/
projectshttps://realpython.com/tutorials/projects/
testinghttps://realpython.com/tutorials/testing/
toolshttps://realpython.com/tutorials/tools/
Demohttps://realpython.com/python-typer-cli/#demo
Project Overviewhttps://realpython.com/python-typer-cli/#project-overview
Prerequisiteshttps://realpython.com/python-typer-cli/#prerequisites
Step 1: Set Up the To-Do Projecthttps://realpython.com/python-typer-cli/#step-1-set-up-the-to-do-project
Set Up the Working Environmenthttps://realpython.com/python-typer-cli/#set-up-the-working-environment
Define the Project Layouthttps://realpython.com/python-typer-cli/#define-the-project-layout
Step 2: Set Up the To-Do CLI App With Python and Typerhttps://realpython.com/python-typer-cli/#step-2-set-up-the-to-do-cli-app-with-python-and-typer
Create the Typer CLI Applicationhttps://realpython.com/python-typer-cli/#create-the-typer-cli-application
Create an Entry-Point Scripthttps://realpython.com/python-typer-cli/#create-an-entry-point-script
Set Up Initial CLI Tests With pytesthttps://realpython.com/python-typer-cli/#set-up-initial-cli-tests-with-pytest
Step 3: Prepare the To-Do Database for Usehttps://realpython.com/python-typer-cli/#step-3-prepare-the-to-do-database-for-use
Set Up the Application’s Configurationshttps://realpython.com/python-typer-cli/#set-up-the-applications-configurations
Get the To-Do Database Ready for Usehttps://realpython.com/python-typer-cli/#get-the-to-do-database-ready-for-use
Implement the init CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-init-cli-command
Step 4: Set Up the To-Do App Back Endhttps://realpython.com/python-typer-cli/#step-4-set-up-the-to-do-app-back-end
Define a Single To-Dohttps://realpython.com/python-typer-cli/#define-a-single-to-do
Communicate With the CLIhttps://realpython.com/python-typer-cli/#communicate-with-the-cli
Communicate With the Databasehttps://realpython.com/python-typer-cli/#communicate-with-the-database
Write the Controller Class, Todoerhttps://realpython.com/python-typer-cli/#write-the-controller-class-todoer
Step 5: Code the Adding and Listing To-Dos Functionalitieshttps://realpython.com/python-typer-cli/#step-5-code-the-adding-and-listing-to-dos-functionalities
Define Unit Tests for Todoer.add()https://realpython.com/python-typer-cli/#define-unit-tests-for-todoeradd
Implement the add CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-add-cli-command
Implement the list Commandhttps://realpython.com/python-typer-cli/#implement-the-list-command
Step 6: Code the To-Do Completion Functionalityhttps://realpython.com/python-typer-cli/#step-6-code-the-to-do-completion-functionality
Step 7: Code the Remove To-Dos Functionalityhttps://realpython.com/python-typer-cli/#step-7-code-the-remove-to-dos-functionality
Implement the remove CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-remove-cli-command
Implement the clear CLI Commandhttps://realpython.com/python-typer-cli/#implement-the-clear-cli-command
Conclusionhttps://realpython.com/python-typer-cli/#conclusion
Next Stepshttps://realpython.com/python-typer-cli/#next-steps
Remove adshttps://realpython.com/account/join/
Building a Python Command-Line To-Do App With Typerhttps://realpython.com/courses/build-command-line-todo-app-typer/
Typerhttps://typer.tiangolo.com/
JSON fileshttps://realpython.com/python-json/
configuration fileshttps://en.wikipedia.org/wiki/Configuration_file
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#demo
command-line interface (CLI)https://en.wikipedia.org/wiki/Command-line_interface
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#project-overview
minimum viable product (MVP)https://en.wikipedia.org/wiki/Minimum_viable_product
publish it to PyPIhttps://realpython.com/pypi-publish-python-package/
architectural patternhttps://en.wikipedia.org/wiki/Architectural_pattern
separation of concerns (SoC)https://en.wikipedia.org/wiki/Separation_of_concerns
software stackhttps://en.wikipedia.org/wiki/Solution_stack
Typerhttps://typer.tiangolo.com/
Named tupleshttps://realpython.com/python-namedtuple/
dictionarieshttps://realpython.com/python-dicts/
jsonhttps://docs.python.org/3/library/json.html
configparserhttps://docs.python.org/3/library/configparser.html#module-configparser
standard libraryhttps://docs.python.org/3/library/index.html
pytesthttps://realpython.com/pytest-python-testing/
testing your CLI applicationhttps://realpython.com/python-cli-testing/
https://realpython.com/python-typer-cli/#prerequisites
The Model-View-Controller patternhttps://realpython.com/the-model-view-controller-mvc-paradigm-summarized-with-legos/
Command-line interfaces (CLI)https://realpython.com/comparing-python-command-line-parsing-libraries-argparse-docopt-click/
Python type hints, also known as type annotationshttps://realpython.com/python-type-checking/
Unit tests with pytesthttps://realpython.com/pytest-python-testing/
Object-oriented programming in Pythonhttps://realpython.com/python3-object-oriented-programming/
Configuration files with configparserhttps://docs.python.org/3/library/configparser.html#module-configparser
JSON files with Python’s jsonhttps://realpython.com/python-json/
File system path manipulation with pathlibhttps://realpython.com/python-pathlib/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#step-1-set-up-the-to-do-project
working Python environmenthttps://realpython.com/effective-python-environment/
application layouthttps://realpython.com/python-application-layouts/
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#set-up-the-working-environment
Python virtual environmenthttps://realpython.com/python-virtual-environments-a-primer/
Python 3.9.5https://realpython.com/python39-new-features/
venvhttps://docs.python.org/3/library/venv.html#module-venv
creating virtual environmentshttps://docs.python.org/3/library/venv.html#creating-virtual-environments
install Typerhttps://typer.tiangolo.com/#installation
pytesthttps://realpython.com/pytest-python-testing/#how-to-install-pytest
optional dependencieshttps://typer.tiangolo.com/#optional-dependencies
Coloramahttps://pypi.org/project/colorama/
https://realpython.com/python-typer-cli/#define-the-project-layout
packages, moduleshttps://realpython.com/python-modules-packages/
unit testshttps://realpython.com/python-testing/#unit-tests-vs-integration-tests
README.mdhttps://dbader.org/blog/write-a-great-readme-for-your-github-project
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#step-2-set-up-the-to-do-cli-app-with-python-and-typer
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
module-level nameshttps://www.python.org/dev/peps/pep-0008/#module-level-dunder-names
return and error codeshttps://en.wikipedia.org/wiki/Error_code
numbershttps://realpython.com/python-numbers/
range()https://realpython.com/python-range/
dictionaryhttps://realpython.com/python-dicts/
https://realpython.com/python-typer-cli/#create-the-typer-cli-application
explicit Typer applicationhttps://typer.tiangolo.com/tutorial/commands/#explicit-application
multiple commandshttps://typer.tiangolo.com/tutorial/commands/#a-cli-application-with-multiple-commands
optionshttps://typer.tiangolo.com/tutorial/options/
argumentshttps://typer.tiangolo.com/tutorial/arguments/
Optionalhttps://docs.python.org/3/library/typing.html?highlight=typing#typing.Optional
typinghttps://docs.python.org/3/library/typing.html#module-typing
Booleanhttps://realpython.com/python-boolean/
echo()https://typer.tiangolo.com/tutorial/printing/
typer.Exithttps://typer.tiangolo.com/tutorial/terminating/#exit-a-cli-program
main()https://realpython.com/python-main-function/
Typer callbackhttps://typer.tiangolo.com/tutorial/commands/callback/
boolhttps://realpython.com/python-boolean/
Nonehttps://realpython.com/null-in-python/
versionhttps://typer.tiangolo.com/tutorial/options/version/
https://realpython.com/python-typer-cli/#create-an-entry-point-script
__main__.pyhttps://docs.python.org/3/library/__main__.html#module-__main__
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#set-up-initial-cli-tests-with-pytest
test suitehttps://en.wikipedia.org/wiki/Test_suite
Testinghttps://typer.tiangolo.com/tutorial/testing/
CliRunnerhttps://click.palletsprojects.com/en/8.0.x/api/#click.testing.CliRunner
exit codehttps://en.wikipedia.org/wiki/Exit_status
Click’s CliRunnerhttps://click.palletsprojects.com/en/8.0.x/api/?highlight=clirunner#click.testing.CliRunner
Resulthttps://click.palletsprojects.com/en/8.0.x/api/#click.testing.Result
propertieshttps://realpython.com/python-property/
https://realpython.com/python-typer-cli/#step-3-prepare-the-to-do-database-for-use
JSONhttps://www.json.org/json-en.html
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#set-up-the-applications-configurations
opens a filehttps://realpython.com/working-with-files-in-python/
configuration filehttps://en.wikipedia.org/wiki/Configuration_file
pathlibhttps://realpython.com/python-pathlib/
ConfigParserhttps://docs.python.org/3/library/configparser.html#configparser.ConfigParser
INI fileshttps://en.wikipedia.org/wiki/INI_file
Pathhttps://docs.python.org/3/library/pathlib.html#pathlib.Path
app’s directoryhttps://typer.tiangolo.com/tutorial/app-dir/
Path.mkdir()https://docs.python.org/3/library/pathlib.html#pathlib.Path.mkdir
Path.touch()https://docs.python.org/3/library/pathlib.html#pathlib.Path.touch
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#get-the-to-do-database-ready-for-use
ConfigParser.read()https://docs.python.org/3/library/configparser.html#configparser.ConfigParser.read
.write_text()https://docs.python.org/3/library/pathlib.html#pathlib.Path.write_text
https://realpython.com/python-typer-cli/#implement-the-init-cli-command
typer.secho()https://typer.tiangolo.com/tutorial/printing/#typersecho-style-and-print
printinghttps://typer.tiangolo.com/tutorial/printing/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#step-4-set-up-the-to-do-app-back-end
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#define-a-single-to-do
https://realpython.com/python-typer-cli/#communicate-with-the-cli
named tuplehttps://realpython.com/python-namedtuple/
typing.NamedTuplehttps://realpython.com/python-namedtuple/#namedtuple-vs-typingnamedtuple
inthttps://realpython.com/python-numbers/#integers
https://realpython.com/python-typer-cli/#communicate-with-the-database
deserializeshttps://en.wikipedia.org/wiki/Serialization
with statementhttps://realpython.com/python-with-statement/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#write-the-controller-class-todoer
compositionhttps://realpython.com/inheritance-composition-python/#whats-composition
https://realpython.com/python-typer-cli/#step-5-code-the-adding-and-listing-to-dos-functionalities
test-driven development (TDD)https://en.wikipedia.org/wiki/Test-driven_development
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#define-unit-tests-for-todoeradd
fixturehttps://realpython.com/pytest-python-testing/#fixtures-managing-state-and-dependencies
tmp_pathhttps://docs.pytest.org/en/6.2.x/tmpdir.html#the-tmp-path-fixture
test caseshttps://en.wikipedia.org/wiki/Test_case
parametrizationhttps://docs.pytest.org/en/6.2.x/parametrize.html#parametrize-basics
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#implement-the-add-cli-command
conditionalhttps://realpython.com/python-conditional-statements/
Path.exists()https://docs.python.org/3/library/pathlib.html#pathlib.Path.exists
concatenateshttps://realpython.com/python-string-concatenation/
.join()https://realpython.com/python-string-split-concatenate-join/
ellipsishttps://realpython.com/python-ellipsis/
usage messagehttps://en.wikipedia.org/wiki/Usage_message
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#implement-the-list-command
for loophttps://realpython.com/python-for-loop/
line feedhttps://realpython.com/python-data-types/#applying-special-meaning-to-characters
https://realpython.com/python-typer-cli/#step-6-code-the-to-do-completion-functionality
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
listhttps://realpython.com/python-list/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-typer-cli/#step-7-code-the-remove-to-dos-functionality
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#implement-the-remove-cli-command
inner functionhttps://realpython.com/inner-functions-what-are-they-good-for/
confirm()https://typer.tiangolo.com/tutorial/prompt/#confirm
https://realpython.com/python-typer-cli/#implement-the-clear-cli-command
https://realpython.com/python-typer-cli/#conclusion
command-line interface (CLI)https://en.wikipedia.org/wiki/Command-line_interface
argparsehttps://realpython.com/command-line-interfaces-python-argparse/
Clickhttps://realpython.com/python-click/
Typerhttps://typer.tiangolo.com/
Click here to get the source code you’ll usehttps://realpython.com/bonus/python-typer-cli-project-code/
https://realpython.com/python-typer-cli/#next-steps
datetimehttps://realpython.com/python-datetime/
code coveragehttps://en.wikipedia.org/wiki/Code_coverage
Poetryhttps://python-poetry.org/
publish it to PyPIhttps://realpython.com/pypi-publish-python-package/
https://realpython.com/feedback/survey/article/python-typer-cli/liked/?from=article-footer
https://realpython.com/feedback/survey/article/python-typer-cli/disliked/?from=article-footer
Building a Python Command-Line To-Do App With Typerhttps://realpython.com/courses/build-command-line-todo-app-typer/
https://realpython.com/team/lpozoramos/
» More about Leodanishttps://realpython.com/team/lpozoramos/
https://realpython.com/team/asantos/
Aldrenhttps://realpython.com/team/asantos/
https://realpython.com/team/damos/
Davidhttps://realpython.com/team/damos/
https://realpython.com/team/mbreuss/
Martinhttps://realpython.com/team/mbreuss/
https://realpython.com/team/sparker/
Sadiehttps://realpython.com/team/sparker/
Level Up Your Python Skills »https://realpython.com/account/join/?utm_source=rp_article_footer&utm_content=python-typer-cli
Level Up Your Python Skills »https://realpython.com/account/join/?utm_source=rp_article_footer&utm_content=python-typer-cli
https://realpython.com/feedback/survey/article/python-typer-cli/liked/?from=article-comments
https://realpython.com/feedback/survey/article/python-typer-cli/disliked/?from=article-comments
LinkedInhttps://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Frealpython.com%2Fpython-typer-cli%2F
Twitterhttps://twitter.com/intent/tweet/?text=Interesting%20Python%20article%20on%20%40realpython%3A%20Build%20a%20Command-Line%20To-Do%20App%20With%20Python%20and%20Typer&url=https%3A%2F%2Frealpython.com%2Fpython-typer-cli%2F
Blueskyhttps://bsky.app/intent/compose?text=Interesting%20Python%20article%20on%20%40realpython.com%3A%20Build%20a%20Command-Line%20To-Do%20App%20With%20Python%20and%20Typer%20https%3A%2F%2Frealpython.com%2Fpython-typer-cli%2F
Facebookhttps://facebook.com/sharer/sharer.php?u=https%3A%2F%2Frealpython.com%2Fpython-typer-cli%2F
Get tips for asking good questionshttps://realpython.com/python-beginner-tips/#tip-9-ask-good-questions
get answers to common questions in our support portalhttps://support.realpython.com
Real Python Community Chathttps://realpython.com/community/
“Office Hours” Live Q&A Sessionhttps://realpython.com/office-hours/
intermediatehttps://realpython.com/tutorials/intermediate/
projectshttps://realpython.com/tutorials/projects/
testinghttps://realpython.com/tutorials/testing/
toolshttps://realpython.com/tutorials/tools/
Building a Python Command-Line To-Do App With Typerhttps://realpython.com/courses/build-command-line-todo-app-typer/?utm_source=realpython&utm_medium=web&utm_campaign=related-course&utm_content=python-typer-cli
Click and Python: Build Extensible and Composable CLI Appshttps://realpython.com/python-click/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-typer-cli
Build Command-Line Interfaces With Python's argparsehttps://realpython.com/command-line-interfaces-python-argparse/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-typer-cli
Model-View-Controller (MVC) in Python Web Apps: Explained With Legohttps://realpython.com/lego-model-view-controller-python/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-typer-cli
Primer on Python Decoratorshttps://realpython.com/primer-on-python-decorators/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-typer-cli
Python and TOML: Read, Write, and Configure with tomllibhttps://realpython.com/python-toml/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-typer-cli
https://realpython.com/account/signup/?intent=continue_reading&utm_source=rp&utm_medium=web&utm_campaign=rwn&utm_content=v1&next=%2Fpython-typer-cli%2F
Continue »https://realpython.com/account/signup/?intent=continue_reading&utm_source=rp&utm_medium=web&utm_campaign=rwn&utm_content=v1&next=%2Fpython-typer-cli%2F
Sign-Inhttps://realpython.com/account/login/?next=/python-typer-cli/
Start Herehttps://realpython.com/start-here/
Learning Resourceshttps://realpython.com/search
Code Mentorhttps://realpython.com/mentor/
Python Referencehttps://realpython.com/ref/
Python Cheat Sheethttps://realpython.com/cheatsheets/python/
Support Centerhttps://support.realpython.com/
Learning Pathshttps://realpython.com/learning-paths/
Quizzes & Exerciseshttps://realpython.com/quizzes/
Browse Topicshttps://realpython.com/tutorials/all/
Live Courseshttps://realpython.com/live/
Bookshttps://realpython.com/books/
Podcasthttps://realpython.com/podcasts/rpp/
Newsletterhttps://realpython.com/newsletter/
Community Chathttps://realpython.com/community/
Office Hourshttps://realpython.com/office-hours/
Learner Storieshttps://realpython.com/learner-stories/
Plans & Pricinghttps://realpython.com/account/join/
Team Planshttps://realpython.com/account/join-team/
For Businesshttps://realpython.com/account/join-team/inquiry/
For Schoolshttps://realpython.com/account/join-team/education-inquiry/
Reviewshttps://realpython.com/learner-stories/
About Ushttps://realpython.com/about/
Teamhttps://realpython.com/team/
Mission & Valueshttps://realpython.com/mission/
Editorial Guidelineshttps://realpython.com/editorial-guidelines/
Sponsorshipshttps://realpython.com/sponsorships/
Careershttps://realpython.workable.com
Press Kithttps://realpython.com/media-kit/
Merchhttps://realpython.com/merch
https://www.youtube.com/realpython
https://x.com/realpython
https://www.linkedin.com/company/realpython-com
https://www.facebook.com/LearnRealPython
https://github.com/realpython/
Privacy Policyhttps://realpython.com/privacy-policy/
Terms of Usehttps://realpython.com/terms/
Securityhttps://realpython.com/security/
Contacthttps://realpython.com/contact/
https://realpython.com/

Viewport: width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover

Robots: max-image-preview:large


URLs of crawlers that visited me.