Metadata-Version: 2.1
Name: py-ds-serial
Version: 0.1.0
Summary: ALBA Python Serial with tango DeviceServer
Home-page: https://github.com/catunlock/py_ds_serial
Author: Alberto López Sánchez
Author-email: ctbeamlines@cells.es
License: GNU General Public License v3
Keywords: py_ds_serial
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3.5
Description-Content-Type: text/markdown
Requires-Dist: connio
Provides-Extra: all
Requires-Dist: pytango ; extra == 'all'
Provides-Extra: tango
Requires-Dist: pytango ; extra == 'tango'

# ALBA Python Serial DeviceServer


[![ALBA Python Serial DeviceServer](https://img.shields.io/pypi/v/tango_serial.svg)](https://pypi.python.org/pypi/tango_serial)


[![ALBA Python Serial DeviceServer updates](https://pyup.io/repos/github/catunlock/tango_serial/shield.svg)](https://pyup.io/repos/github/catunlock/tango_serial/)


ALBA Python Serial with tango DeviceServer


Apart from the core library, an optional [tango](https://tango-controls.org/) device server is also provided.


## Installation

From within your favorite python environment type:

`$ pip install tango_serial`

## Library

The core of the tango_serial library consists of Serial object.
To create a Serial object you need to pass a communication object.

The communication object can be any object that supports a simple API
consisting of two methods (either the sync or async version is supported):

* `write_readline(buff: bytes) -> bytes` *or*

  `async write_readline(buff: bytes) -> bytes`

* `write(buff: bytes) -> None` *or*

  `async write(buff: bytes) -> None`

A library that supports this API is [sockio](https://pypi.org/project/sockio/)
(ALBA Python Serial DeviceServer comes pre-installed so you don't have to worry
about installing it).

This library includes both async and sync versions of the TCP object. It also
supports a set of features like re-connection and timeout handling.

Here is how to connect to a Serial controller:

```python
import asyncio

from sockio.aio import TCP
from tango_serial import Serial


async def main():
    tcp = TCP("192.168.1.123", 5000)  # use host name or IP
    tango_serial_dev = Serial(tcp)

    idn = await tango_serial_dev.idn()
    print("Connected to {} ({})".format(idn))


asyncio.run(main())
```

### Tango server

A [tango](https://tango-controls.org/) device server is also provided.

Make sure everything is installed with:

`$ pip install tango_serial[tango]`

Register a Serial tango server in the tango database:
```
$ tangoctl server add -s Serial/test -d Serial test/tango_serial/1
$ tangoctl device property write -d test/tango_serial/1 -p address -v "tcp://192.168.123:5000"
```

(the above example uses [tangoctl](https://pypi.org/project/tangoctl/). You would need
to install it with `pip install tangoctl` before using it. You are free to use any other
tango tool like [fandango](https://pypi.org/project/fandango/) or Jive)

Launch the server with:

```terminal
$ Serial test
```


## Credits

### Development Lead

* Alberto López Sánchez <alopez@cells.es>
* CTBeamlines (ctbeamlines@cells.es)

### Contributors

None yet. Why not be the first?


## History

### 0.1.0 (2020-12-15)

* First release on PyPI.


