summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-aioserial.spec643
-rw-r--r--sources1
3 files changed, 645 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..1feadc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/aioserial-1.3.1.tar.gz
diff --git a/python-aioserial.spec b/python-aioserial.spec
new file mode 100644
index 0000000..4dbd9af
--- /dev/null
+++ b/python-aioserial.spec
@@ -0,0 +1,643 @@
+%global _empty_manifest_terminate_build 0
+Name: python-aioserial
+Version: 1.3.1
+Release: 1
+Summary: An asynchronous serial port library of Python
+License: MPL-2.0
+URL: https://github.com/changyuheng/aioserial.py
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c1/0c/7aa5e4fdfc8353a06374ae768d9bd8f3d8109c5f1d6829906ba16fdd1a2d/aioserial-1.3.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-pyserial
+
+%description
+# aioserial
+
+* [Quick start](#quick-start)
+ + [A simple serial port reader](#a-simple-serial-port-reader)
+ + [pyserial-asyncio example replacement](#pyserial-asyncio-example-replacement)
+* [API](#api)
+ + [AioSerial](#aioserial)
+ - [Constructor](#constructor)
+ - [Methods](#methods)
+ * [read_async](#read-async)
+ * [read_until_async](#read-until-async)
+ * [readinto_async](#readinto-async)
+ * [readline_async](#readline-async)
+ * [readlines_async](#readlines-async)
+ * [write_async](#write-async)
+ * [writelines_async](#writelines-async)
+ + [Other APIs](#other-apis)
+* [Why aioserial?](#why-aioserial-)
+
+A Python package that combines [asyncio](https://docs.python.org/3/library/asyncio.html) and [pySerial](https://pypi.org/project/pyserial/).
+
+## Quick start
+
+### A simple serial port reader
+
+```py
+import asyncio
+
+import aioserial
+
+
+async def read_and_print(aioserial_instance: aioserial.AioSerial):
+ while True:
+ print((await aioserial_instance.read_async()).decode(errors='ignore'), end='', flush=True)
+
+asyncio.run(read_and_print(aioserial.AioSerial(port='COM1')))
+```
+
+### pyserial-asyncio example replacement
+
+**The example usage from pyserial-asyncio**
+
+https://pyserial-asyncio.readthedocs.io/en/latest/shortintro.html
+
+```py
+import asyncio
+import serial_asyncio
+
+class Output(asyncio.Protocol):
+ def connection_made(self, transport):
+ self.transport = transport
+ print('port opened', transport)
+ transport.serial.rts = False # You can manipulate Serial object via transport
+ transport.write(b'Hello, World!\n') # Write serial data via transport
+
+ def data_received(self, data):
+ print('data received', repr(data))
+ if b'\n' in data:
+ self.transport.close()
+
+ def connection_lost(self, exc):
+ print('port closed')
+ self.transport.loop.stop()
+
+ def pause_writing(self):
+ print('pause writing')
+ print(self.transport.get_write_buffer_size())
+
+ def resume_writing(self):
+ print(self.transport.get_write_buffer_size())
+ print('resume writing')
+
+loop = asyncio.get_event_loop()
+coro = serial_asyncio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
+loop.run_until_complete(coro)
+loop.run_forever()
+loop.close()
+```
+
+**aioserial equivalence**
+
+```py
+import asyncio
+
+import aioserial
+
+
+async def read_and_print(aioserial_instance: aioserial.AioSerial):
+ while True:
+ data: bytes = await aioserial_instance.read_async()
+ print(data.decode(errors='ignore'), end='', flush=True)
+ if b'\n' in data:
+ aioserial_instance.close()
+ break
+
+aioserial_instance: aioserial.AioSerial = aioserial.AioSerial(port='/dev/ttyUSB0', baudrate=115200)
+asyncio.run(asyncio.gather(read_and_print(aioserial_instance), aioserial_instance.write_async(b'Hello, World!\n')))
+```
+
+## API
+
+### AioSerial
+
+```py
+>>> import aioserial
+>>> import serial
+
+>>> isinstance(aioserial.AioSerial(), serial.Serial)
+True
+
+>>> issubclass(aioserial.AioSerial, serial.Serial)
+True
+
+>>> aioserial.Serial is serial.Serial
+True
+```
+
+#### Constructor
+
+```py
+aioserial_instance: aioserial.AioSerial = aioserial.AioSerial(
+ # ... same with what can be passed to serial.Serial ...,
+ loop: Optional[asyncio.AbstractEventLoop] = None,
+ cancel_read_timeout: int = 1,
+ cancel_write_timeout: int = 1)
+```
+
+#### Methods
+
+
+##### read_async
+
+```py
+bytes_read: bytes = \
+ await aioserial_instance.read_async(size: int = 1)
+```
+
+##### read_until_async
+
+```py
+at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.read_until_async(
+ expected: bytes = aioserial.LF, size: Optional[int] = None)
+```
+
+##### readinto_async
+
+```py
+number_of_byte_read: int = \
+ await aioserial_instance.readinto_async(b: Union[array.array, bytearray])
+```
+
+##### readline_async
+
+```py
+a_line_of_at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.readline_async(size: int = -1)
+```
+
+##### readlines_async
+
+```py
+lines_of_at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.readlines_async(hint: int = -1)
+```
+
+##### write_async
+
+```py
+number_of_byte_like_data_written: int = \
+ await aioserial_instance.write_async(bytes_like_data)
+```
+
+##### writelines_async
+
+```py
+number_of_byte_like_data_in_the_given_list_written: int = \
+ await aioserial_instance.writelines_async(list_of_bytes_like_data)
+```
+
+### Other APIs
+
+All the other APIs in the mother package [pySerial](https://pypi.org/project/pyserial/) are supported in aioserial as-is.
+
+## Why aioserial?
+
+* Want to use an asyncio-based but not a (self-built) thread-based serial library.
+* [pySerial-asyncio](https://pypi.org/project/pyserial-asyncio/) does [not support Windows](https://github.com/pyserial/pyserial-asyncio/issues/3).
+* APIs in all the other packages ([pySerial-asyncio](https://pypi.org/project/pyserial-asyncio/),
+ [asyncserial](https://pypi.org/project/asyncserial/)) that target the same goal are not designed in high level.
+
+
+%package -n python3-aioserial
+Summary: An asynchronous serial port library of Python
+Provides: python-aioserial
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-aioserial
+# aioserial
+
+* [Quick start](#quick-start)
+ + [A simple serial port reader](#a-simple-serial-port-reader)
+ + [pyserial-asyncio example replacement](#pyserial-asyncio-example-replacement)
+* [API](#api)
+ + [AioSerial](#aioserial)
+ - [Constructor](#constructor)
+ - [Methods](#methods)
+ * [read_async](#read-async)
+ * [read_until_async](#read-until-async)
+ * [readinto_async](#readinto-async)
+ * [readline_async](#readline-async)
+ * [readlines_async](#readlines-async)
+ * [write_async](#write-async)
+ * [writelines_async](#writelines-async)
+ + [Other APIs](#other-apis)
+* [Why aioserial?](#why-aioserial-)
+
+A Python package that combines [asyncio](https://docs.python.org/3/library/asyncio.html) and [pySerial](https://pypi.org/project/pyserial/).
+
+## Quick start
+
+### A simple serial port reader
+
+```py
+import asyncio
+
+import aioserial
+
+
+async def read_and_print(aioserial_instance: aioserial.AioSerial):
+ while True:
+ print((await aioserial_instance.read_async()).decode(errors='ignore'), end='', flush=True)
+
+asyncio.run(read_and_print(aioserial.AioSerial(port='COM1')))
+```
+
+### pyserial-asyncio example replacement
+
+**The example usage from pyserial-asyncio**
+
+https://pyserial-asyncio.readthedocs.io/en/latest/shortintro.html
+
+```py
+import asyncio
+import serial_asyncio
+
+class Output(asyncio.Protocol):
+ def connection_made(self, transport):
+ self.transport = transport
+ print('port opened', transport)
+ transport.serial.rts = False # You can manipulate Serial object via transport
+ transport.write(b'Hello, World!\n') # Write serial data via transport
+
+ def data_received(self, data):
+ print('data received', repr(data))
+ if b'\n' in data:
+ self.transport.close()
+
+ def connection_lost(self, exc):
+ print('port closed')
+ self.transport.loop.stop()
+
+ def pause_writing(self):
+ print('pause writing')
+ print(self.transport.get_write_buffer_size())
+
+ def resume_writing(self):
+ print(self.transport.get_write_buffer_size())
+ print('resume writing')
+
+loop = asyncio.get_event_loop()
+coro = serial_asyncio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
+loop.run_until_complete(coro)
+loop.run_forever()
+loop.close()
+```
+
+**aioserial equivalence**
+
+```py
+import asyncio
+
+import aioserial
+
+
+async def read_and_print(aioserial_instance: aioserial.AioSerial):
+ while True:
+ data: bytes = await aioserial_instance.read_async()
+ print(data.decode(errors='ignore'), end='', flush=True)
+ if b'\n' in data:
+ aioserial_instance.close()
+ break
+
+aioserial_instance: aioserial.AioSerial = aioserial.AioSerial(port='/dev/ttyUSB0', baudrate=115200)
+asyncio.run(asyncio.gather(read_and_print(aioserial_instance), aioserial_instance.write_async(b'Hello, World!\n')))
+```
+
+## API
+
+### AioSerial
+
+```py
+>>> import aioserial
+>>> import serial
+
+>>> isinstance(aioserial.AioSerial(), serial.Serial)
+True
+
+>>> issubclass(aioserial.AioSerial, serial.Serial)
+True
+
+>>> aioserial.Serial is serial.Serial
+True
+```
+
+#### Constructor
+
+```py
+aioserial_instance: aioserial.AioSerial = aioserial.AioSerial(
+ # ... same with what can be passed to serial.Serial ...,
+ loop: Optional[asyncio.AbstractEventLoop] = None,
+ cancel_read_timeout: int = 1,
+ cancel_write_timeout: int = 1)
+```
+
+#### Methods
+
+
+##### read_async
+
+```py
+bytes_read: bytes = \
+ await aioserial_instance.read_async(size: int = 1)
+```
+
+##### read_until_async
+
+```py
+at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.read_until_async(
+ expected: bytes = aioserial.LF, size: Optional[int] = None)
+```
+
+##### readinto_async
+
+```py
+number_of_byte_read: int = \
+ await aioserial_instance.readinto_async(b: Union[array.array, bytearray])
+```
+
+##### readline_async
+
+```py
+a_line_of_at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.readline_async(size: int = -1)
+```
+
+##### readlines_async
+
+```py
+lines_of_at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.readlines_async(hint: int = -1)
+```
+
+##### write_async
+
+```py
+number_of_byte_like_data_written: int = \
+ await aioserial_instance.write_async(bytes_like_data)
+```
+
+##### writelines_async
+
+```py
+number_of_byte_like_data_in_the_given_list_written: int = \
+ await aioserial_instance.writelines_async(list_of_bytes_like_data)
+```
+
+### Other APIs
+
+All the other APIs in the mother package [pySerial](https://pypi.org/project/pyserial/) are supported in aioserial as-is.
+
+## Why aioserial?
+
+* Want to use an asyncio-based but not a (self-built) thread-based serial library.
+* [pySerial-asyncio](https://pypi.org/project/pyserial-asyncio/) does [not support Windows](https://github.com/pyserial/pyserial-asyncio/issues/3).
+* APIs in all the other packages ([pySerial-asyncio](https://pypi.org/project/pyserial-asyncio/),
+ [asyncserial](https://pypi.org/project/asyncserial/)) that target the same goal are not designed in high level.
+
+
+%package help
+Summary: Development documents and examples for aioserial
+Provides: python3-aioserial-doc
+%description help
+# aioserial
+
+* [Quick start](#quick-start)
+ + [A simple serial port reader](#a-simple-serial-port-reader)
+ + [pyserial-asyncio example replacement](#pyserial-asyncio-example-replacement)
+* [API](#api)
+ + [AioSerial](#aioserial)
+ - [Constructor](#constructor)
+ - [Methods](#methods)
+ * [read_async](#read-async)
+ * [read_until_async](#read-until-async)
+ * [readinto_async](#readinto-async)
+ * [readline_async](#readline-async)
+ * [readlines_async](#readlines-async)
+ * [write_async](#write-async)
+ * [writelines_async](#writelines-async)
+ + [Other APIs](#other-apis)
+* [Why aioserial?](#why-aioserial-)
+
+A Python package that combines [asyncio](https://docs.python.org/3/library/asyncio.html) and [pySerial](https://pypi.org/project/pyserial/).
+
+## Quick start
+
+### A simple serial port reader
+
+```py
+import asyncio
+
+import aioserial
+
+
+async def read_and_print(aioserial_instance: aioserial.AioSerial):
+ while True:
+ print((await aioserial_instance.read_async()).decode(errors='ignore'), end='', flush=True)
+
+asyncio.run(read_and_print(aioserial.AioSerial(port='COM1')))
+```
+
+### pyserial-asyncio example replacement
+
+**The example usage from pyserial-asyncio**
+
+https://pyserial-asyncio.readthedocs.io/en/latest/shortintro.html
+
+```py
+import asyncio
+import serial_asyncio
+
+class Output(asyncio.Protocol):
+ def connection_made(self, transport):
+ self.transport = transport
+ print('port opened', transport)
+ transport.serial.rts = False # You can manipulate Serial object via transport
+ transport.write(b'Hello, World!\n') # Write serial data via transport
+
+ def data_received(self, data):
+ print('data received', repr(data))
+ if b'\n' in data:
+ self.transport.close()
+
+ def connection_lost(self, exc):
+ print('port closed')
+ self.transport.loop.stop()
+
+ def pause_writing(self):
+ print('pause writing')
+ print(self.transport.get_write_buffer_size())
+
+ def resume_writing(self):
+ print(self.transport.get_write_buffer_size())
+ print('resume writing')
+
+loop = asyncio.get_event_loop()
+coro = serial_asyncio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
+loop.run_until_complete(coro)
+loop.run_forever()
+loop.close()
+```
+
+**aioserial equivalence**
+
+```py
+import asyncio
+
+import aioserial
+
+
+async def read_and_print(aioserial_instance: aioserial.AioSerial):
+ while True:
+ data: bytes = await aioserial_instance.read_async()
+ print(data.decode(errors='ignore'), end='', flush=True)
+ if b'\n' in data:
+ aioserial_instance.close()
+ break
+
+aioserial_instance: aioserial.AioSerial = aioserial.AioSerial(port='/dev/ttyUSB0', baudrate=115200)
+asyncio.run(asyncio.gather(read_and_print(aioserial_instance), aioserial_instance.write_async(b'Hello, World!\n')))
+```
+
+## API
+
+### AioSerial
+
+```py
+>>> import aioserial
+>>> import serial
+
+>>> isinstance(aioserial.AioSerial(), serial.Serial)
+True
+
+>>> issubclass(aioserial.AioSerial, serial.Serial)
+True
+
+>>> aioserial.Serial is serial.Serial
+True
+```
+
+#### Constructor
+
+```py
+aioserial_instance: aioserial.AioSerial = aioserial.AioSerial(
+ # ... same with what can be passed to serial.Serial ...,
+ loop: Optional[asyncio.AbstractEventLoop] = None,
+ cancel_read_timeout: int = 1,
+ cancel_write_timeout: int = 1)
+```
+
+#### Methods
+
+
+##### read_async
+
+```py
+bytes_read: bytes = \
+ await aioserial_instance.read_async(size: int = 1)
+```
+
+##### read_until_async
+
+```py
+at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.read_until_async(
+ expected: bytes = aioserial.LF, size: Optional[int] = None)
+```
+
+##### readinto_async
+
+```py
+number_of_byte_read: int = \
+ await aioserial_instance.readinto_async(b: Union[array.array, bytearray])
+```
+
+##### readline_async
+
+```py
+a_line_of_at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.readline_async(size: int = -1)
+```
+
+##### readlines_async
+
+```py
+lines_of_at_most_certain_size_of_bytes_read: bytes = \
+ await aioserial_instance.readlines_async(hint: int = -1)
+```
+
+##### write_async
+
+```py
+number_of_byte_like_data_written: int = \
+ await aioserial_instance.write_async(bytes_like_data)
+```
+
+##### writelines_async
+
+```py
+number_of_byte_like_data_in_the_given_list_written: int = \
+ await aioserial_instance.writelines_async(list_of_bytes_like_data)
+```
+
+### Other APIs
+
+All the other APIs in the mother package [pySerial](https://pypi.org/project/pyserial/) are supported in aioserial as-is.
+
+## Why aioserial?
+
+* Want to use an asyncio-based but not a (self-built) thread-based serial library.
+* [pySerial-asyncio](https://pypi.org/project/pyserial-asyncio/) does [not support Windows](https://github.com/pyserial/pyserial-asyncio/issues/3).
+* APIs in all the other packages ([pySerial-asyncio](https://pypi.org/project/pyserial-asyncio/),
+ [asyncserial](https://pypi.org/project/asyncserial/)) that target the same goal are not designed in high level.
+
+
+%prep
+%autosetup -n aioserial-1.3.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-aioserial -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..cc02499
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+69ce0649158882637099a60417d6a47b aioserial-1.3.1.tar.gz