From c42f438c20bac08542540028048a8b897268c99f Mon Sep 17 00:00:00 2001 From: Stavros Grigoriou Date: Mon, 30 Dec 2019 18:43:35 +0200 Subject: [PATCH] 20191230 Update - Complete rework of code - Various bug-fixes - Added unit tests - CI and Coverage --- .circleci/config.yml | 33 ++++++ .gitignore | 11 +- Pipfile | 12 +++ Pipfile.lock | 38 +++++++ README.md | 44 ++------ __init__.py | 0 change.sh | 3 +- {src/defaults => defaults}/bg-saved.template | 0 {src/defaults => defaults}/config.yaml | 0 {src/defaults => defaults}/i3.template | 0 {src/defaults => defaults}/polybar.template | 0 .../defaults => defaults}/xresources.template | 0 i3wm-themer.py | 46 ++++++++ i3wmthemer/__init__.py | 0 i3wmthemer/enumeration/__init__.py | 0 i3wmthemer/enumeration/attributes.py | 84 +++++++++++++++ i3wmthemer/models/__init__.py | 0 i3wmthemer/models/abstract_theme.py | 17 +++ i3wmthemer/models/configuration.py | 98 +++++++++++++++++ i3wmthemer/models/i3.py | 52 +++++++++ i3wmthemer/models/nitrogen.py | 46 ++++++++ i3wmthemer/models/polybar.py | 98 +++++++++++++++++ i3wmthemer/models/theme.py | 34 ++++++ i3wmthemer/models/xresources.py | 101 ++++++++++++++++++ i3wmthemer/utils/__init__.py | 0 i3wmthemer/utils/backup.py | 68 ++++++++++++ i3wmthemer/utils/fileutils.py | 86 +++++++++++++++ i3wmthemer/utils/install.py | 71 ++++++++++++ install_arch.sh | 81 +++++++------- install_debian.sh | 87 +++++++-------- install_ubuntu.sh | 86 +++++++-------- runcoverage.sh | 7 ++ src/README.md | 8 -- src/backup.py | 50 --------- src/command.py | 11 -- src/config.py | 22 ---- src/config.yaml | 5 - src/fileutils.py | 7 -- src/i3wm-themer.py | 56 ---------- src/install.py | 56 ---------- src/load_json.py | 16 --- src/msgfunc.py | 31 ------ src/replace_i3.py | 22 ---- src/replace_line.py | 32 ------ src/replace_polybar.py | 41 ------- src/replace_wallpaper.py | 29 ----- src/replace_xresources.py | 28 ----- src/themes/000.json | 60 ----------- src/themes/001.json | 60 ----------- src/themes/002.json | 60 ----------- src/themes/003.json | 60 ----------- src/themes/004.json | 60 ----------- src/themes/005.json | 60 ----------- src/themes/006.json | 60 ----------- src/themes/007.json | 60 ----------- src/themes/008.json | 60 ----------- src/themes/009.json | 60 ----------- src/themes/010.json | 60 ----------- src/themes/011.json | 60 ----------- src/themes/012.json | 60 ----------- src/themes/013.json | 60 ----------- templates/README.md | 6 +- tests/__init__.py | 0 tests/enumeration/__init__.py | 0 tests/enumeration/test_attributes.py | 91 ++++++++++++++++ tests/models/__init__.py | 0 tests/models/test_i3.py | 66 ++++++++++++ tests/models/test_nitrogen.py | 51 +++++++++ tests/models/test_polybar.py | 98 +++++++++++++++++ tests/models/test_xresources.py | 99 +++++++++++++++++ tests/utils/__init__.py | 0 tests/utils/test_backup.py | 44 ++++++++ tests/utils/test_install.py | 34 ++++++ themes/000.json | 60 +++++++++++ themes/001.json | 60 +++++++++++ themes/002.json | 60 +++++++++++ themes/003.json | 60 +++++++++++ themes/004.json | 60 +++++++++++ themes/005.json | 60 +++++++++++ themes/006.json | 60 +++++++++++ themes/007.json | 60 +++++++++++ themes/008.json | 60 +++++++++++ themes/009.json | 60 +++++++++++ themes/010.json | 60 +++++++++++ themes/011.json | 60 +++++++++++ themes/012.json | 60 +++++++++++ themes/013.json | 60 +++++++++++ {src/themes => themes}/README.md | 0 {src/themes => themes}/screenshots/000.png | Bin {src/themes => themes}/screenshots/001.png | Bin {src/themes => themes}/screenshots/002.png | Bin {src/themes => themes}/screenshots/003.png | Bin {src/themes => themes}/screenshots/004.png | Bin {src/themes => themes}/screenshots/005.png | Bin {src/themes => themes}/screenshots/006.png | Bin {src/themes => themes}/screenshots/007.png | Bin {src/themes => themes}/screenshots/008.png | Bin {src/themes => themes}/screenshots/009.png | Bin {src/themes => themes}/screenshots/010.png | Bin {src/themes => themes}/screenshots/011.png | Bin {src/themes => themes}/screenshots/012.png | Bin {src/themes => themes}/screenshots/013.png | Bin {src/wallpapers => wallpapers}/000.png | Bin {src/wallpapers => wallpapers}/001.png | Bin {src/wallpapers => wallpapers}/002.png | Bin {src/wallpapers => wallpapers}/003.png | Bin {src/wallpapers => wallpapers}/004.png | Bin {src/wallpapers => wallpapers}/005.png | Bin {src/wallpapers => wallpapers}/006.png | Bin {src/wallpapers => wallpapers}/007.png | Bin {src/wallpapers => wallpapers}/008.png | Bin {src/wallpapers => wallpapers}/009.png | Bin {src/wallpapers => wallpapers}/010.png | Bin {src/wallpapers => wallpapers}/011.png | Bin {src/wallpapers => wallpapers}/012.png | Bin {src/wallpapers => wallpapers}/013.png | Bin 116 files changed, 2363 insertions(+), 1423 deletions(-) create mode 100644 .circleci/config.yml create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 __init__.py rename {src/defaults => defaults}/bg-saved.template (100%) rename {src/defaults => defaults}/config.yaml (100%) rename {src/defaults => defaults}/i3.template (100%) rename {src/defaults => defaults}/polybar.template (100%) rename {src/defaults => defaults}/xresources.template (100%) create mode 100644 i3wm-themer.py create mode 100644 i3wmthemer/__init__.py create mode 100644 i3wmthemer/enumeration/__init__.py create mode 100644 i3wmthemer/enumeration/attributes.py create mode 100644 i3wmthemer/models/__init__.py create mode 100644 i3wmthemer/models/abstract_theme.py create mode 100644 i3wmthemer/models/configuration.py create mode 100644 i3wmthemer/models/i3.py create mode 100644 i3wmthemer/models/nitrogen.py create mode 100644 i3wmthemer/models/polybar.py create mode 100644 i3wmthemer/models/theme.py create mode 100644 i3wmthemer/models/xresources.py create mode 100644 i3wmthemer/utils/__init__.py create mode 100644 i3wmthemer/utils/backup.py create mode 100644 i3wmthemer/utils/fileutils.py create mode 100644 i3wmthemer/utils/install.py create mode 100755 runcoverage.sh delete mode 100644 src/README.md delete mode 100644 src/backup.py delete mode 100644 src/command.py delete mode 100644 src/config.py delete mode 100644 src/config.yaml delete mode 100644 src/fileutils.py delete mode 100644 src/i3wm-themer.py delete mode 100644 src/install.py delete mode 100644 src/load_json.py delete mode 100644 src/msgfunc.py delete mode 100644 src/replace_i3.py delete mode 100644 src/replace_line.py delete mode 100644 src/replace_polybar.py delete mode 100644 src/replace_wallpaper.py delete mode 100644 src/replace_xresources.py delete mode 100644 src/themes/000.json delete mode 100644 src/themes/001.json delete mode 100644 src/themes/002.json delete mode 100644 src/themes/003.json delete mode 100644 src/themes/004.json delete mode 100644 src/themes/005.json delete mode 100644 src/themes/006.json delete mode 100644 src/themes/007.json delete mode 100644 src/themes/008.json delete mode 100644 src/themes/009.json delete mode 100644 src/themes/010.json delete mode 100644 src/themes/011.json delete mode 100644 src/themes/012.json delete mode 100644 src/themes/013.json create mode 100644 tests/__init__.py create mode 100644 tests/enumeration/__init__.py create mode 100644 tests/enumeration/test_attributes.py create mode 100644 tests/models/__init__.py create mode 100644 tests/models/test_i3.py create mode 100644 tests/models/test_nitrogen.py create mode 100644 tests/models/test_polybar.py create mode 100644 tests/models/test_xresources.py create mode 100644 tests/utils/__init__.py create mode 100644 tests/utils/test_backup.py create mode 100644 tests/utils/test_install.py create mode 100644 themes/000.json create mode 100644 themes/001.json create mode 100644 themes/002.json create mode 100644 themes/003.json create mode 100644 themes/004.json create mode 100644 themes/005.json create mode 100644 themes/006.json create mode 100644 themes/007.json create mode 100644 themes/008.json create mode 100644 themes/009.json create mode 100644 themes/010.json create mode 100644 themes/011.json create mode 100644 themes/012.json create mode 100644 themes/013.json rename {src/themes => themes}/README.md (100%) rename {src/themes => themes}/screenshots/000.png (100%) rename {src/themes => themes}/screenshots/001.png (100%) rename {src/themes => themes}/screenshots/002.png (100%) rename {src/themes => themes}/screenshots/003.png (100%) rename {src/themes => themes}/screenshots/004.png (100%) rename {src/themes => themes}/screenshots/005.png (100%) rename {src/themes => themes}/screenshots/006.png (100%) rename {src/themes => themes}/screenshots/007.png (100%) rename {src/themes => themes}/screenshots/008.png (100%) rename {src/themes => themes}/screenshots/009.png (100%) rename {src/themes => themes}/screenshots/010.png (100%) rename {src/themes => themes}/screenshots/011.png (100%) rename {src/themes => themes}/screenshots/012.png (100%) rename {src/themes => themes}/screenshots/013.png (100%) rename {src/wallpapers => wallpapers}/000.png (100%) rename {src/wallpapers => wallpapers}/001.png (100%) rename {src/wallpapers => wallpapers}/002.png (100%) rename {src/wallpapers => wallpapers}/003.png (100%) rename {src/wallpapers => wallpapers}/004.png (100%) rename {src/wallpapers => wallpapers}/005.png (100%) rename {src/wallpapers => wallpapers}/006.png (100%) rename {src/wallpapers => wallpapers}/007.png (100%) rename {src/wallpapers => wallpapers}/008.png (100%) rename {src/wallpapers => wallpapers}/009.png (100%) rename {src/wallpapers => wallpapers}/010.png (100%) rename {src/wallpapers => wallpapers}/011.png (100%) rename {src/wallpapers => wallpapers}/012.png (100%) rename {src/wallpapers => wallpapers}/013.png (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..58723389 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,33 @@ +version: 2 +jobs: + build: + working_directory: ~/i3wm-themer + docker: + - image: circleci/python:3.6.4 + steps: + - checkout + - run: sudo chown -R circleci:circleci /usr/local/bin + - run: sudo chown -R circleci:circleci /usr/local/lib/python3.6/site-packages + - restore_cache: + key: deps10-{{ .Branch }}-{{ checksum "Pipfile.lock" }} + - run: + name: Setup testing environment + command: | + pip install coverage --user + pip install pytest --user + pip install -r requirements.txt + echo $HOME + - save_cache: + key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} + paths: + - ".venv" + - "/usr/local/bin" + - "/usr/local/lib/python3.6/site-packages" + - run: + name: Running tests + command: | + $HOME/.local/bin/coverage run -m pytest + $HOME/.local/bin/coverage report --include="i3wmthemer/*" + $HOME/.local/bin/coverage html + - store_artifacts: + path: htmlcov diff --git a/.gitignore b/.gitignore index 7f316a4d..4cfeadb3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,9 @@ -src/__pycache__ -src/*.pyc +test-reports/ +.pytest_cache/ +*__pycache__ +*.pyc +.idea/ +*.iml +./*.png +./*.jpg +.coverage diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..e5a18092 --- /dev/null +++ b/Pipfile @@ -0,0 +1,12 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +PyYAML = "==5.1" + +[requires] +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..be1eadb7 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,38 @@ +{ + "_meta": { + "hash": { + "sha256": "5556f4ae619d1b6aee3fb1082beca51e892dfaea4922d4ecbaf22b3f1b5a2c01" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "2.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "index": "pypi", + "version": "==3.13" + } + }, + "develop": {} +} diff --git a/README.md b/README.md index 4e149d41..277b9671 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,16 @@ -

i3wm-themer

+

i3wm-themer

+ +![](https://img.shields.io/circleci/build/github/unix121/i3wm-themer/master) +![](https://img.shields.io/codacy/coverage/79aa404309114b25bdc87f00107a0b94/master) +![](https://img.shields.io/codacy/grade/79aa404309114b25bdc87f00107a0b94/master) +![](https://img.shields.io/github/last-commit/unix121/i3wm-themer/master) +![](https://img.shields.io/github/license/unix121/i3wm-themer) -

Update [April 4, 2018]

- -

Why?