The **seeq** Python library is used to interface with Seeq Server ([http://www.seeq.com](http://www.seeq.com)).

**IMPORTANT:**

This module does **NOT** follow semantic versioning.

The major and minor version of this module needs to match the version of Seeq Server that you are using.
(Ignore the "R number" of the Seeq Server version - i.e. "R21", "R22" etc.)

PIP version matching can be used to select the correct version.

Here are some examples:

| Seeq Server Version | PIP Install Command           |
|---------------------|-------------------------------|
| R22.0.46.00         | `pip install -U seeq~=0.46.0` |
| R22.0.47.02         | `pip install -U seeq~=0.47.2` |

The last part of the version of this `seeq` module (the _Z_ of w.x.y.Z) is referred to as the
_functional version_ and refers to the level of functionality (and bug fixes) present in the package
for the SPy module. For example, `0.46.0.118` and `0.47.2.118` have the same level of SPy functionality
but are built for the respective versions of Seeq Server (R22.0.46.00 and R22.0.47.02). 

In order to keep the SPy testing and compatibility matrix manageable, the latest functional versions (v160+) are
published only for Seeq Server R22.0.46.xx and higher.  

# seeq.spy

The Seeq **SPy** module is a friendly set of functions that are optimized for use with
[Jupyter](https://jupyter.org), [Pandas](https://pandas.pydata.org/) and [NumPy](https://www.numpy.org/).

The SPy module is the best choice if you're trying to do any of the following:

- Search for signals, conditions, scalars, assets
- Pull data out of Seeq
- Import data in a programmatic way (when Seeq Workbench's *CSV Import* capability won't cut it)
- Calculate new data in Python and push it into Seeq
- Create an asset model

To start exploring the SPy module, execute the following lines of code in Jupyter:

```
from seeq import spy
spy.docs.copy()
```

Your Jupyter folder will now contain a `SPy Documentation` folder that has a *Tutorial* and *Command Reference*
notebook that will walk you through common activities.

For more advanced tasks, you may need to use the SDK module described below.

# seeq.sdk

The Seeq **SDK** module is a set of Python bindings for the Seeq Server REST API. You can experiment with the
REST API by selecting the *API Reference* menu item in the upper-right "hamburger" menu of Seeq Workbench.

Login is accomplished with the following pattern:

```
import seeq
import getpass

api_client = seeq.sdk.ApiClient('http://localhost:34216/api')

# Change this to False if you're getting errors related to SSL
seeq.sdk.Configuration().verify_ssl = True

auth_api = seeq.sdk.AuthApi(api_client)
auth_input = seeq.sdk.AuthInputV1()

# Use raw_input() instead of input() if you're using Python 2
auth_input.username = input('Username:').rstrip().lower()
auth_input.password = getpass.getpass()
auth_input.auth_provider_class = "Auth"
auth_input.auth_provider_id = "Seeq"
auth_api.login(body=auth_input)
```

The `api_client` object is then used as the argument to construct any API object you need, such as
`seeq.sdk.ItemsApi`. Each of the root endpoints that you see in the *API Reference* webpage corresponds
to a `seeq.sdk.XxxxxApi` class.

# Upgrade Considerations

## 0.49.XX.XXX

In Seeq Server R22.0.49.00, the ability to schedule the update of an Organizer Topic was added. As
a result, much of the internals of how Organizer Topic embedded content and date ranges are represented
changed.

If you have used `spy.workbooks.save()` in R22.0.48.XX and earlier to save a set of Organizer Topic
workbooks to disk, you will not be able to use those files in R22.0.49.00 and later.

Live Docs must now be specified by a `schedule` on the `TopicDocument` object. The `@Asset.DateRange`
decorator no longer honors the `Auto Refresh Rate` property. To specify a Live Doc, you must specify a
`schedule` dict for a TopicDocument by setting `document.schedule['Background'] = False`  and then
specifying a Cron expression like `schedule['Cron Schedule'] = '*/30 * * * * *'` (every thirty seconds).
Alternatively, you can specify a Scheduled Doc by setting `document.schedule['Background'] = True`. 

----------

In case you are looking for the Gencove package, it is available here: https://pypi.org/project/gencove/ 