From 5a8ace63c4fe0dcc494d12fe064828c43e13c269 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 14:55:28 +0200 Subject: [PATCH 01/20] Moving to the new flower layout https://kivy.org/doc/stable/api-kivy.garden.html#update-to-garden-structure --- __init__.py => src/kivy_garden/xcamera/__init__.py | 0 android_api.py => src/kivy_garden/xcamera/android_api.py | 0 platform_api.py => src/kivy_garden/xcamera/platform_api.py | 0 {example => src}/main.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename __init__.py => src/kivy_garden/xcamera/__init__.py (100%) rename android_api.py => src/kivy_garden/xcamera/android_api.py (100%) rename platform_api.py => src/kivy_garden/xcamera/platform_api.py (100%) rename {example => src}/main.py (100%) diff --git a/__init__.py b/src/kivy_garden/xcamera/__init__.py similarity index 100% rename from __init__.py rename to src/kivy_garden/xcamera/__init__.py diff --git a/android_api.py b/src/kivy_garden/xcamera/android_api.py similarity index 100% rename from android_api.py rename to src/kivy_garden/xcamera/android_api.py diff --git a/platform_api.py b/src/kivy_garden/xcamera/platform_api.py similarity index 100% rename from platform_api.py rename to src/kivy_garden/xcamera/platform_api.py diff --git a/example/main.py b/src/main.py similarity index 100% rename from example/main.py rename to src/main.py From 4d3039b1279a701efbe39d2d44395ca467384cd2 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:02:19 +0200 Subject: [PATCH 02/20] Migrates to new import path --- .gitignore | 3 +++ README.md | 7 +++++-- src/kivy_garden/xcamera/__init__.py | 2 +- src/main.py | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 72364f9..5aa99e0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Custom +*.swp + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/README.md b/README.md index 17aa28a..db28ecb 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,9 @@ Notes: requests are welcome :) ## Install +```sh +pip install xcamera ``` -garden install xcamera -``` + +## Demo +A full working demo is available in [src/main.py](https://github.com/kivy-garden/xcamera/blob/master/src/main.py). diff --git a/src/kivy_garden/xcamera/__init__.py b/src/kivy_garden/xcamera/__init__.py index a9f0d4d..9453312 100644 --- a/src/kivy_garden/xcamera/__init__.py +++ b/src/kivy_garden/xcamera/__init__.py @@ -21,7 +21,7 @@ def darker(color, factor=0.5): return r, g, b, a kv = """ -#:import xcamera kivy.garden.xcamera +#:import xcamera kivy_garden.xcamera icon_color: (0, 0, 0, 1) diff --git a/src/main.py b/src/main.py index b12bb28..d742d96 100644 --- a/src/main.py +++ b/src/main.py @@ -3,7 +3,7 @@ from kivy.app import App kv = """ -#:import XCamera kivy.garden.xcamera.XCamera +#:import XCamera kivy_garden.xcamera.XCamera FloatLayout: orientation: 'vertical' From c41ba6e1abdc2a40d0ec98543d92ec39e61de1aa Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:07:13 +0200 Subject: [PATCH 03/20] Setup TravisCI, fixes #1 First build should fail as nothing is ready. Next up is setting up `tox`, `requirements.txt`. Then fixing the linter. --- .travis.yml | 6 ++++++ CHANGELOG.md | 5 +++++ README.md | 3 +++ 3 files changed, 14 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8bad07c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +sudo: false +language: python +python: + - "3.6" +install: pip install tox-travis +script: tox diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fec422..078d3df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## [Unreleased] + + - Move to new garden layout + - Setup Continuous Integration testing, refs #1 + ## [20190910] - Initial release before revamp diff --git a/README.md b/README.md index db28ecb..c551e28 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # XCamera: Android-optimized camera widget +[![Build Status](https://travis-ci.com/kivy-garden/xcamera.svg?branch=develop)](https://travis-ci.com/kivy-garden/xcamera) +[![PyPI version](https://badge.fury.io/py/xcamera.svg)](https://badge.fury.io/py/xcamera) + XCamera is a widget which extends the standard Kivy Camera widget with more functionality. In particular: From c68e20cb926c53fe874a8bdbb772253a17407d5b Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:12:24 +0200 Subject: [PATCH 04/20] Setup linting, fixes #2 Build should fail as we're not yet PEP8 compliant. --- CHANGELOG.md | 1 + requirements.txt | 1 + requirements/requirements-test.txt | 2 ++ tox.ini | 16 ++++++++++++++++ 4 files changed, 20 insertions(+) create mode 100644 requirements.txt create mode 100644 requirements/requirements-test.txt create mode 100644 tox.ini diff --git a/CHANGELOG.md b/CHANGELOG.md index 078d3df..e20398e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Move to new garden layout - Setup Continuous Integration testing, refs #1 + - Setup linting, refs #2 ## [20190910] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..46d9186 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Kivy==1.11.1 diff --git a/requirements/requirements-test.txt b/requirements/requirements-test.txt new file mode 100644 index 0000000..8c85301 --- /dev/null +++ b/requirements/requirements-test.txt @@ -0,0 +1,2 @@ +flake8 +isort diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..ec3c865 --- /dev/null +++ b/tox.ini @@ -0,0 +1,16 @@ +[tox] +envlist = pep8,isort-check +# no setup.py to be ran +skipsdist = True + +[testenv] +deps = + -r{toxinidir}/requirements.txt + -r{toxinidir}/requirements/requirements-test.txt + +[testenv:pep8] +commands = flake8 src/ setup.py setup_meta.py + +[testenv:isort-check] +commands = + isort --check-only --recursive --diff src/ setup.py setup_meta.py From db2ed659978754f00ee67e72ef6e14965cff7948 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:15:13 +0200 Subject: [PATCH 05/20] Isort fixes ``` isort -rc src/ ``` --- src/kivy_garden/xcamera/__init__.py | 13 +++++++------ src/kivy_garden/xcamera/android_api.py | 4 +++- src/kivy_garden/xcamera/platform_api.py | 2 ++ src/main.py | 3 ++- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/kivy_garden/xcamera/__init__.py b/src/kivy_garden/xcamera/__init__.py index 9453312..8bec3d3 100644 --- a/src/kivy_garden/xcamera/__init__.py +++ b/src/kivy_garden/xcamera/__init__.py @@ -1,14 +1,16 @@ from __future__ import absolute_import -import os import datetime +import os + from kivy.lang import Builder -from kivy.uix.camera import Camera -from kivy.uix.label import Label -from kivy.uix.behaviors import ButtonBehavior from kivy.properties import ObjectProperty from kivy.resources import resource_add_path -from .platform_api import take_picture, set_orientation, LANDSCAPE +from kivy.uix.behaviors import ButtonBehavior +from kivy.uix.camera import Camera +from kivy.uix.label import Label + +from .platform_api import LANDSCAPE, set_orientation, take_picture ROOT = os.path.dirname(os.path.abspath(__file__)) resource_add_path(ROOT) @@ -97,4 +99,3 @@ def force_landscape(self): def restore_orientation(self): if self._previous_orientation is not None: set_orientation(self._previous_orientation) - diff --git a/src/kivy_garden/xcamera/android_api.py b/src/kivy_garden/xcamera/android_api.py index ee0ad33..c750cdd 100644 --- a/src/kivy_garden/xcamera/android_api.py +++ b/src/kivy_garden/xcamera/android_api.py @@ -1,7 +1,9 @@ from __future__ import absolute_import -from jnius import autoclass, PythonJavaClass, java_method, JavaException + from kivy.logger import Logger +from jnius import JavaException, PythonJavaClass, autoclass, java_method + Camera = autoclass('android.hardware.Camera') AndroidActivityInfo = autoclass('android.content.pm.ActivityInfo') AndroidPythonActivity = autoclass('org.renpy.android.PythonActivity') diff --git a/src/kivy_garden/xcamera/platform_api.py b/src/kivy_garden/xcamera/platform_api.py index 1e8df22..8a4af3b 100644 --- a/src/kivy_garden/xcamera/platform_api.py +++ b/src/kivy_garden/xcamera/platform_api.py @@ -1,6 +1,8 @@ from __future__ import absolute_import + from kivy.utils import platform + def play_shutter(): # bah, apparently we need to delay the import of kivy.core.audio, lese # kivy cannot find a camera provider, at lease on linux. Maybe a diff --git a/src/main.py b/src/main.py index d742d96..5ad2435 100644 --- a/src/main.py +++ b/src/main.py @@ -1,6 +1,7 @@ import datetime -from kivy.lang import Builder + from kivy.app import App +from kivy.lang import Builder kv = """ #:import XCamera kivy_garden.xcamera.XCamera From 49c3af7cedc7eb57a251028bc3d026d1cc98b5fb Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:21:12 +0200 Subject: [PATCH 06/20] flake8 fixes --- src/kivy_garden/xcamera/__init__.py | 3 +++ src/kivy_garden/xcamera/android_api.py | 3 +++ src/kivy_garden/xcamera/platform_api.py | 2 +- src/main.py | 3 +-- tox.ini | 5 +++++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/kivy_garden/xcamera/__init__.py b/src/kivy_garden/xcamera/__init__.py index 8bec3d3..be13b71 100644 --- a/src/kivy_garden/xcamera/__init__.py +++ b/src/kivy_garden/xcamera/__init__.py @@ -15,6 +15,7 @@ ROOT = os.path.dirname(os.path.abspath(__file__)) resource_add_path(ROOT) + def darker(color, factor=0.5): r, g, b, a = color r *= factor @@ -22,6 +23,7 @@ def darker(color, factor=0.5): b *= factor return r, g, b, a + kv = """ #:import xcamera kivy_garden.xcamera @@ -67,6 +69,7 @@ def darker(color, factor=0.5): """ Builder.load_string(kv) + class XCameraIconButton(ButtonBehavior, Label): pass diff --git a/src/kivy_garden/xcamera/android_api.py b/src/kivy_garden/xcamera/android_api.py index c750cdd..d11618a 100644 --- a/src/kivy_garden/xcamera/android_api.py +++ b/src/kivy_garden/xcamera/android_api.py @@ -8,6 +8,7 @@ AndroidActivityInfo = autoclass('android.content.pm.ActivityInfo') AndroidPythonActivity = autoclass('org.renpy.android.PythonActivity') + class ShutterCallback(PythonJavaClass): __javainterfaces__ = ('android.hardware.Camera$ShutterCallback', ) @@ -77,10 +78,12 @@ def take_picture(camera_widget, filename, on_success): PORTRAIT = AndroidActivityInfo.SCREEN_ORIENTATION_PORTRAIT LANDSCAPE = AndroidActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + def set_orientation(value): previous = get_orientation() AndroidPythonActivity.mActivity.setRequestedOrientation(value) return previous + def get_orientation(): return AndroidPythonActivity.mActivity.getRequestedOrientation() diff --git a/src/kivy_garden/xcamera/platform_api.py b/src/kivy_garden/xcamera/platform_api.py index 8a4af3b..56ac6bb 100644 --- a/src/kivy_garden/xcamera/platform_api.py +++ b/src/kivy_garden/xcamera/platform_api.py @@ -13,7 +13,7 @@ def play_shutter(): if platform == 'android': - from .android_api import * + from .android_api import * # noqa: F401, F403 else: diff --git a/src/main.py b/src/main.py index 5ad2435..e192666 100644 --- a/src/main.py +++ b/src/main.py @@ -1,5 +1,3 @@ -import datetime - from kivy.app import App from kivy.lang import Builder @@ -35,5 +33,6 @@ def build(self): def picture_taken(self, obj, filename): print('Picture taken and saved to {}'.format(filename)) + if __name__ == '__main__': CameraApp().run() diff --git a/tox.ini b/tox.ini index ec3c865..16d2f6d 100644 --- a/tox.ini +++ b/tox.ini @@ -14,3 +14,8 @@ commands = flake8 src/ setup.py setup_meta.py [testenv:isort-check] commands = isort --check-only --recursive --diff src/ setup.py setup_meta.py + + +[flake8] +ignore = + E501, # Line too long (82 > 79 characters) From 14b92a0b1ad841f969c44a5d3ed2414210ced82a Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:25:15 +0200 Subject: [PATCH 07/20] Explicit import --- src/kivy_garden/xcamera/android_api.py | 6 ++---- src/kivy_garden/xcamera/platform_api.py | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/kivy_garden/xcamera/android_api.py b/src/kivy_garden/xcamera/android_api.py index d11618a..65d58f4 100644 --- a/src/kivy_garden/xcamera/android_api.py +++ b/src/kivy_garden/xcamera/android_api.py @@ -7,6 +7,8 @@ Camera = autoclass('android.hardware.Camera') AndroidActivityInfo = autoclass('android.content.pm.ActivityInfo') AndroidPythonActivity = autoclass('org.renpy.android.PythonActivity') +PORTRAIT = AndroidActivityInfo.SCREEN_ORIENTATION_PORTRAIT +LANDSCAPE = AndroidActivityInfo.SCREEN_ORIENTATION_LANDSCAPE class ShutterCallback(PythonJavaClass): @@ -75,10 +77,6 @@ def take_picture(camera_widget, filename, on_success): Logger.info('Error when calling autofocus: {}'.format(e)) -PORTRAIT = AndroidActivityInfo.SCREEN_ORIENTATION_PORTRAIT -LANDSCAPE = AndroidActivityInfo.SCREEN_ORIENTATION_LANDSCAPE - - def set_orientation(value): previous = get_orientation() AndroidPythonActivity.mActivity.setRequestedOrientation(value) diff --git a/src/kivy_garden/xcamera/platform_api.py b/src/kivy_garden/xcamera/platform_api.py index 56ac6bb..fbf9c57 100644 --- a/src/kivy_garden/xcamera/platform_api.py +++ b/src/kivy_garden/xcamera/platform_api.py @@ -13,7 +13,8 @@ def play_shutter(): if platform == 'android': - from .android_api import * # noqa: F401, F403 + from .android_api import ( + LANDSCAPE, PORTRAIT, take_picture, set_orientation, get_orientation) else: From 9d79bd391e67d96f32b86a7762b7f2094a17e9f9 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 15:50:09 +0200 Subject: [PATCH 08/20] Testing via Docker Fixes TravisCI missing a lot of system dependencies. Helps with test isolation. --- .travis.yml | 31 ++++++++++++++---- CHANGELOG.md | 1 + dockerfiles/Dockerfile-linux | 62 ++++++++++++++++++++++++++++++++++++ dockerfiles/start.sh | 10 ++++++ 4 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 dockerfiles/Dockerfile-linux create mode 100755 dockerfiles/start.sh diff --git a/.travis.yml b/.travis.yml index 8bad07c..763bf0c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,25 @@ -sudo: false -language: python -python: - - "3.6" -install: pip install tox-travis -script: tox +sudo: required + +language: generic + +services: + - docker + +env: + global: + - DISPLAY=:99.0 + matrix: + - TAG=zbarcam-linux DOCKERFILE=dockerfiles/Dockerfile-linux COMMAND='tox' + +before_install: + - sudo apt update -qq > /dev/null + - sudo apt install --yes --no-install-recommends xvfb + +install: + - docker build --tag=$TAG --file=$DOCKERFILE --build-arg CI . + +before_script: + - sh -e /etc/init.d/xvfb start + +script: + - travis_wait docker run -e DISPLAY -e CI -v /tmp/.X11-unix:/tmp/.X11-unix $TAG $COMMAND diff --git a/CHANGELOG.md b/CHANGELOG.md index e20398e..6e5fb22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [Unreleased] - Move to new garden layout + - Setup Docker testing - Setup Continuous Integration testing, refs #1 - Setup linting, refs #2 diff --git a/dockerfiles/Dockerfile-linux b/dockerfiles/Dockerfile-linux new file mode 100644 index 0000000..b8cef3e --- /dev/null +++ b/dockerfiles/Dockerfile-linux @@ -0,0 +1,62 @@ +# Docker image for installing dependencies on Linux and running tests. +# Build with: +# docker build --tag=xcamera-linux --file=dockerfiles/Dockerfile-linux . +# Run with: +# docker run xcamera-linux /bin/sh -c 'make test' +# Or using the entry point shortcut: +# docker run xcamera-linux 'make test' +# For running UI: +# xhost +"local:docker@" +# docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix xcamera-linux 'make uitest' +# Or for interactive shell: +# docker run -it --rm xcamera-linux +FROM ubuntu:18.04 + +ENV USER="user" +ENV HOME_DIR="/home/${USER}" +ENV WORK_DIR="${HOME_DIR}" + +# configure locale +RUN apt update -qq > /dev/null && apt install --yes --no-install-recommends \ + locales && \ + locale-gen en_US.UTF-8 +ENV LANG="en_US.UTF-8" \ + LANGUAGE="en_US.UTF-8" \ + LC_ALL="en_US.UTF-8" + +# install system dependencies +RUN apt install --yes --no-install-recommends \ + build-essential \ + ccache \ + cmake \ + curl \ + libsdl2-dev \ + libsdl2-image-dev \ + libsdl2-mixer-dev \ + libsdl2-ttf-dev \ + libpython3.6-dev \ + libpython3.7-dev \ + libzbar-dev \ + lsb-release \ + make \ + pkg-config \ + python3.6 \ + python3.6-dev \ + python3.7 \ + python3.7-dev \ + sudo \ + tox \ + virtualenv + +# prepare non root env +RUN useradd --create-home --shell /bin/bash ${USER} +# with sudo access and no password +RUN usermod -append --groups sudo ${USER} +RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + +USER ${USER} +WORKDIR ${WORK_DIR} +COPY . ${WORK_DIR} + +# RUN make +ENTRYPOINT ["./dockerfiles/start.sh"] diff --git a/dockerfiles/start.sh b/dockerfiles/start.sh new file mode 100755 index 0000000..bdc4a52 --- /dev/null +++ b/dockerfiles/start.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +# if a some command has been passed to container, executes it and exit, +# otherwise runs bash +if [[ $@ ]]; then + eval $@ +else + /bin/bash +fi From 29312abcf0acec9a12db60ce18db014f1a4bf229 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 17:09:02 +0200 Subject: [PATCH 09/20] Introduces Makefile, fixes #8 Provides a lot of targets to get the project setup, run test & publish. --- CHANGELOG.md | 1 + Makefile | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 15 ++++++++++ 3 files changed, 99 insertions(+) create mode 100644 Makefile diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e5fb22..69ddd5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Setup Docker testing - Setup Continuous Integration testing, refs #1 - Setup linting, refs #2 + - Introduce `Makefile`, refs #8 ## [20190910] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0ecaf9f --- /dev/null +++ b/Makefile @@ -0,0 +1,83 @@ +VENV_NAME=venv +PIP=$(VENV_NAME)/bin/pip +TOX=`which tox` +GARDEN=$(VENV_NAME)/bin/garden +PYTHON=$(VENV_NAME)/bin/python +ISORT=$(VENV_NAME)/bin/isort +FLAKE8=$(VENV_NAME)/bin/flake8 +TWINE=`which twine` +SOURCES=src/ setup.py setup_meta.py +# using full path so it can be used outside the root dir +SPHINXBUILD=$(shell realpath venv/bin/sphinx-build) +DOCS_DIR=doc +SYSTEM_DEPENDENCIES= \ + libpython$(PYTHON_VERSION)-dev \ + libsdl2-dev \ + libzbar-dev \ + tox \ + virtualenv +OS=$(shell lsb_release -si) +PYTHON_MAJOR_VERSION=3 +PYTHON_MINOR_VERSION=6 +PYTHON_VERSION=$(PYTHON_MAJOR_VERSION).$(PYTHON_MINOR_VERSION) +PYTHON_WITH_VERSION=python$(PYTHON_VERSION) + + +all: system_dependencies virtualenv + +venv: + test -d venv || virtualenv -p $(PYTHON_WITH_VERSION) venv + +virtualenv: venv + $(PIP) install Cython==0.28.6 + $(PIP) install -r requirements.txt + $(GARDEN) install xcamera + +system_dependencies: +ifeq ($(OS), Ubuntu) + sudo apt install --yes --no-install-recommends $(SYSTEM_DEPENDENCIES) +endif + +run/linux: virtualenv + $(PYTHON) src/main.py + +run: run/linux + +test: + $(TOX) + +lint/isort-check: virtualenv + $(ISORT) --check-only --recursive --diff $(SOURCES) + +lint/isort-fix: virtualenv + $(ISORT) --recursive $(SOURCES) + +lint/flake8: virtualenv + $(FLAKE8) $(SOURCES) + +lint: lint/isort-check lint/flake8 + +docs/clean: + rm -rf $(DOCS_DIR)/build/ + +docs: + cd $(DOCS_DIR) && SPHINXBUILD=$(SPHINXBUILD) make html + +release/clean: + rm -rf dist/ build/ + +release/build: release/clean + $(PYTHON) setup.py sdist bdist_wheel + $(PYTHON) setup_meta.py sdist bdist_wheel + $(TWINE) check dist/* + +release/upload: + $(TWINE) upload dist/* + +clean: release/clean docs/clean + py3clean src/ + find . -type d -name "__pycache__" -exec rm -r {} + + find . -type d -name "*.egg-info" -exec rm -r {} + + +clean/all: clean + rm -rf $(VENV_NAME) .tox/ diff --git a/README.md b/README.md index c551e28..fdf81e2 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ functionality. In particular: was before. Screenshot: + ![screenshot](/screenshot.png?raw=True "Screenshot") Notes: @@ -41,3 +42,17 @@ pip install xcamera ## Demo A full working demo is available in [src/main.py](https://github.com/kivy-garden/xcamera/blob/master/src/main.py). +You can run it via: +```sh +make run +``` + +## Contribute +To play with the project, install system dependencies and Python requirements using the [Makefile](Makefile). +```sh +make +``` +Then verify everything is OK by running tests. +```sh +make test +``` From 7496116ac43d41ffd64a6cdb6ac3f3d29857ab8a Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 17:24:18 +0200 Subject: [PATCH 10/20] Adds missing opencv-python req --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 46d9186..e893041 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ Kivy==1.11.1 +opencv-python==4.1.1.26 From 34bc61dcfc579885120a36c3810891c8b2dbe6f3 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 17:40:16 +0200 Subject: [PATCH 11/20] Adds .dockerignore file --- .dockerignore | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..38d67d5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +bin/ +venv/ +.git/ +.buildozer/ +.pytest_cache/ +.tox/ From 191e8839bca519b92c112967ff8e3067967cb951 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 18:23:25 +0200 Subject: [PATCH 12/20] Adds simple unit test example, fixes #3 --- CHANGELOG.md | 1 + Makefile | 4 +++- requirements/requirements-test.txt | 1 + tests/kivy_garden/xcamera/test_platform_api.py | 13 +++++++++++++ tox.ini | 5 ++++- 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 tests/kivy_garden/xcamera/test_platform_api.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 69ddd5c..7c0f768 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Setup Docker testing - Setup Continuous Integration testing, refs #1 - Setup linting, refs #2 + - Adds basic unit tests, refs #3 - Introduce `Makefile`, refs #8 ## [20190910] diff --git a/Makefile b/Makefile index 0ecaf9f..ca0d7ab 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,9 @@ venv: virtualenv: venv $(PIP) install Cython==0.28.6 $(PIP) install -r requirements.txt - $(GARDEN) install xcamera + +virtualenv/test: virtualenv + $(PIP) install -r requirements/requirements-test.txt system_dependencies: ifeq ($(OS), Ubuntu) diff --git a/requirements/requirements-test.txt b/requirements/requirements-test.txt index 8c85301..7424ff6 100644 --- a/requirements/requirements-test.txt +++ b/requirements/requirements-test.txt @@ -1,2 +1,3 @@ flake8 isort +pytest diff --git a/tests/kivy_garden/xcamera/test_platform_api.py b/tests/kivy_garden/xcamera/test_platform_api.py new file mode 100644 index 0000000..21e09e1 --- /dev/null +++ b/tests/kivy_garden/xcamera/test_platform_api.py @@ -0,0 +1,13 @@ +from unittest import mock +from kivy_garden.xcamera import platform_api + + +class TestPlatformAPI: + """ + Tests `platform_api` module. + """ + + def test_play_shutter(self): + with mock.patch('kivy.core.audio.audio_sdl2.SoundSDL2.play') as m_play: + platform_api.play_shutter() + assert m_play.call_args_list == [mock.call()] diff --git a/tox.ini b/tox.ini index 16d2f6d..076b661 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,15 @@ [tox] -envlist = pep8,isort-check +envlist = pep8,isort-check,py36 # no setup.py to be ran skipsdist = True [testenv] +setenv = + PYTHONPATH = {toxinidir}/src/ deps = -r{toxinidir}/requirements.txt -r{toxinidir}/requirements/requirements-test.txt +commands = pytest tests/ [testenv:pep8] commands = flake8 src/ setup.py setup_meta.py From 5b47252aaf15c6c1873ed1f28944e3bf128921ed Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 18:35:56 +0200 Subject: [PATCH 13/20] test_take_picture, refs #3 --- Makefile | 2 +- tests/kivy_garden/xcamera/test_platform_api.py | 14 +++++++++++++- tox.ini | 4 ++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index ca0d7ab..ebc4ae5 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ PYTHON=$(VENV_NAME)/bin/python ISORT=$(VENV_NAME)/bin/isort FLAKE8=$(VENV_NAME)/bin/flake8 TWINE=`which twine` -SOURCES=src/ setup.py setup_meta.py +SOURCES=src/ tests/ setup.py setup_meta.py # using full path so it can be used outside the root dir SPHINXBUILD=$(shell realpath venv/bin/sphinx-build) DOCS_DIR=doc diff --git a/tests/kivy_garden/xcamera/test_platform_api.py b/tests/kivy_garden/xcamera/test_platform_api.py index 21e09e1..62dbed6 100644 --- a/tests/kivy_garden/xcamera/test_platform_api.py +++ b/tests/kivy_garden/xcamera/test_platform_api.py @@ -1,4 +1,5 @@ from unittest import mock + from kivy_garden.xcamera import platform_api @@ -10,4 +11,15 @@ class TestPlatformAPI: def test_play_shutter(self): with mock.patch('kivy.core.audio.audio_sdl2.SoundSDL2.play') as m_play: platform_api.play_shutter() - assert m_play.call_args_list == [mock.call()] + assert m_play.mock_calls == [mock.call()] + + def test_take_picture(self): + m_camera_widget = mock.Mock() + filename = 'filename.png' + m_on_success = mock.Mock() + with mock.patch.object(platform_api, 'play_shutter') as m_play_shutter: + platform_api.take_picture(m_camera_widget, filename, m_on_success) + assert m_play_shutter.mock_calls == [mock.call()] + assert m_camera_widget.mock_calls == [ + mock.call.texture.save(filename, flipped=False)] + assert m_on_success.mock_calls == [mock.call(filename)] diff --git a/tox.ini b/tox.ini index 076b661..7622c6f 100644 --- a/tox.ini +++ b/tox.ini @@ -12,11 +12,11 @@ deps = commands = pytest tests/ [testenv:pep8] -commands = flake8 src/ setup.py setup_meta.py +commands = flake8 src/ tests/ setup.py setup_meta.py [testenv:isort-check] commands = - isort --check-only --recursive --diff src/ setup.py setup_meta.py + isort --check-only --recursive --diff src/ tests/ setup.py setup_meta.py [flake8] From bd5f024e26d14bee232ed7d33aed31505fee0bfa Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 18:39:41 +0200 Subject: [PATCH 14/20] test_set_orientation and test_get_orientation, refs #3 --- CHANGELOG.md | 2 +- tests/kivy_garden/xcamera/test_platform_api.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c0f768..d36b792 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ - Setup Docker testing - Setup Continuous Integration testing, refs #1 - Setup linting, refs #2 - - Adds basic unit tests, refs #3 + - Unit tests `platform_api` module, refs #3 - Introduce `Makefile`, refs #8 ## [20190910] diff --git a/tests/kivy_garden/xcamera/test_platform_api.py b/tests/kivy_garden/xcamera/test_platform_api.py index 62dbed6..5c6bffe 100644 --- a/tests/kivy_garden/xcamera/test_platform_api.py +++ b/tests/kivy_garden/xcamera/test_platform_api.py @@ -23,3 +23,13 @@ def test_take_picture(self): assert m_camera_widget.mock_calls == [ mock.call.texture.save(filename, flipped=False)] assert m_on_success.mock_calls == [mock.call(filename)] + + def test_set_orientation(self): + value = platform_api.LANDSCAPE + assert platform_api.set_orientation(value) == platform_api.PORTRAIT + assert platform_api.set_orientation(value) == platform_api.LANDSCAPE + + def test_get_orientation(self): + value = platform_api.LANDSCAPE + platform_api.set_orientation(value) + assert platform_api.get_orientation() == value From 4b9dd8fba186db0755d699444f96a225e5b0b825 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 19:23:07 +0200 Subject: [PATCH 15/20] Prepares setup and layout for PyPI, refs #4 --- CHANGELOG.md | 2 +- setup.py | 37 +++++++++ setup_meta.py | 14 ++++ src/kivy_garden/xcamera/__init__.py | 115 ++++------------------------ src/kivy_garden/xcamera/version.py | 2 + src/kivy_garden/xcamera/xcamera.py | 104 +++++++++++++++++++++++++ src/main.py | 0 7 files changed, 171 insertions(+), 103 deletions(-) create mode 100644 setup.py create mode 100644 setup_meta.py create mode 100644 src/kivy_garden/xcamera/version.py create mode 100644 src/kivy_garden/xcamera/xcamera.py mode change 100644 => 100755 src/main.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d36b792..63cf8fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,6 @@ - Unit tests `platform_api` module, refs #3 - Introduce `Makefile`, refs #8 -## [20190910] +## [2019.0910] - Initial release before revamp diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..9ad21c2 --- /dev/null +++ b/setup.py @@ -0,0 +1,37 @@ +import os + +from setuptools import find_namespace_packages, setup + +from src.kivy_garden.xcamera import version + + +def read(fname): + with open(os.path.join(os.path.dirname(__file__), fname)) as f: + return f.read() + + +# exposing the params so it can be imported +setup_params = { + 'name': 'kivy_garden.xcamera', + 'version': version.__version__, + 'description': 'Real time Barcode and QR Code scanner Edit', + 'long_description': read('README.md'), + 'long_description_content_type': 'text/markdown', + 'author': 'Antonio Cuni', + 'url': 'https://github.com/kivy-garden/garden.xcamera', + 'packages': find_namespace_packages(where='src'), + 'package_data': {'kivy_garden.xcamera': ['*.kv']}, + 'package_dir': {'': 'src'}, + 'install_requires': [ + 'kivy', + ], +} + + +def run_setup(): + setup(**setup_params) + + +# makes sure the setup doesn't run at import time +if __name__ == '__main__': + run_setup() diff --git a/setup_meta.py b/setup_meta.py new file mode 100644 index 0000000..9d6029c --- /dev/null +++ b/setup_meta.py @@ -0,0 +1,14 @@ +""" +Creates a distribution alias that just installs kivy_garden.xcamera. +""" +from setuptools import setup + +from setup import setup_params + +setup_params.update({ + 'install_requires': ['kivy_garden.xcamera'], + 'name': 'xcamera', +}) + + +setup(**setup_params) diff --git a/src/kivy_garden/xcamera/__init__.py b/src/kivy_garden/xcamera/__init__.py index be13b71..e2c5931 100644 --- a/src/kivy_garden/xcamera/__init__.py +++ b/src/kivy_garden/xcamera/__init__.py @@ -1,104 +1,15 @@ -from __future__ import absolute_import - -import datetime -import os - -from kivy.lang import Builder -from kivy.properties import ObjectProperty -from kivy.resources import resource_add_path -from kivy.uix.behaviors import ButtonBehavior -from kivy.uix.camera import Camera -from kivy.uix.label import Label - -from .platform_api import LANDSCAPE, set_orientation, take_picture - -ROOT = os.path.dirname(os.path.abspath(__file__)) -resource_add_path(ROOT) - - -def darker(color, factor=0.5): - r, g, b, a = color - r *= factor - g *= factor - b *= factor - return r, g, b, a - - -kv = """ -#:import xcamera kivy_garden.xcamera - - - icon_color: (0, 0, 0, 1) - _down_color: xcamera.darker(self.icon_color) - icon_size: dp(50) - - canvas.before: - Color: - rgba: self.icon_color if self.state == 'normal' else self._down_color - Ellipse: - pos: self.pos - size: self.size - - size_hint: None, None - size: self.icon_size, self.icon_size - font_size: self.icon_size/2 - - -: - # \ue800 corresponds to the camera icon in the font - icon: u"[font=data/xcamera/icons.ttf]\ue800[/font]" - icon_color: (0.13, 0.58, 0.95, 0.8) - icon_size: dp(70) - - id: camera - resolution: 640, 480 # 1920, 1080 - allow_stretch: True - - # Shoot button - XCameraIconButton: - id: shoot_button - markup: True - text: root.icon - icon_color: root.icon_color - icon_size: root.icon_size - on_release: root.shoot() - - # position - right: root.width - dp(10) - center_y: root.center_y """ -Builder.load_string(kv) - - -class XCameraIconButton(ButtonBehavior, Label): - pass - - -class XCamera(Camera): - directory = ObjectProperty(None) - _previous_orientation = None - __events__ = ('on_picture_taken',) - - def on_picture_taken(self, filename): - """ - This event is fired every time a picture has been taken - """ - - def get_filename(self): - return datetime.datetime.now().strftime('%Y-%m-%d %H.%M.%S.jpg') - - def shoot(self): - def on_success(filename): - self.dispatch('on_picture_taken', filename) - # - filename = self.get_filename() - if self.directory: - filename = os.path.join(self.directory, filename) - take_picture(self, filename, on_success) - - def force_landscape(self): - self._previous_orientation = set_orientation(LANDSCAPE) +Exposes `XCamera` directly in `xcamera` rather than `xcamera.xcamera`. +Also note this may break `pip` since all imports within `xcamera.py` would be +required at setup time. This is because `version.py` (same directory) is used +by the `setup.py` file. +Hence we're not exposing `XCamera` if `pip` is detected. +""" +import os - def restore_orientation(self): - if self._previous_orientation is not None: - set_orientation(self._previous_orientation) +project_dir = os.path.abspath( + os.path.join(__file__, os.pardir, os.pardir, os.pardir, os.pardir)) +using_pip = os.path.basename(project_dir).startswith('pip-') +# only exposes `XCamera` if not within `pip` ongoing install +if not using_pip: + from .xcamera import XCamera # noqa diff --git a/src/kivy_garden/xcamera/version.py b/src/kivy_garden/xcamera/version.py new file mode 100644 index 0000000..140c96b --- /dev/null +++ b/src/kivy_garden/xcamera/version.py @@ -0,0 +1,2 @@ +# __version__ = '2019.0910' +__version__ = None diff --git a/src/kivy_garden/xcamera/xcamera.py b/src/kivy_garden/xcamera/xcamera.py new file mode 100644 index 0000000..be13b71 --- /dev/null +++ b/src/kivy_garden/xcamera/xcamera.py @@ -0,0 +1,104 @@ +from __future__ import absolute_import + +import datetime +import os + +from kivy.lang import Builder +from kivy.properties import ObjectProperty +from kivy.resources import resource_add_path +from kivy.uix.behaviors import ButtonBehavior +from kivy.uix.camera import Camera +from kivy.uix.label import Label + +from .platform_api import LANDSCAPE, set_orientation, take_picture + +ROOT = os.path.dirname(os.path.abspath(__file__)) +resource_add_path(ROOT) + + +def darker(color, factor=0.5): + r, g, b, a = color + r *= factor + g *= factor + b *= factor + return r, g, b, a + + +kv = """ +#:import xcamera kivy_garden.xcamera + + + icon_color: (0, 0, 0, 1) + _down_color: xcamera.darker(self.icon_color) + icon_size: dp(50) + + canvas.before: + Color: + rgba: self.icon_color if self.state == 'normal' else self._down_color + Ellipse: + pos: self.pos + size: self.size + + size_hint: None, None + size: self.icon_size, self.icon_size + font_size: self.icon_size/2 + + +: + # \ue800 corresponds to the camera icon in the font + icon: u"[font=data/xcamera/icons.ttf]\ue800[/font]" + icon_color: (0.13, 0.58, 0.95, 0.8) + icon_size: dp(70) + + id: camera + resolution: 640, 480 # 1920, 1080 + allow_stretch: True + + # Shoot button + XCameraIconButton: + id: shoot_button + markup: True + text: root.icon + icon_color: root.icon_color + icon_size: root.icon_size + on_release: root.shoot() + + # position + right: root.width - dp(10) + center_y: root.center_y +""" +Builder.load_string(kv) + + +class XCameraIconButton(ButtonBehavior, Label): + pass + + +class XCamera(Camera): + directory = ObjectProperty(None) + _previous_orientation = None + __events__ = ('on_picture_taken',) + + def on_picture_taken(self, filename): + """ + This event is fired every time a picture has been taken + """ + + def get_filename(self): + return datetime.datetime.now().strftime('%Y-%m-%d %H.%M.%S.jpg') + + def shoot(self): + def on_success(filename): + self.dispatch('on_picture_taken', filename) + # + filename = self.get_filename() + if self.directory: + filename = os.path.join(self.directory, filename) + take_picture(self, filename, on_success) + + def force_landscape(self): + self._previous_orientation = set_orientation(LANDSCAPE) + + def restore_orientation(self): + if self._previous_orientation is not None: + set_orientation(self._previous_orientation) diff --git a/src/main.py b/src/main.py old mode 100644 new mode 100755 From bc50ae6be6b75df969d90cd384664ee1a680bfa2 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 19:31:59 +0200 Subject: [PATCH 16/20] Dedicated kv file --- CHANGELOG.md | 2 ++ src/kivy_garden/xcamera/xcamera.kv | 41 ++++++++++++++++++++++++ src/kivy_garden/xcamera/xcamera.py | 50 +++--------------------------- 3 files changed, 47 insertions(+), 46 deletions(-) create mode 100644 src/kivy_garden/xcamera/xcamera.kv diff --git a/CHANGELOG.md b/CHANGELOG.md index 63cf8fa..890b2f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,11 @@ - Move to new garden layout - Setup Docker testing + - Split kvlang file from Python code - Setup Continuous Integration testing, refs #1 - Setup linting, refs #2 - Unit tests `platform_api` module, refs #3 + - Publish to PyPI, refs #4 - Introduce `Makefile`, refs #8 ## [2019.0910] diff --git a/src/kivy_garden/xcamera/xcamera.kv b/src/kivy_garden/xcamera/xcamera.kv new file mode 100644 index 0000000..bc69e34 --- /dev/null +++ b/src/kivy_garden/xcamera/xcamera.kv @@ -0,0 +1,41 @@ +#:import xcamera kivy_garden.xcamera.xcamera + + + icon_color: (0, 0, 0, 1) + _down_color: xcamera.darker(self.icon_color) + icon_size: dp(50) + + canvas.before: + Color: + rgba: self.icon_color if self.state == 'normal' else self._down_color + Ellipse: + pos: self.pos + size: self.size + + size_hint: None, None + size: self.icon_size, self.icon_size + font_size: self.icon_size/2 + + +: + # \ue800 corresponds to the camera icon in the font + icon: u"[font=data/xcamera/icons.ttf]\ue800[/font]" + icon_color: (0.13, 0.58, 0.95, 0.8) + icon_size: dp(70) + + id: camera + resolution: 640, 480 # 1920, 1080 + allow_stretch: True + + # Shoot button + XCameraIconButton: + id: shoot_button + markup: True + text: root.icon + icon_color: root.icon_color + icon_size: root.icon_size + on_release: root.shoot() + + # position + right: root.width - dp(10) + center_y: root.center_y diff --git a/src/kivy_garden/xcamera/xcamera.py b/src/kivy_garden/xcamera/xcamera.py index be13b71..1a9c676 100644 --- a/src/kivy_garden/xcamera/xcamera.py +++ b/src/kivy_garden/xcamera/xcamera.py @@ -24,52 +24,6 @@ def darker(color, factor=0.5): return r, g, b, a -kv = """ -#:import xcamera kivy_garden.xcamera - - - icon_color: (0, 0, 0, 1) - _down_color: xcamera.darker(self.icon_color) - icon_size: dp(50) - - canvas.before: - Color: - rgba: self.icon_color if self.state == 'normal' else self._down_color - Ellipse: - pos: self.pos - size: self.size - - size_hint: None, None - size: self.icon_size, self.icon_size - font_size: self.icon_size/2 - - -: - # \ue800 corresponds to the camera icon in the font - icon: u"[font=data/xcamera/icons.ttf]\ue800[/font]" - icon_color: (0.13, 0.58, 0.95, 0.8) - icon_size: dp(70) - - id: camera - resolution: 640, 480 # 1920, 1080 - allow_stretch: True - - # Shoot button - XCameraIconButton: - id: shoot_button - markup: True - text: root.icon - icon_color: root.icon_color - icon_size: root.icon_size - on_release: root.shoot() - - # position - right: root.width - dp(10) - center_y: root.center_y -""" -Builder.load_string(kv) - - class XCameraIconButton(ButtonBehavior, Label): pass @@ -79,6 +33,10 @@ class XCamera(Camera): _previous_orientation = None __events__ = ('on_picture_taken',) + def __init__(self, **kwargs): + Builder.load_file(os.path.join(ROOT, "xcamera.kv")) + super().__init__(**kwargs) + def on_picture_taken(self, filename): """ This event is fired every time a picture has been taken From 0e760aff38e4a51ef371d341df5f184db9a96e20 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 19:33:14 +0200 Subject: [PATCH 17/20] Removes `__future__` imports since we're Python3 only --- src/kivy_garden/xcamera/android_api.py | 2 -- src/kivy_garden/xcamera/platform_api.py | 2 -- src/kivy_garden/xcamera/xcamera.py | 3 --- 3 files changed, 7 deletions(-) diff --git a/src/kivy_garden/xcamera/android_api.py b/src/kivy_garden/xcamera/android_api.py index 65d58f4..851ab39 100644 --- a/src/kivy_garden/xcamera/android_api.py +++ b/src/kivy_garden/xcamera/android_api.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - from kivy.logger import Logger from jnius import JavaException, PythonJavaClass, autoclass, java_method diff --git a/src/kivy_garden/xcamera/platform_api.py b/src/kivy_garden/xcamera/platform_api.py index fbf9c57..3f4c77e 100644 --- a/src/kivy_garden/xcamera/platform_api.py +++ b/src/kivy_garden/xcamera/platform_api.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - from kivy.utils import platform diff --git a/src/kivy_garden/xcamera/xcamera.py b/src/kivy_garden/xcamera/xcamera.py index 1a9c676..c4362a1 100644 --- a/src/kivy_garden/xcamera/xcamera.py +++ b/src/kivy_garden/xcamera/xcamera.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import datetime import os @@ -48,7 +46,6 @@ def get_filename(self): def shoot(self): def on_success(filename): self.dispatch('on_picture_taken', filename) - # filename = self.get_filename() if self.directory: filename = os.path.join(self.directory, filename) From 600594492f5880426ccbf0f89ba441e4f8372069 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 21:46:48 +0200 Subject: [PATCH 18/20] Distribute data, font and wav, refs #4 --- Makefile | 2 +- setup.py | 7 +++++-- .../kivy_garden/xcamera/data}/icons.ttf | Bin .../kivy_garden/xcamera/data}/shutter.wav | Bin src/kivy_garden/xcamera/platform_api.py | 2 +- src/kivy_garden/xcamera/xcamera.kv | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) rename {data/xcamera => src/kivy_garden/xcamera/data}/icons.ttf (100%) rename {data/xcamera => src/kivy_garden/xcamera/data}/shutter.wav (100%) diff --git a/Makefile b/Makefile index ebc4ae5..d1bf10a 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ ifeq ($(OS), Ubuntu) endif run/linux: virtualenv - $(PYTHON) src/main.py + $(PYTHON) src/main.py --debug run: run/linux diff --git a/setup.py b/setup.py index 9ad21c2..64d7e41 100644 --- a/setup.py +++ b/setup.py @@ -18,9 +18,12 @@ def read(fname): 'long_description': read('README.md'), 'long_description_content_type': 'text/markdown', 'author': 'Antonio Cuni', - 'url': 'https://github.com/kivy-garden/garden.xcamera', + 'url': 'https://github.com/kivy-garden/xcamera', 'packages': find_namespace_packages(where='src'), - 'package_data': {'kivy_garden.xcamera': ['*.kv']}, + 'package_data': { + 'kivy_garden.xcamera': ['*.kv'], + 'kivy_garden.xcamera.data': ['*.ttf', '*.wav'], + }, 'package_dir': {'': 'src'}, 'install_requires': [ 'kivy', diff --git a/data/xcamera/icons.ttf b/src/kivy_garden/xcamera/data/icons.ttf similarity index 100% rename from data/xcamera/icons.ttf rename to src/kivy_garden/xcamera/data/icons.ttf diff --git a/data/xcamera/shutter.wav b/src/kivy_garden/xcamera/data/shutter.wav similarity index 100% rename from data/xcamera/shutter.wav rename to src/kivy_garden/xcamera/data/shutter.wav diff --git a/src/kivy_garden/xcamera/platform_api.py b/src/kivy_garden/xcamera/platform_api.py index 3f4c77e..ea0236d 100644 --- a/src/kivy_garden/xcamera/platform_api.py +++ b/src/kivy_garden/xcamera/platform_api.py @@ -6,7 +6,7 @@ def play_shutter(): # kivy cannot find a camera provider, at lease on linux. Maybe a # gstreamer/pygame issue? from kivy.core.audio import SoundLoader - sound = SoundLoader.load("data/xcamera/shutter.wav") + sound = SoundLoader.load("data/shutter.wav") sound.play() diff --git a/src/kivy_garden/xcamera/xcamera.kv b/src/kivy_garden/xcamera/xcamera.kv index bc69e34..b8af343 100644 --- a/src/kivy_garden/xcamera/xcamera.kv +++ b/src/kivy_garden/xcamera/xcamera.kv @@ -19,7 +19,7 @@ : # \ue800 corresponds to the camera icon in the font - icon: u"[font=data/xcamera/icons.ttf]\ue800[/font]" + icon: u"[font=data/icons.ttf]\ue800[/font]" icon_color: (0.13, 0.58, 0.95, 0.8) icon_size: dp(70) From f05b70d7465fd42ebbf6c239f449dd9a0a9721b6 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 22:02:44 +0200 Subject: [PATCH 19/20] Android build will be addressed via buildozer, refs #11 --- deploy.sh | 13 ------------- example/android.txt | 3 --- 2 files changed, 16 deletions(-) delete mode 100755 deploy.sh delete mode 100644 example/android.txt diff --git a/deploy.sh b/deploy.sh deleted file mode 100755 index 434fee3..0000000 --- a/deploy.sh +++ /dev/null @@ -1,13 +0,0 @@ -# deploy to kivy launcher on android -ROOT=/tmp/xcamera-example -XCAMERA=$ROOT/libs/garden/garden.xcamera - -echo rm -rf $ROOT -mkdir -p $XCAMERA - -cp example/main.py example/android.txt $ROOT -cp *.py $XCAMERA -cp -r data $XCAMERA - -adb push $ROOT /sdcard/kivy/xcamera -adb logcat -s python diff --git a/example/android.txt b/example/android.txt deleted file mode 100644 index d1f2e1a..0000000 --- a/example/android.txt +++ /dev/null @@ -1,3 +0,0 @@ -title=XCamera example -author=Antonio Cuni -orientation=portrait,landscape From 15998838e480cf9e7c3421bd72b3f362866db648 Mon Sep 17 00:00:00 2001 From: Andre Miras Date: Tue, 10 Sep 2019 22:15:42 +0200 Subject: [PATCH 20/20] 2019.0911 --- CHANGELOG.md | 2 +- src/kivy_garden/xcamera/version.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 890b2f1..8abc0fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## [Unreleased] +## [2019.0911] - Move to new garden layout - Setup Docker testing diff --git a/src/kivy_garden/xcamera/version.py b/src/kivy_garden/xcamera/version.py index 140c96b..76f8958 100644 --- a/src/kivy_garden/xcamera/version.py +++ b/src/kivy_garden/xcamera/version.py @@ -1,2 +1 @@ -# __version__ = '2019.0910' -__version__ = None +__version__ = '2019.0911'