🚀 Password Manager

A small Tkinter password manager that generates passwords, saves them in a JSON file and searches them by website. It is the day 30 assignment of Udemy's "100 Days of Code: The Complete Python Pro Bootcamp", written for course participants and for anyone who browses the repository for ideas.

📚 Table of Contents

🧭 Overview

The program follows the three lectures of the assignment:

  1. JSON storage. Each entry is saved as a nested record (website → email, password) in data.json with json.dump, and the existing data is loaded and updated before a new entry is added.
  2. Exception handling. A missing, empty or damaged data file does not stop the program; the file is created or repaired on the next save.
  3. Search. Type a website and press Search to see the saved e-mail and password, or a message when nothing is saved for it.

The assignment's function names are kept: generate_password, save and find_password.

Path What it holds
src/password_manager/ The program: domain rules, use cases, JSON storage and the Tkinter window
src/password_manager/constants.py Every constant (file name, labels, messages, password length bounds)
tests/ The pytest tests
docs/ Project documents, the Doxygen output folder and the wiki in docs/wiki/
Doxyfile Doxygen configuration for the source comments
pyproject.toml Project configuration (Python version, entry point, pytest)

Security note. The data file is plain JSON and the passwords are not encrypted. The program is a learning exercise; do not use it for real passwords.

📋 Requirements

  • Python 3.13 or newer, with Tkinter (the standard Windows and macOS installers include it; on Debian or Ubuntu install python3-tk).
  • venv and pip, both part of Python.
  • No runtime dependencies. pytest is needed only to run the tests.
  • Optional: Doxygen to build the source documentation.

🛠️ Setup

Create and activate a local virtual environment, upgrade pip, then install the project with its test dependency.

Windows (PowerShell):

python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"

Linux and macOS:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"

▶️ Run

With the virtual environment active:

python -m password_manager

or, after the install above, password-manager. The program creates data.json in the folder you start it from. Build the source documentation with doxygen Doxyfile; the HTML opens at docs/doxygen/html/index.html.

🧪 Tests

python -m pytest

📄 License

See LICENSE.

📎 Appendix: Project documents

The documents a newcomer needs, in reading order.

Document What it tells you
Business Case Why the project exists, its scope and success criteria
Stakeholder Analysis Who is involved; the stakeholder IDs used for owners and reviewers
Project Plan The gateways and their schedule
Milestones One document per gateway: Go/No-Go criteria and tasks
Artifact registry Where each artifact type lives, the next version, the PO language and domain
Domain dictionary The PO terms and the IT terms
Traceability matrix How the artifacts link and when each was last reviewed
Framework README The framework this project uses
Framework changelog What changed in each framework release

S
Description
Tkinter password manager that generates passwords and saves and searches them in a JSON file. Udemy 100 Days of Code, day 30. Python 3.13, pytest, no runtime dependencies.
Readme AGPL-3.0
262 KiB
Languages
Python 100%