Skip to content

Applied interfaces and dependency injection to create a phonebook cli with better code quality. Providers include PostgreSQL, MongoDB, Firestore

Notifications You must be signed in to change notification settings

MarkTLite/interfaces-databases

Folders and files

NameName
Last commit message
Last commit date

Latest commit

6dfff41 · Oct 31, 2022

History

16 Commits
Oct 28, 2022
Oct 28, 2022
Oct 26, 2022
Oct 28, 2022
Oct 28, 2022
Oct 28, 2022
Oct 28, 2022
Oct 31, 2022
Oct 26, 2022
Oct 31, 2022
Oct 26, 2022
Oct 27, 2022
Oct 28, 2022

Repository files navigation

Interfaces (Databases)

codecov Test status Build Status

Description

This project involves the application of design patterns to develop a phonebook cli with the following advantages:

  • High extensibility (Providers' function definitions can be added without complicating the codebase at all)
  • Dependency change does not fail the system.

Concepts applied

  • Databases: PostgreSQL, mongoDB, firestore, sqlalchemy, filesystem
  • Interfaces
  • Dependency Injection
  • Singleton pattern
  • db versioning with alembic

Adding Providers

add commandline argument for the new provider in the tests file Make sure the test_databases.py tests even when unchanged pass for your newly added providers' logic

Running Tests

pip install coverage
Run tests for each provider in this format:
coverage run tests\test_databases.py postgres
where "postgres" is one of:

  • postgres
  • mongoDB
  • firestore
  • sqlite
  • filesystem

Getting coverage

use -a to append individual tests
coverage run tests\test_databases.py filesystem && coverage run -a tests\test_databases.py sqlite && coverage run -a tests\test_databases.py postgres && coverage run -a tests\test_databases.py mongoDB && coverage run -a tests\test_databases.py firestore
then
coverage report
add this to the testcov.yml file too

Environment files

Add these files in the /providers folder before running.

dbconfig.ini for postgres

[postgresql]
host=****
database=****
port=5432
user=user
password=****

.env for mongo

MONGO_URI=****

The service account json for firestore

{
}

alembic

Used for db change mgt and versioning to have reversible changes and avoid loss of data during db restructuring. Run:
alembic init alembic
in a virtual env to create the missing alembic.ini in the root dir and then in it, edit the:
sqlalchemy.url = driver://user:pass@localhost/dbname

About

Applied interfaces and dependency injection to create a phonebook cli with better code quality. Providers include PostgreSQL, MongoDB, Firestore

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published