diff options
Diffstat (limited to 'python-aioserial.spec')
-rw-r--r-- | python-aioserial.spec | 643 |
1 files changed, 643 insertions, 0 deletions
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 |