diff --git a/.vscode/settings.json b/.vscode/settings.json index 1b32c87..5035f91 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "python.testing.pytestArgs": [ - "app" + "." ], "python.testing.unittestEnabled": false, "python.testing.nosetestsEnabled": false, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..899fcb5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,92 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Ensure any install or build dependencies are removed before the end of the layer when doing a + build. +2. Update the README.md with details of changes to the interface, this includes new environment + variables, exposed ports, useful file locations and container parameters. +3. Increase the version numbers in any examples files and the README.md to the new version that this + Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [ruidy.nemausat@gmail.com]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..b2155b7 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +# MIT License + +Copyright (c) [2021] [Ruidy] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile index cc9b581..107c4da 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ lint: pipenv run black -l 99 . pipenv run flake8 . pipenv run mypy . - pipenv run vulture . - pipenv run bandit . + # pipenv run vulture . + pipenv run bandit -r --exclude=test . .PHONY: test test: diff --git a/README.md b/README.md index ddc8ded..1b1c8da 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # PassGen +A simple password generator command line interface. + ## Stories - [x] As a user I want to generate a random secure password to protect my personal accounts @@ -8,3 +10,65 @@ - [x] Include numbers - [x] As a user I want the generated password to be copied to the clipboard - [x] As a user I want the generated password to be saved to a file + + +## Getting Started + +These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. + + +### Installing + +Clone the project repository + +```shell +git clone https://github.com/rjNemo/pass-gen +``` + +Install dependencies + +```shell +pipenv install +``` + +Run it using: + +```shell +make cli +``` + +Find more information about available commands running + +```shell +make help +``` + +## Running the tests + +```shell +make test +``` + + +## Built With + +- [Typer](https://typer.tiangolo.com/) - Typer, build great CLIs. Easy to code. Based on Python type hints + +## Contributing + +Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. + +## Versioning + +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/rjNemo/pass-gen/tags). + +## Authors + +- **Ruidy** - _Initial work_ - [Ruidy](https://github.com/rjNemo) + +See also the list of [contributors](https://github.com/rjNemo/pass-gen/contributors) who participated in this project. + +## License + +This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details + diff --git a/app/main.py b/app/main.py index 733cdc9..76e1347 100644 --- a/app/main.py +++ b/app/main.py @@ -34,9 +34,7 @@ def main( return subprocess.run("pbcopy", universal_newlines=True, input=password) - typer.echo( - "The password has been copied to your clipboard 😉\nPaste it using cmd + v" - ) + typer.echo("The password has been copied to your clipboard 😉\nPaste it using cmd + v") if __name__ == "__main__": diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..c206218 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,13 @@ +[flake8] +exclude = .git, __pycache__, __init__.py, app/migrations/* +max-complexity = 13 +max-line-length = 100 + +[mypy] +ignore_missing_imports = True +warn_unused_configs = True +no_implicit_optional = True +warn_unused_ignores = True +warn_unreachable = True +warn_redundant_casts = True +disallow_untyped_defs=True diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/main_test.py b/test/main_test.py similarity index 91% rename from app/main_test.py rename to test/main_test.py index 9ebab17..deb040c 100644 --- a/app/main_test.py +++ b/test/main_test.py @@ -1,6 +1,8 @@ +from typing import Any + from typer.testing import CliRunner, Result -from .main import app +from app.main import app runner = CliRunner() @@ -38,7 +40,7 @@ def test_cli_can_save_to_file() -> None: assert "2yW4AcqG" in content -def _run_cli(*args) -> Result: +def _run_cli(*args: Any) -> Result: result = runner.invoke(app, ["--no-random", *args]) assert result.exit_code == 0 return result diff --git a/app/pass_gen_test.py b/test/pass_gen_test.py similarity index 96% rename from app/pass_gen_test.py rename to test/pass_gen_test.py index c845ec1..5db0c5c 100644 --- a/app/pass_gen_test.py +++ b/test/pass_gen_test.py @@ -1,5 +1,5 @@ import pytest -from .pass_gen import generate_password +from app.pass_gen import generate_password @pytest.mark.parametrize(