Skip to content

Commit

Permalink
Merge pull request #3 from Lei-k/dev
Browse files Browse the repository at this point in the history
Bump version to 0.1.3
  • Loading branch information
Lei-k authored Jul 26, 2024
2 parents ab81b3d + 8f7f415 commit 65aac69
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 19 deletions.
2 changes: 1 addition & 1 deletion async_pyserial/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from async_pyserial.common import *

__version__ = '0.1.2'
__version__ = '0.1.3'

VERSION = __version__

Expand Down
39 changes: 34 additions & 5 deletions async_pyserial/common.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from typing import Callable

class EventEmitter:
def __init__(self) -> None:
self.listeners: dict[str, list] = {}
self.listeners: dict[str, list[Callable]] = {}

def emit(self, evt: str, *args, **kwargs):
if evt not in self.listeners:
Expand All @@ -11,11 +13,38 @@ def emit(self, evt: str, *args, **kwargs):
for listener in listeners:
listener(*args, **kwargs)

def on(self, evt: str, listener):
if evt not in self.listeners:
self.listeners[evt] = []
def on(self, evt: str, listener: Callable | None = None):

def decorator(listener: Callable):
if evt not in self.listeners:
self.listeners[evt] = []

self.listeners[evt].append(listener)
self.listeners[evt].append(listener)

if listener is None:
return decorator

decorator(listener=listener)

def remove_all_listeners(self, evt: str):
if evt not in self.listeners:
return

del self.listeners[evt]

def remove_listener(self, evt: str, listener: Callable):
if evt not in self.listeners:
return

self.listeners[evt].remove(listener)

if len(self.listeners[evt]) == 0:
del self.listeners[evt]

def off(self, evt: str, listener: Callable):
""" alias for remove_listener
"""
self.remove_listener(evt, listener=listener)

class PlatformNotSupported(Exception):
def __init__(self, *args: object) -> None:
Expand Down
2 changes: 1 addition & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
project = 'async-pyserial'
copyright = '2024, Neil Lei'
author = 'Neil Lei'
release = '0.1.2'
release = '0.1.3'

# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
Expand Down
12 changes: 6 additions & 6 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "async_pyserial"
version = "0.1.2"
version = "0.1.3"
description = "Python bindings for a C++ serial port library"
authors = ["Neil Lei <[email protected]>"]
readme = "README.rst"
Expand All @@ -10,7 +10,7 @@ python = "^3.10"

[project]
name = "async_pyserial"
version = "0.1.2"
version = "0.1.3"
description = "Python bindings for a C++ serial port library"
authors = [
{name = "Neil Lei", email = "[email protected]"}
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def get_pybind_include(user=False):

setup(
name='async_pyserial',
version='0.1.2',
version='0.1.3',
author='Neil Lei',
author_email='[email protected]',
description='Python bindings for a C++ serial port library',
Expand Down
54 changes: 52 additions & 2 deletions tests/test_event.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from async_pyserial import EventEmitter

def test_event_emitter():
def test_emit_event():
emitter = EventEmitter()

expected = b'Hello!'
Expand All @@ -10,4 +10,54 @@ def on_data(d):

emitter.on('data', on_data)

emitter.emit('data', expected)
emitter.emit('data', expected)

def test_decorator():
emitter = EventEmitter()

expected = b'Hello!'

@emitter.on('data')
def on_data(d):
assert d == expected

emitter.emit('data', expected)

def test_remove_listener():
emitter = EventEmitter()

def on_data():
# this func should not be call
assert False

emitter.on('data', on_data)

emitter.remove_listener('data', on_data)

emitter.emit('data')

def test_off():
emitter = EventEmitter()

def on_data():
# this func should not be call
assert False

emitter.on('data', on_data)

emitter.off('data', on_data)

emitter.emit('data')

def test_remove_all_listener():
emitter = EventEmitter()

def on_data():
# this func should not be call
assert False

emitter.on('data', on_data)

emitter.remove_all_listeners('data')

emitter.emit('data')
3 changes: 2 additions & 1 deletion tests/test_serialport.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ def test_serialport_open_close(virtual_serial_ports):
options = SerialPortOptions()
serial_port = SerialPort(port1, options)
serial_port.open()
assert os.path.exists(port1) # Ensure the port is created
serial_port.close()

# Test case for writing to SerialPort
Expand All @@ -57,7 +56,9 @@ def test_serialport_write(virtual_serial_ports):

with open(port2, 'rb') as f:
written_data = f.read(len(test_data))

assert written_data == test_data

serial_port.close()


Expand Down

0 comments on commit 65aac69

Please sign in to comment.