From e7dbc6105df70db8db708012921d9adecf07d710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Fredrik=20Ki=C3=A6r?= <31612826+anders-kiaer@users.noreply.github.com> Date: Fri, 5 Apr 2019 09:42:33 +0200 Subject: [PATCH] Add pypi deployment (#3) --- .travis.yml | 21 +++--- CONTRIBUTING.md | 4 - README.md | 95 +++++++++++------------- package.json | 3 +- requirements.txt | 2 - setup.py | 46 ++++++++++-- tests/requirements.txt | 12 --- webviz_subsurface_components/__init__.py | 11 ++- 8 files changed, 106 insertions(+), 88 deletions(-) delete mode 100644 CONTRIBUTING.md delete mode 100644 requirements.txt delete mode 100644 tests/requirements.txt diff --git a/.travis.yml b/.travis.yml index c74089842..f743f934e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,9 @@ -language : python +language: python cache: pip -sudo: true - addons: chrome: stable -services: - - docker - python: - "3.6" @@ -22,8 +17,8 @@ before_install: - sh -e /etc/init.d/xvfb start install: - - pip install -r requirements.txt - - pip install -r tests/requirements.txt + - pip install .[tests] + - pip install .[dependencies] - npm install - wget https://chromedriver.storage.googleapis.com/73.0.3683.68/chromedriver_linux64.zip - unzip chromedriver_linux64.zip @@ -33,4 +28,12 @@ script: - npm run test - npm run build:all - pip install . - - pytest \ No newline at end of file + - pytest + +deploy: + - provider: pypi + user: webviz + password: + secure: XhoUT3skRNVZLuSxK8TOPwTUNF6p7xdZ5xU+lPGcLNRoWFUUZHyKiwI3CAuRPP01bMl4ifM0V+4Y3ov4XDNnotr6fL/xhIaK83wBfUW0w9u6FCmsfXBHh8qj5ELgqdJPdecJNXR3UVHSpnX5zuGzlOeTKpRL1iKNO5vOF9vRmJxG0J3sdqkrp8ZraEtBU8pgq5+reMduX309aXYBrhvnedI1L0d7IeYBCAhilEcmA+yngifyssaxIZIa9jMPyGIPcEihlZ2eho5yiko1Pg/jrZQRrK9s4IkUgJnyNuxYrRz0OjDCeWPThzXhdPo0PnXkChDPjcy00cVE7R8qFYAo/npCELsmaSiQHc0JY1RsmCM7T2ptKy4iQgh9q2wUVZN8csflHHgzY4FPR+w3fjtJ5O3RSjObutyM/ByAU+Qq/59D5tUPMDA+6lHQPTZaDbiKcH/a9QUszsEYf0m7e3ViMJcZfauSshGu8517yNKbRuwWTRILONjryKov0eqeTM47lNTVOXeUkhHyQpHpSl4rSm28yaTMnmFohbWITbr3Oy4nOCuV/RSAom0b6n60UP4KFtoNq7Y8u+IftTc1E9JueVXyaqSCEBbxOMhpzDh7f92xQliOw0/vTmy8OaLjaX8K/A0YrhvtKgVhOahFStaMjcr67LqR3hr++bBXMAw9mP4= + on: + tags: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index fc390281b..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -# CONTRIBUTING - -This project was generated by the [dash-component-boilerplate](https://github.com/plotly/dash-component-boilerplate) it contains the minimal set of code required to create your own custom Dash component. - diff --git a/README.md b/README.md index 0afcceeb7..2efa36501 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,18 @@ # webviz_subsurface_components -webviz_subsurface_components is a Dash component library for use in webviz. +`webviz_subsurface_components` is a Dash component library for use in `webviz`. -Get started with: -1. Install Dash and its dependencies: https://dash.plot.ly/installation -2. Run `python examples/example_hm.py` -3. Visit http://localhost:8050 in your web browser +You can quickly get started with: + +1. Run `pip install webviz-subsurface-components` +2. Run `python examples/example_hm.py` +3. Visit http://localhost:8050 in your web browser ## Contributing -See [CONTRIBUTING.md](./CONTRIBUTING.md) +This project was generated by the +[dash-component-boilerplate](https://github.com/plotly/dash-component-boilerplate). +It contains the minimal set of code required to create a custom Dash component. ### Install dependencies @@ -17,74 +20,64 @@ If you have selected install_dependencies during the prompt, you can skip this p 1. Install npm packages ``` - $ npm install + npm install ``` 2. Create a virtual env and activate. ``` - $ virtualenv venv - $ . venv/bin/activate + virtualenv venv + . venv/bin/activate ``` _Note: venv\Scripts\activate for windows_ 3. Install python packages required to build components. ``` - $ pip install -r requirements.txt + pip install .[dependencies] ``` 4. Install the python packages for testing (optional) ``` - $ pip install -r tests/requirements.txt + pip install .[tests] ``` -### Write your component code in `src/lib/components/.react.js`. +### Write component code in `src/lib/components/.react.js` - The demo app is in `src/demo` and you will import your example component code into your demo app. - Test your code in a Python environment: 1. Build your code ``` - $ npm run build:all + npm run build:all ``` 2. Run and modify the `usage.py` sample dash app: ``` - $ python usage.py + python usage.py ``` -- Write tests for your component. - - A sample test is available in `tests/test_usage.py`, it will load `usage.py` and you can then automate interactions with selenium. - - Run the tests with `$ pytest tests`. - - The Dash team uses these types of integration tests extensively. Browse the Dash component code on GitHub for more examples of testing (e.g. https://github.com/plotly/dash-core-components) -- Add custom styles to your component by putting your custom CSS files into your distribution folder (`webviz_subsurface_components`). - - Make sure that they are referenced in `MANIFEST.in` so that they get properly included when you're ready to publish your component. - - Make sure the stylesheets are added to the `_css_dist` dict in `webviz_subsurface_components/__init__.py` so dash will serve them automatically when the component suite is requested. -- [Review your code](./review_checklist.md) - -### Create a production build and publish: - -1. Build your code: - ``` - $ npm run build:all +- Write tests for your component. + - A sample test is available in `tests/test_usage.py`, it will load + `usage.py` and you can then automate interactions with selenium. + + - Run the tests with `pytest tests`. + + - The Dash team uses these types of integration tests extensively. + Browse the Dash component code on GitHub for more examples of testing + (e.g. [dash-core-components](https://github.com/plotly/dash-core-components)). + +- Add custom styles to your component by putting your custom CSS files into + your distribution folder (`webviz_subsurface_components`). + - Make sure that they are referenced in `MANIFEST.in` so that they get + properly included when you're ready to publish your component. + + - Make sure the stylesheets are added to the `_css_dist` dict in + `webviz_subsurface_components/__init__.py` so dash will serve them + automatically when the component suite is requested. + +- [Review your code](./review_checklist.md) + +### Build code and install + +1. Build your code: ``` -2. Create a Python tarball + npm run build:all ``` - $ python setup.py sdist +2. Install the Python package: ``` - This distribution tarball will get generated in the `dist/` folder - -3. Test your tarball by copying it into a new environment and installing it locally: + python setup.py install ``` - $ pip install webviz_subsurface_components-0.0.1.tar.gz - ``` - -4. If it works, then you can publish the component to NPM and PyPI: - 1. Cleanup the dist folder (optional) - ``` - $ rm -rf dist - ``` - 2. Publish on PyPI - ``` - $ twine upload dist/* - ``` - 3. Publish on NPM (Optional if chosen False in `publish_on_npm`) - ``` - $ npm publish - ``` - _Publishing your component to NPM will make the JavaScript bundles available on the unpkg CDN. By default, Dash servers the component library's CSS and JS from the remote unpkg CDN, so if you haven't published the component package to NPM you'll need to set the `serve_locally` flags to `True` (unless you choose `False` on `publish_on_npm`). We will eventually make `serve_locally=True` the default, [follow our progress in this issue](https://github.com/plotly/dash/issues/284)._ - diff --git a/package.json b/package.json index 2295697e9..d47c76a6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,5 @@ { "name": "webviz_subsurface_components", - "version": "0.0.1", "description": "Custom Dash components for use in Webviz", "main": "build/index.js", "scripts": { @@ -15,7 +14,7 @@ "build:all-activated": "(. venv/bin/activate || venv\\scripts\\activate && npm run build:all)", "test": "jest" }, - "author": "R&T Equinor hakal@statoil.com", + "author": "R&T Equinor", "license": "LGPL", "dependencies": { "d3": "^5.9.2", diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 4f0e4a506..000000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -# dash is required to call `build:py` -dash>=0.38.0 diff --git a/setup.py b/setup.py index 47da3512a..36f9dc5f8 100644 --- a/setup.py +++ b/setup.py @@ -1,20 +1,56 @@ -import json import os +import json from setuptools import setup +with open('README.md', 'r') as fh: + long_description = fh.read() + with open(os.path.join('webviz_subsurface_components', 'package.json')) as f: package = json.load(f) -package_name = package["name"].replace(" ", "_").replace("-", "_") +package_name = package['name'].replace(' ', '_').replace('-', '_') + +install_requires = [ + 'dash>=0.38.0', +] + +tests_require = [ + 'chromedriver-binary', + 'ipdb', + 'percy', + 'selenium', + 'flake8', + 'pylint', + 'pytest-dash>=2.1.1' +] setup( name=package_name, - version=package["version"], author=package['author'], packages=[package_name], include_package_data=True, license=package['license'], - description=package['description'] if 'description' in package else package_name, - install_requires=[] + description=package['description'], + long_description=long_description, + long_description_content_type='text/markdown', + url='https://github.com/equinor/webviz-subsurface-components', + install_requires=install_requires, + tests_require=tests_require, + extras_require={ + 'tests': tests_require, + 'dependencies': install_requires + }, + setup_requires=['setuptools_scm>=3.2.0'], + use_scm_version=True, + classifiers=[ + 'Programming Language :: Python :: 3', + 'Operating System :: OS Independent', + 'Natural Language :: English', + 'Topic :: Multimedia :: Graphics', + 'Topic :: Scientific/Engineering', + 'Topic :: Scientific/Engineering :: Visualization', + 'License :: OSI Approved :: '\ + 'GNU Lesser General Public License v3 (LGPLv3)' + ] ) diff --git a/tests/requirements.txt b/tests/requirements.txt deleted file mode 100644 index 42775d95d..000000000 --- a/tests/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Packages needed to run the tests. -# Switch into a virtual environment -# pip install -r requirements.txt - -chromedriver-binary -dash>=0.38.0 -ipdb -percy -selenium -flake8 -pylint -pytest-dash>=2.1.1 diff --git a/webviz_subsurface_components/__init__.py b/webviz_subsurface_components/__init__.py index a67a44c85..38cf57186 100644 --- a/webviz_subsurface_components/__init__.py +++ b/webviz_subsurface_components/__init__.py @@ -4,12 +4,20 @@ import sys as _sys import json +from pkg_resources import get_distribution, DistributionNotFound + import dash as _dash # noinspection PyUnresolvedReferences from ._imports_ import * from ._imports_ import __all__ +try: + __version__ = get_distribution(__name__).version +except DistributionNotFound: + # package is not installed + pass + if not hasattr(_dash, 'development'): print('Dash was not successfully imported. ' 'Make sure you don\'t have a file ' @@ -22,7 +30,6 @@ package = json.load(f) package_name = package['name'].replace(' ', '_').replace('-', '_') -__version__ = package['version'] _current_path = _os.path.dirname(_os.path.abspath(__file__)) @@ -33,14 +40,12 @@ { 'relative_package_path': 'webviz_subsurface_components.min.js', 'dev_package_path': 'webviz_subsurface_components.dev.js', - 'namespace': package_name } ] _css_dist = [] - for _component in __all__: setattr(locals()[_component], '_js_dist', _js_dist) setattr(locals()[_component], '_css_dist', _css_dist)