Skip to content

Commit

Permalink
Add pypi deployment (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
anders-kiaer authored Apr 5, 2019
1 parent 3715932 commit e7dbc61
Show file tree
Hide file tree
Showing 8 changed files with 106 additions and 88 deletions.
21 changes: 12 additions & 9 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
language : python
language: python
cache: pip

sudo: true

addons:
chrome: stable

services:
- docker

python:
- "3.6"

Expand All @@ -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
Expand All @@ -33,4 +28,12 @@ script:
- npm run test
- npm run build:all
- pip install .
- pytest
- 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
4 changes: 0 additions & 4 deletions CONTRIBUTING.md

This file was deleted.

95 changes: 44 additions & 51 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,90 +1,83 @@
# 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

If you have selected install_dependencies during the prompt, you can skip this part.

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/<component_name>.react.js`.
### Write component code in `src/lib/components/<component_name>.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)._
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand All @@ -15,7 +14,7 @@
"build:all-activated": "(. venv/bin/activate || venv\\scripts\\activate && npm run build:all)",
"test": "jest"
},
"author": "R&T Equinor [email protected]",
"author": "R&T Equinor",
"license": "LGPL",
"dependencies": {
"d3": "^5.9.2",
Expand Down
2 changes: 0 additions & 2 deletions requirements.txt

This file was deleted.

46 changes: 41 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
@@ -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)'
]
)
12 changes: 0 additions & 12 deletions tests/requirements.txt

This file was deleted.

11 changes: 8 additions & 3 deletions webviz_subsurface_components/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 '
Expand All @@ -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__))

Expand All @@ -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)

0 comments on commit e7dbc61

Please sign in to comment.