Commit 36c464f9 authored by Bas Couwenberg's avatar Bas Couwenberg

New upstream version 4.2.0

parent 99fdd769
---
exclude_paths:
- 'tests/**'
- 'docs/conf.py'
......@@ -5,22 +5,18 @@ dist: trusty
python:
- "2.7"
- "3.5"
- "3.6"
git:
submodules: false
addons:
apt:
sources:
- sourceline: 'ppa:ubuntugis/ppa'
packages:
- gdal-bin
- libgdal-dev
- libgdal1h
- libgdal1-dev
- libgeos-dev
- devscripts
- debhelper
- python-setuptools
# Handle Git submodules yourself
git:
......@@ -28,8 +24,9 @@ git:
install:
- pip install pip --upgrade
- pip install .
- pip install -r requirements.txt
- pip install -r requirements-gdal.txt
- pip install -r requirements-extra.txt
- pip install -r requirements-dev.txt
- pip install coveralls
......@@ -43,11 +40,11 @@ after_success:
- debuild -b -uc -us
# whitelist
branches:
only:
- master
notifications:
irc:
channels:
- "irc.freenode.org#geopython"
# branches:
# only:
# - master
# notifications:
# irc:
# channels:
# - "irc.freenode.org#geopython"
# Contributor Covenant 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 pywps-dev@lists.osgeo.org. The project team will review and investigate all complaints, and will respond in a way that it deems 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/
......@@ -4,7 +4,7 @@ Contributing to PyWPS
The PyWPS project openly welcomes contributions (bug reports, bug fixes, code
enhancements/features, etc.). This document will outline some guidelines on
contributing to PyWPS. As well, the PyWPS `community <http://pywps.org/community>`_ is a
great place to get an idea of how to connect and participate in PyWPS community
great place to get an idea of how to connect and participate in the PyWPS community
and development.
PyWPS has the following modes of contribution:
......@@ -15,14 +15,14 @@ PyWPS has the following modes of contribution:
Code of Conduct
---------------
Contributors to this project are expected to act respectfully toward others in
Contributors to this project are expected to act respectfully towards others in
accordance with the `OSGeo Code of Conduct
<http://www.osgeo.org/code_of_conduct>`_.
Contributions and Licensing
---------------------------
Contributors are asked to confirm that they comply with project `license
Contributors are asked to confirm that they comply with the project `license
<https://github.com/geopython/PyWPS/blob/master/LICENSE.txt>`_ guidelines.
GitHub Commit Access
......@@ -53,6 +53,9 @@ GitHub Pull Requests
https://github.com/geopython/pywps/graphs/contributors
- unclaimed copyright, by default, is assigned to the main copyright holders as
specified in https://github.com/geopython/pywps/blob/master/LICENSE.txt
- make sure, the tests are passing on [travis-ci](https://travis-ci.org/geopython/pywps) sevice, as well as on your local machine `tox`::
tox
Contributions and Licensing Agreement Template
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
......@@ -85,10 +88,10 @@ Documentation
Bugs
----
PyWPS' `issue tracker <https://github.com/geopython/pywps/issues>`_ is the
The PyWPS `issue tracker <https://github.com/geopython/pywps/issues>`_ is the
place to report bugs or request enhancements. To submit a bug be sure to specify
the PyWPS version you are using, the appropriate component, a description of how
to reproduce the bug, as well as what version of Python and platform.
to reproduce the bug, as well as the Python version and the platform.
Forking PyWPS
-------------
......@@ -135,7 +138,9 @@ Submitting a Pull Request
^^^^^^^^^^^^^^^^^^^^^^^^^
This section will guide you through steps of working on PyWPS. This section
assumes you have forked PyWPS into your own GitHub repository.
assumes you have forked PyWPS into your own GitHub repository. Note that
``develop`` is the main development branch in PyWPS; ``master`` is only used
for stable releases and managed exclusively by the PyWPS team.
.. code-block:: bash
......@@ -148,11 +153,11 @@ assumes you have forked PyWPS into your own GitHub repository.
cd pywps
pip install -e . && pip install -r requirements.txt
# add the main PyWPS master branch to keep up to date with upstream changes
# add the main PyWPS development branch to keep up to date with upstream changes
git remote add upstream https://github.com/geopython/pywps.git
git pull upstream master
git pull upstream develop
# create a local branch off master
# create a local branch off develop
# The name of the branch should include the issue number if it exists
git branch issue-72
git checkout issue-72
......@@ -175,8 +180,8 @@ master:
.. code-block:: bash
git checkout master
git pull upstream master
git checkout develop
git pull upstream develop
.. _`Corporate`: http://www.osgeo.org/sites/osgeo.org/files/Page/corporate_contributor.txt
.. _`Individual`: http://www.osgeo.org/sites/osgeo.org/files/Page/individual_contributor.txt
......
......@@ -27,18 +27,18 @@ Or in alternative install it manually:
$ sudo python setup.py install
Install demo service
--------------------
Install example service
-----------------------
$ git clone https://github.com/ldesousa/pywps-4-demo.git pywps-4-demo
$ git clone https://github.com/geopython/pywps-flask.git pywps-flask
Run demo
--------
Run example service
-------------------
$ python demo.py
Access demo
-----------
Access example service
----------------------
http://localhost:5000
prune docs/
prune tests/
include *.txt
recursive-include pywps/schemas *
include *.rst
recursive-include pywps *
global-exclude *.py[co]
# PyWPS
# PyWPS
PyWPS is an implementation of the Web Processing Service standard from
the Open Geospatial Consortium. PyWPS is written in Python.
[![Documentation Status](https://img.shields.io/badge/docs-latest-brightgreen.svg)](http://pywps.readthedocs.org/en/latest/?badge=latest)
[![Build Status](https://travis-ci.org/geopython/pywps.png)](https://travis-ci.org/geopython/pywps)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/19d53c45a3854e37b89523cf9bb1d262)](https://www.codacy.com/project/cehbrecht/pywps/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=geopython/pywps&amp;utm_campaign=Badge_Grade_Dashboard)
[![Coverage Status](https://coveralls.io/repos/github/geopython/pywps/badge.svg?branch=master)](https://coveralls.io/github/geopython/pywps?branch=master)
[![PyPI](https://img.shields.io/pypi/dm/pywps.svg)]()
[![GitHub license](https://img.shields.io/github/license/geopython/pywps.svg)]()
......@@ -34,16 +35,16 @@ python -m coverage report -m
# Run web application
## Demo application
## Example service
Clone demo app after having installed PyWPS:
Clone the example service after having installed PyWPS:
```bash
git clone git://github.com/PyWPS/pywps-4-demo.git
cd demo/
git clone git://github.com/geopython/pywps-flask.git pywps-flask
cd pywps-flask
python demo.py
```
## Apache configuration
1. Enable WSGI extension
......@@ -68,16 +69,16 @@ python demo.py
#!/usr/bin/env python3
import sys
sys.path.append('/path/to/src/pywps/')
import pywps
from pywps.app import Service, WPS, Process
def pr1():
"""This is the execute method of the process
"""
pass
application = Service(processes=[Process(pr1)])
```
......@@ -86,7 +87,7 @@ python demo.py
`http://localhost/pywps/?service=WPS&request=GetCapabilities&version=1.0.0`
5. Run in command line:
```bash
curl 'http://localhost/pywps/?service=WPS&request=GetCapabilities&version=1.0.0'
```
......
# Howto release PyWPS
This document gives you, as PyWPS release master complete tutorial of how to get
PyWPS release rolled up and deployed to target server, create packages etc.
This document gives you, as PyWPS release master, a complete tutorial of how to get
a PyWPS release rolled up and deployed to a target server, create packages etc.
## PyWPS versioning
PyWPS uses [Debian version naming system](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version). Every policy should be checked against it.
PyWPS uses [Debian version naming system](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version).
Every policy should be checked against it.
PyWPS uses 3 numbers release description: MAJOR.MINOR.MAINTENANCE. Within MAJOR
PyWPS uses a 3 number release description: MAJOR.MINOR.MAINTENANCE. Within MAJOR
releases, we should aim, not to break backwards compatibility.
Event MINOR version numbers (0, 2, 4, 6, ...) are considered as stable, where as
odd numbers (1, 3, 5, 7, ...) are current development branches. MINOR releases
should add new features.
MAINTENANCE number should be used for bugfix releases only. No new features are
added.
The MAINTENANCE number should be used for bugfix releases only. No new features
are added.
For release candindates `MAJOR.MINOR.MAINTENANCE-rcX` format should be used.
For release candidates, the `MAJOR.MINOR.MAINTENANCE-rcX` format should be used.
## Go to `master` branch
## Check `master` branch
`master` is the main development branch.
Before a release, make sure, that [Travis CI](https://travis-ci.org/geopython/pywps) is indicating full successful test suite check.
```
git checkout master
```
## Fix files, create tags, commit, push
* Fix the [VERSION.txt](https://github.com/geopython/pywps/blob/master/VERSION.txt) file.
......@@ -42,13 +43,13 @@ git push
git push --tags
```
* Update version in `VERSION.txt` and `pywps/__init__.py` to dev branch, e.g.
`4.1-dev` and push to master:
* Update version in `VERSION.txt` and `pywps/__init__.py` to dev, e.g.
`4.3-dev` on `master` branch:
```
git checkout master
$EDITOR VERSION.txt pywps/__init__.py # add 4.1-dev version
git commit -m"Updating version to 4.1-dev"
$EDITOR VERSION.txt pywps/__init__.py # add 4.3-dev version
git commit -m"Updating version to 4.3-dev"
git push
```
......@@ -56,18 +57,18 @@ git push
```
cd /tmp
git clone git@github.com:geopython/pywps.git pywps-4
cd pywps-4
git clone git@github.com:geopython/pywps.git
cd pywps
git checkout X.Y.Z
python setup.py bdist_egg upload
python setup.py bdist_wheel upload
```
## Fix pywps-demo project (only for stable releases)
## Fix the pywps-flask project (only for stable releases)
```
git checkout master
```
* Fix the [VERSION.txt](https://github.com/geopython/pywps-demo/blob/master/VERSION.txt) file.
* Fix the [VERSION.txt](https://github.com/geopython/pywps-flask/blob/master/VERSION.txt) file.
```
$EDITOR VERSION.txt
......@@ -100,10 +101,10 @@ NOTE: [IF ANY]
What is PyWPS:
--------------
PyWPS (Python Web Processing Service) is implementation of Web
Processing Service standard from Open Geospatial Consortium (OGC(R)).
PyWPS (Python Web Processing Service) is an implementation of the Web
Processing Service standard from Open Geospatial Consortium (OGC(R)).
Processes can be written using GRASS GIS, but usage of other programs, like
R package, GDAL or PROJ tools, is possible as well.
R, GDAL or PROJ tools, is possible as well.
Happy GISing!
......
pywps (4.2.0) trusty; urgency=medium
* Jinja2 templates for output generation
* Support for HPC cluster (Slurm, GridEngine)
* Support for streamed URL-based data input (OpenDAP, download on demand)
* Sphinx directive to automatically document processes.
* Refactoring of IO handler classes
* Added validators for JSON, DODS links and netCDF formats
* Numerous bug-fixes, additional tests and documentation improvements
-- Tom Kralidis <tomkralidis@gmail.com> Fri, 14 Dec 2018 12:00:00 +0000
pywps (4.0.0) trusty; urgency=medium
* New version of PyWPS
* New processes structure
* Logging to database, jobs control
* Jobs queue
* Saparated processes and PyWPS-Demo project
* Jobs queue
* Separated processes and PyWPS-Demo project
-- Jáchym Čepický <jachym.cepicky@opengeolabs.cz> Wed, 07 Dec 2016 10:54:43 +0100
......@@ -37,7 +49,7 @@ pywps (3.2.3) precise; urgency=low
pywps (3.2.2) precise; urgency=low
* Changelog version number updated to 3.2.2 and removing of entries in /debian/docs as the files don't exist in the doc directory.
* Changelog version number updated to 3.2.2 and removing of entries in /debian/docs as the files don't exist in the doc directory.
-- Jachym Cepicky <jachym@les-ejk.cz> Tue, 02 Feb 2016 19:22:22 +0000
......@@ -63,11 +75,11 @@ pywps (1.1.0-1) stable; urgency=low
1.1.0 devel
Changes since 1.0.0:
* ComplexValueReference input type definition is depredecated,
* ComplexValueReference input type definition is deprecated,
use only ComplexValue - PyWPS will recognise the input type and handle
it according to it.
* GRASS location not created automaticly any more.
* Rewritten exception handeling
* GRASS location not created automatically any more.
* Rewritten exception handling
* Basic support for Range in LiteralValue definition
-- Jachym Cepicky <jachym@les-ejk.cz> Fri, 2 Nov 2006 15:38:00 +0200
......@@ -78,7 +90,7 @@ pywps (1.0.0-1) stable; urgency=low
Changes since RC3:
* Fixed HTTP POST method
* Added longer name for PyWPS PID file
* Fixed small bug in BoundingBox
* Fixed small bug in BoundingBox
-- Jachym Cepicky <jachym@les-ejk.cz> Fri, 2 Nov 2006 15:38:00 +0200
......@@ -87,7 +99,7 @@ pywps (1.0.0rc3-1) unstable; urgency=low
* Release candidate 3
-- Jachym Cepicky <jachym@les-ejk.cz> Fri, 2 Nov 2006 15:38:00 +0200
pywps (1.0.0-1) unstable; urgency=low
* Initial release
......
......@@ -2,7 +2,7 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://github.com/geopython/pywps
Files: *
Copyright: Copyright 2014-2016 PyWPS Development Team, represented by Jachym Cepicky
Copyright: Copyright 2014-2018 Open Source Geospatial Foundation and others
License: Expat
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
......
......@@ -32,10 +32,14 @@ workdir=workdir
maxprocesses=10
parallelprocesses=2
[processing]
mode=default
[logging]
level=INFO
file=logs/pywps.log
database=sqlite:///logs/pywps-logs.sqlite3
format=%(asctime)s] [%(levelname)s] file=%(pathname)s line=%(lineno)s module=%(module)s function=%(funcName)s %(message)s
[grass]
......
......@@ -44,10 +44,10 @@ ComplexData
.. autoclass:: ComplexOutput
.. autoclass:: Format
.. autodata:: pywps.inout.formats.FORMATS
:annotation:
List of out of the box supported formats. User can add custom formats to the
array.
......@@ -63,7 +63,7 @@ BoundingBoxData
Request and response objects
----------------------------
.. autodata:: pywps.app.WPSResponse.STATUS
.. autodata:: pywps.response.status.WPS_STATUS
:annotation:
Process status information
......@@ -89,13 +89,24 @@ Request and response objects
A MultiDict object containing input values sent by the client.
.. autoclass:: pywps.app.WPSResponse
.. autoclass:: pywps.response.WPSResponse
:members:
.. attribute:: status
Information about currently running process status
:class:`pywps.app.WPSResponse.STATUS`
:class:`pywps.response.status.STATUS`
Processing
----------
.. autofunction:: pywps.processing.Process
.. autoclass:: pywps.processing.Processing
:members:
.. autoclass:: pywps.processing.Job
:members:
Refer :ref:`exceptions` for their description.
##################################################################
# Copyright 2016 OSGeo Foundation, #
# represented by PyWPS Project Steering Committee, #
# Copyright 2018 Open Source Geospatial Foundation and others #
# licensed under MIT, Please consult LICENSE.txt for details #
##################################################################
......@@ -21,12 +20,16 @@ with open('../VERSION.txt') as f:
release = version
latex_logo = '_static/pywps.png'
extensions = ['sphinx.ext.extlinks',
'sphinx.ext.autodoc',
'sphinx.ext.todo',
'sphinx.ext.mathjax',
'sphinx.ext.viewcode'
]
extensions = [
'sphinx.ext.extlinks',
'sphinx.ext.autodoc',
'sphinx.ext.todo',
'sphinx.ext.mathjax',
'sphinx.ext.viewcode',
'sphinx.ext.napoleon',
'pywps.ext_autodoc'
]
exclude_patterns = ['_build']
source_suffix = '.rst'
master_doc = 'index'
......@@ -36,7 +39,7 @@ pygments_style = 'sphinx'
html_static_path = ['_static']
htmlhelp_basename = 'PyWPSdoc'
#html_logo = 'pywps.png'
# html_logo = 'pywps.png'
html_theme = 'alabaster'
# alabaster settings
......@@ -58,6 +61,7 @@ html_theme_options = {
'logo_name': False
}
class Mock(object):
def __init__(self, *args, **kwargs):
pass
......@@ -76,7 +80,7 @@ class Mock(object):
MOCK_MODULES = ['lxml', 'lxml.etree', 'lxml.builder']
#with open('../requirements.txt') as f:
# with open('../requirements.txt') as f:
# MOCK_MODULES = f.read().splitlines()
for mod_name in MOCK_MODULES:
......
......@@ -4,26 +4,28 @@ Configuration
=============
PyWPS is configured using a configuration file. The file uses the
`ConfigParser <https://wiki.python.org/moin/ConfigParserExamples>`_ format.
`ConfigParser <https://wiki.python.org/moin/ConfigParserExamples>`_ format, with
interpolation initialised using `os.environ`.
.. versionadded:: 4.0.0
.. warning:: Compatibility with PyWPS 3.x: major changes have been made
to the config file in order to allow for shared configurations with `PyCSW
<http://pycsw.org/>`_ and other projects.
The configuration file has 3 sections:
The configuration file has several sections:
* `metadata:main` for the server metadata inputs
* `server` for server configuration
* `loggging` for logging configuration
* `processing` for processing backend configuration
* `logging` for logging configuration
* `grass` for *optional* configuration to support `GRASS GIS
<http://grass.osgeo.org>`_
PyWPS ships with a sample configuration file (``default-sample.cfg``).
A similar file is also available in the `demo` service as
described in :ref:`demo` section.
PyWPS ships with a sample configuration file (``default-sample.cfg``).
A similar file is also available in the `flask` service as
described in :ref:`flask` section.
Copy the file to ``default.cfg`` and edit the following:
Copy the file to ``default.cfg`` and edit the following:
[metadata:main]
---------------
......@@ -100,33 +102,69 @@ configuration file <http://docs.pycsw.org/en/latest/configuration.html>`_.
:parallelprocesses:
maximum number of parallel running processes - set this number carefully.
The effective number of parallel running processes is limited by the number
of cores in the processor of the hosting machine. As well, speed and
response time of hard drives impact ultimate processing performance. A
reasonable number of parallel running processes is not higher than the
The effective number of parallel running processes is limited by the number
of cores in the processor of the hosting machine. As well, speed and
response time of hard drives impact ultimate processing performance. A
reasonable number of parallel running processes is not higher than the
number of processor cores.
:maxrequestsize:
maximal request size. 0 for no limit
:workdir:
a directory to store all temporary files (which should be always deleted,
maximal request size. 0 for no limit
:maxprocesses:
maximal number of requests being stored in queue, waiting till they can be
processed (see ``parallelprocesses`` configuration option).
:workdir:
a directory to store all temporary files (which should be always deleted,
once the process is finished).
:outputpath:
:outputpath:
server path where to store output files.
:outputurl:
corresponding URL
.. note:: `outputpath` and `outputurl` must corespond. `outputpath` is the name
:allowedinputpaths:
server paths which are allowed to be used by file URLs. A list of paths
must be seperated by `:`.
Example: `/var/lib/pywps/downloads:/var/lib/pywps/public`
By default no input paths are allowed.
:cleantempdir:
flag to enable removal of process temporary workdir after process has finished.
Default = `true`.
.. note:: `outputpath` and `outputurl` must correspond. `outputpath` is the name
of the resulting target directory, where all output data files are
stored (with unique names). `outputurl` is the corresponding full URL,
stored (with unique names). `outputurl` is the corresponding full URL,
which is targeting to `outputpath` directory.
Example: `outputpath=/var/www/wps/outputs` shall correspond with
`outputurl=http://foo.bar/wps/outputs`
[processing]
------------
:mode:
the mode/backend used for processing. Possible values are:
`default`, `multiprocessing` and `scheduler`. `default` is the same as
`multiprocessing` and is the default value ... all processes are executed
using the Python multiprocessing module on the same machine as the PyWPS
service. `scheduler` is used to enable the job scheduler extension and
process execution is delegated to a configured scheduler system like Slurm
and Grid Engine.
:path:
path to the PyWPS `joblauncher` executable. This option is only used for
the `scheduler` backend and is by default set automatically:
`os.path.dirname(os.path.realpath(sys.argv[0]))`
[logging]
---------
......@@ -134,6 +172,11 @@ configuration file <http://docs.pycsw.org/en/latest/configuration.html>`_.
the logging level (see
http://docs.python.org/library/logging.html#logging-levels)
:format:
the format string used by the logging `:Formatter:` (see
https://docs.python.org/3/library/logging.html#logging.Formatter).
For example: ``%(asctime)s] [%(levelname)s] %(message)s``.
:file:
the full file path to the log file for being able to see possible error
messages.
......@@ -167,11 +210,9 @@ Sample file
processes_path=
outputurl=/data/
outputpath=/tmp/outputs/
logfile=
loglevel=INFO
logdatabase=
workdir=
allowedinputpaths=/tmp
[metadata:main]
identification_title=PyWPS Processing Service
identification_abstract=PyWPS is an implementation of the Web Processing Service standard from the Open Geospatial Consortium. PyWPS is written in Python.
......@@ -196,5 +237,14 @@ Sample file
contact_instructions=During hours of service. Off on weekends.
contact_role=pointOfContact
[processing]
mode=default
[logging]
level=INFO
file=logs/pywps.log
database=sqlite:///logs/pywps-logs.sqlite3
format=%(asctime)s] [%(levelname)s] file=%(pathname)s line=%(lineno)s module=%(module)s function=%(funcName)s %(message)s
[grass]
gisbase=/usr/local/grass-7.3.svn/
......@@ -29,6 +29,7 @@ from pywps import Process, LiteralInput, ComplexOutput, ComplexInput, Format
from pywps.app.Common import Metadata
from pywps.validator.mode import MODE
from pywps.inout.formats import FORMATS
from pywps.response.status import WPS_STATUS