Skip to content

Commit

Permalink
RF: add keyword arguments decorator (warn_on_args_to_kwargs) in the m…
Browse files Browse the repository at this point in the history
…odule: stream (#909)
  • Loading branch information
WassCodeur authored Jul 14, 2024
1 parent 6830ddf commit c6b1a1d
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 51 deletions.
13 changes: 10 additions & 3 deletions fury/stream/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import numpy as np
import vtk

from fury.decorators import warn_on_args_to_kwargs
from fury.stream.constants import PY_VERSION_8, _CQUEUE
from fury.stream.tools import (
ArrayCircularQueue,
Expand Down Expand Up @@ -47,9 +48,11 @@ def callback_stream_client(stream_client):
class FuryStreamClient:
"""This obj is responsible to create a StreamClient."""

@warn_on_args_to_kwargs()
def __init__(
self,
showm,
*,
max_window_size=None,
use_raw_array=True,
whithout_iren_start=False,
Expand Down Expand Up @@ -119,7 +122,8 @@ def __init__(
self.use_raw_array = use_raw_array
self._started = False

def start(self, ms=0, use_asyncio=False):
@warn_on_args_to_kwargs()
def start(self, *, ms=0, use_asyncio=False):
"""Start the stream client.
Parameters
Expand All @@ -134,6 +138,7 @@ def start(self, ms=0, use_asyncio=False):
"""

@warn_on_args_to_kwargs()
def callback_for_vtk(caller, event, *args, **kwargs):
callback_stream_client(**{"stream_client": kwargs["stream_client"]})

Expand Down Expand Up @@ -270,8 +275,9 @@ def interaction_callback(circular_queue, showm, iren, render_after):
class FuryStreamInteraction:
"""This obj. is responsible to manage the user interaction"""

@warn_on_args_to_kwargs()
def __init__(
self, showm, max_queue_size=50, use_raw_array=True, whithout_iren_start=False
self, showm, *, max_queue_size=50, use_raw_array=True, whithout_iren_start=False
):
"""Initialize the StreamInteraction obj.
Expand Down Expand Up @@ -306,7 +312,8 @@ def __init__(
self._whithout_iren_start = whithout_iren_start
self._started = False

def start(self, ms=3, use_asyncio=False):
@warn_on_args_to_kwargs()
def start(self, *, ms=3, use_asyncio=False):
"""Start the stream interaction client.
Parameters
Expand Down
4 changes: 4 additions & 0 deletions fury/stream/server/async_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from aiohttp import MultipartWriter, WSCloseCode, web
import numpy as np

from fury.decorators import warn_on_args_to_kwargs

try:
from aiortc import RTCPeerConnection, RTCSessionDescription
from aiortc.contrib.media import MediaRelay
Expand Down Expand Up @@ -215,7 +217,9 @@ async def websocket_handler(request, **kwargs):
return ws


@warn_on_args_to_kwargs()
def get_app(
*,
rtc_server=None,
folder=None,
circular_queue=None,
Expand Down
9 changes: 7 additions & 2 deletions fury/stream/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from aiohttp import web
import numpy as np

from fury.decorators import warn_on_args_to_kwargs
from fury.stream.constants import PY_VERSION_8, _CQUEUE
from fury.stream.server.async_app import get_app
from fury.stream.tools import (
Expand Down Expand Up @@ -111,7 +112,9 @@ def release(self):
pass


@warn_on_args_to_kwargs()
def web_server_raw_array(
*,
image_buffers=None,
info_buffer=None,
queue_head_tail_buffer=None,
Expand Down Expand Up @@ -183,7 +186,7 @@ def web_server_raw_array(
)

app_fury = get_app(
rtc_server,
rtc_server=rtc_server,
circular_queue=circular_queue,
image_buffer_manager=image_buffer_manager,
provides_mjpeg=provides_mjpeg,
Expand All @@ -201,7 +204,9 @@ def web_server_raw_array(
image_buffer_manager.cleanup()


@warn_on_args_to_kwargs()
def web_server(
*,
image_buffer_names=None,
info_buffer_name=None,
queue_head_tail_buffer_name=None,
Expand Down Expand Up @@ -280,7 +285,7 @@ def web_server(
)

app_fury = get_app(
rtc_server,
rtc_server=rtc_server,
circular_queue=circular_queue,
image_buffer_manager=image_buffer_manager,
provides_mjpeg=provides_mjpeg,
Expand Down
56 changes: 43 additions & 13 deletions fury/stream/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from PIL import Image, ImageDraw
import numpy as np

from fury.decorators import warn_on_args_to_kwargs
from fury.stream.constants import PY_VERSION_8

if PY_VERSION_8:
Expand Down Expand Up @@ -65,7 +66,8 @@ def fix_unregister(name, rtype):
class GenericMultiDimensionalBuffer(ABC):
"""This implements a abstract (generic) multidimensional buffer."""

def __init__(self, max_size=None, dimension=8):
@warn_on_args_to_kwargs()
def __init__(self, *, max_size=None, dimension=8):
"""Initialize the multidimensional buffer.
Parameters
Expand Down Expand Up @@ -129,7 +131,8 @@ def cleanup(self): ... # pragma: no cover
class RawArrayMultiDimensionalBuffer(GenericMultiDimensionalBuffer):
"""This implements a multidimensional buffer with RawArray."""

def __init__(self, max_size, dimension=4, buffer=None):
@warn_on_args_to_kwargs()
def __init__(self, max_size, *, dimension=4, buffer=None):
"""Stream system uses that to implement the CircularQueue
with shared memory resources.
Expand All @@ -147,7 +150,7 @@ def __init__(self, max_size, dimension=4, buffer=None):
a already created RawArray
"""
super().__init__(max_size, dimension)
super().__init__(max_size=max_size, dimension=dimension)
if buffer is None:
self.create_mem_resource()
else:
Expand Down Expand Up @@ -178,7 +181,8 @@ class SharedMemMultiDimensionalBuffer(GenericMultiDimensionalBuffer):
with SharedMemory.
"""

def __init__(self, max_size, dimension=4, buffer_name=None):
@warn_on_args_to_kwargs()
def __init__(self, max_size, *, dimension=4, buffer_name=None):
"""Stream system uses that to implement the
CircularQueue with shared memory resources.
Expand All @@ -193,7 +197,7 @@ def __init__(self, max_size, dimension=4, buffer_name=None):
a already created SharedMemory
"""
super().__init__(max_size, dimension)
super().__init__(max_size=max_size, dimension=dimension)
if buffer_name is None:
self.create_mem_resource()
self._created = True
Expand Down Expand Up @@ -271,8 +275,10 @@ class GenericCircularQueue(ABC):
shared memory resources.
"""

@warn_on_args_to_kwargs()
def __init__(
self,
*,
max_size=None,
dimension=8,
use_shared_mem=False,
Expand Down Expand Up @@ -389,7 +395,8 @@ class ArrayCircularQueue(GenericCircularQueue):
Arrays and RawArrays.
"""

def __init__(self, max_size=10, dimension=6, head_tail_buffer=None, buffer=None):
@warn_on_args_to_kwargs()
def __init__(self, *, max_size=10, dimension=6, head_tail_buffer=None, buffer=None):
"""Stream system uses that to implement user interactions
Parameters
Expand All @@ -410,7 +417,12 @@ def __init__(self, max_size=10, dimension=6, head_tail_buffer=None, buffer=None)
RawArray to store the data
"""
super().__init__(max_size, dimension, use_shared_mem=False, buffer=buffer)
super().__init__(
max_size=max_size,
dimension=dimension,
use_shared_mem=False,
buffer=buffer,
)

if head_tail_buffer is None:
self.create_mem_resource()
Expand Down Expand Up @@ -456,8 +468,9 @@ class SharedMemCircularQueue(GenericCircularQueue):
SharedMemory.
"""

@warn_on_args_to_kwargs()
def __init__(
self, max_size=10, dimension=6, head_tail_buffer_name=None, buffer_name=None
self, *, max_size=10, dimension=6, head_tail_buffer_name=None, buffer_name=None
):
"""Stream system uses that to implement user interactions
Expand All @@ -479,7 +492,10 @@ def __init__(
"""
super().__init__(
max_size, dimension, use_shared_mem=True, buffer_name=buffer_name
max_size=max_size,
dimension=dimension,
use_shared_mem=True,
buffer_name=buffer_name,
)

if head_tail_buffer_name is None:
Expand Down Expand Up @@ -564,7 +580,8 @@ class GenericImageBufferManager(ABC):
the n-buffer technique.
"""

def __init__(self, max_window_size=None, num_buffers=2, use_shared_mem=False):
@warn_on_args_to_kwargs()
def __init__(self, *, max_window_size=None, num_buffers=2, use_shared_mem=False):
"""Initialize the ImageBufferManager.
Parameters
Expand Down Expand Up @@ -669,7 +686,8 @@ def get_jpeg(self):

return bytes_img

async def async_get_jpeg(self, ms=33):
@warn_on_args_to_kwargs()
async def async_get_jpeg(self, *, ms=33):
jpeg = self.get_jpeg()
await asyncio.sleep(ms / 1000)
return jpeg
Expand All @@ -690,8 +708,10 @@ def cleanup(self):
class RawArrayImageBufferManager(GenericImageBufferManager):
"""This implements an ImageBufferManager using RawArrays."""

@warn_on_args_to_kwargs()
def __init__(
self,
*,
max_window_size=(100, 100),
num_buffers=2,
image_buffers=None,
Expand All @@ -714,7 +734,11 @@ def __init__(
A list of buffers with each one containing a frame.
"""
super().__init__(max_window_size, num_buffers, use_shared_mem=False)
super().__init__(
max_window_size=max_window_size,
num_buffers=num_buffers,
use_shared_mem=False,
)
if image_buffers is None or info_buffer is None:
self.create_mem_resource()
else:
Expand Down Expand Up @@ -767,8 +791,10 @@ class SharedMemImageBufferManager(GenericImageBufferManager):
SharedMemory approach.
"""

@warn_on_args_to_kwargs()
def __init__(
self,
*,
max_window_size=(100, 100),
num_buffers=2,
image_buffer_names=None,
Expand All @@ -795,7 +821,11 @@ def __init__(
Python >=3.8 is a requirement to use this object.
"""
super().__init__(max_window_size, num_buffers, use_shared_mem=True)
super().__init__(
max_window_size=max_window_size,
num_buffers=num_buffers,
use_shared_mem=True,
)
if image_buffer_names is None or info_buffer_name is None:
self.create_mem_resource()
self._created = True
Expand Down
15 changes: 11 additions & 4 deletions fury/stream/widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
except ImportError:
IPYTHON_AVAILABLE = False

from fury.decorators import warn_on_args_to_kwargs
from fury.stream.client import FuryStreamClient, FuryStreamInteraction
from fury.stream.constants import PY_VERSION_8

Expand Down Expand Up @@ -46,9 +47,11 @@ class Widget:
using the SharedMemory object from Python multiprocessing.
"""

@warn_on_args_to_kwargs()
def __init__(
self,
showm,
*,
ms_stream=33,
ms_interaction=33,
host="localhost",
Expand Down Expand Up @@ -130,7 +133,8 @@ def command_string(self):
s += ")"
return s

def _start_fury_client(self, use_asyncio=False):
@warn_on_args_to_kwargs()
def _start_fury_client(self, *, use_asyncio=False):
"""Start the fury image buffer client and the interaction client
Parameters
Expand Down Expand Up @@ -193,12 +197,14 @@ def url(self):
url += f"?iframe=1&encoding={self.encoding}"
return url

def return_iframe(self, height=200):
@warn_on_args_to_kwargs()
def return_iframe(self, *, height=200):
"""Return the jupyter div iframe used to show the stream"""
if IPYTHON_AVAILABLE:
display(IFrame(self.url, "100%", f"{int(height)}px"))

def start(self, use_asyncio=False):
@warn_on_args_to_kwargs()
def start(self, *, use_asyncio=False):
"""Start the fury client and the interaction client and return the url
Parameters
Expand All @@ -215,7 +221,8 @@ def start(self, use_asyncio=False):
return False
print(f"url: {self.url}")

def display(self, height=150):
@warn_on_args_to_kwargs()
def display(self, *, height=150):
"""Start the server and display the url in an iframe"""
self._start_fury_client()
ok = self.run_command()
Expand Down
Loading

0 comments on commit c6b1a1d

Please sign in to comment.