5555 # flags argument: LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
5656 # cf. https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa
5757 backend = CDLL (dll , 0x00001000 | 0x00000100 )
58- except Exception as e :
58+ except Exception as e : # pyre-ignore
5959 if not os .path .isabs (dll ): # can only be find_library, not the "look next to mpv.py" thing
6060 raise OSError (f'ctypes.find_library found mpv.dll at { dll } , but ctypes.CDLL could not load it. It looks like find_library found mpv.dll under a relative path entry in %PATH%. Please make sure all paths in %PATH% are absolute. Instead of trying to load mpv.dll from the current working directory, put it somewhere next to your script and add that path to %PATH% using os.environ["PATH"] = os.path.dirname(__file__) + os.pathsep + os.environ["PATH"]' ) from e
6161 else :
@@ -163,7 +163,7 @@ def raise_for_ec(kls, ec, func, *args): # type: ignore
163163 if ex :
164164 raise ex
165165
166- MpvGlGetProcAddressFn = CFUNCTYPE (c_void_p , c_void_p , c_char_p )
166+ MpvGlGetProcAddressFn = CFUNCTYPE (c_void_p , c_void_p , c_char_p ) # pyre-ignore
167167class MpvOpenGLInitParams (Structure ):
168168 _fields_ = [('get_proc_address' , MpvGlGetProcAddressFn ),
169169 ('get_proc_address_ctx' , c_void_p ),
@@ -251,10 +251,10 @@ def __init__(self, name, value=None):
251251 self .value = value
252252 self .data = cast (c_char_p (value .encode ('utf-8' )), c_void_p ) # type: ignore
253253 elif cons is bytes :
254- self .value = MpvByteArray (value )
254+ self .value = MpvByteArray (value ) # pyre-ignore
255255 self .data = cast (pointer (self .value ), c_void_p )
256256 elif cons is bool :
257- self .value = c_int (int (bool (value )))
257+ self .value = c_int (int (bool (value ))) # pyre-ignore
258258 self .data = cast (pointer (self .value ), c_void_p )
259259 elif cons is c_void_p :
260260 self .value = value
@@ -264,8 +264,8 @@ def __init__(self, name, value=None):
264264 self .data = cast (pointer (self .value ), c_void_p )
265265
266266def kwargs_to_render_param_array (kwargs ):
267- t = MpvRenderParam * (len (kwargs )+ 1 )
268- return t (* kwargs .items (), ('invalid' , None ))
267+ t = MpvRenderParam * (len (kwargs )+ 1 ) # pyre-ignore
268+ return t (* kwargs .items (), ('invalid' , None )) # pyre-ignore
269269
270270class MpvFormat (c_int ):
271271 NONE = 0
@@ -346,7 +346,7 @@ def __init__(self, value):
346346 self .size = len (value )
347347
348348 def bytes_value (self ):
349- return cast (self .data , POINTER (c_char ))[:self .size ]
349+ return cast (self .data , POINTER (c_char ))[:self .size ] # pyre-ignore
350350
351351class MpvNode (Structure ):
352352 def node_value (self , decoder = identity_decoder ):
@@ -415,7 +415,7 @@ def data(self):
415415 MpvEventID .HOOK : MpvEventHook ,
416416 MpvEventID .COMMAND_REPLY : MpvEventCommand ,
417417 }.get (self .event_id .value )
418- return cast (self ._data , POINTER (dtype )).contents if dtype else None
418+ return cast (self ._data , POINTER (dtype )).contents if dtype else None # pyre-ignore
419419
420420 def as_dict (self , decoder = identity_decoder ):
421421 out = cast (create_string_buffer (sizeof (MpvNode )), POINTER (MpvNode ))
@@ -504,11 +504,11 @@ class MpvEventHook(Structure):
504504 def name (self ):
505505 return self ._name .decode ("utf-8" )
506506
507- StreamReadFn = CFUNCTYPE (c_int64 , c_void_p , POINTER (c_char ), c_uint64 )
508- StreamSeekFn = CFUNCTYPE (c_int64 , c_void_p , c_int64 )
509- StreamSizeFn = CFUNCTYPE (c_int64 , c_void_p )
510- StreamCloseFn = CFUNCTYPE (None , c_void_p )
511- StreamCancelFn = CFUNCTYPE (None , c_void_p )
507+ StreamReadFn = CFUNCTYPE (c_int64 , c_void_p , POINTER (c_char ), c_uint64 ) # pyre-ignore
508+ StreamSeekFn = CFUNCTYPE (c_int64 , c_void_p , c_int64 ) # pyre-ignore
509+ StreamSizeFn = CFUNCTYPE (c_int64 , c_void_p ) # pyre-ignore
510+ StreamCloseFn = CFUNCTYPE (None , c_void_p ) # pyre-ignore
511+ StreamCancelFn = CFUNCTYPE (None , c_void_p ) # pyre-ignore
512512
513513class StreamCallbackInfo (Structure ):
514514 _fields_ = [('cookie' , c_void_p ),
@@ -518,11 +518,11 @@ class StreamCallbackInfo(Structure):
518518 ('close' , StreamCloseFn ),
519519 ('cancel' , StreamCancelFn )]
520520
521- StreamOpenFn = CFUNCTYPE (c_int , c_void_p , c_char_p , POINTER (StreamCallbackInfo ))
521+ StreamOpenFn = CFUNCTYPE (c_int , c_void_p , c_char_p , POINTER (StreamCallbackInfo )) # pyre-ignore
522522
523- WakeupCallback = CFUNCTYPE (None , c_void_p )
523+ WakeupCallback = CFUNCTYPE (None , c_void_p ) # pyre-ignore
524524
525- RenderUpdateFn = CFUNCTYPE (None , c_void_p )
525+ RenderUpdateFn = CFUNCTYPE (None , c_void_p ) # pyre-ignore
526526
527527def _handle_func (name , args , restype , errcheck , ctx = MpvHandle , deprecated = False ):
528528 func = getattr (backend , name )
@@ -565,7 +565,7 @@ def _mpv_client_api_version():
565565
566566MPV_VERSION = _mpv_client_api_version ()
567567if MPV_VERSION < (1 , 108 ):
568- ver = '.' .join (str (num ) for num in MPV_VERSION )
568+ ver = '.' .join (str (num ) for num in MPV_VERSION ) # pyre-ignore
569569 raise RuntimeError (f"python-mpv requires libmpv with an API version of 1.108 or higher (libmpv >= 0.33), but you have an older version ({ ver } )." )
570570
571571backend .mpv_free .argtypes = [c_void_p ]
@@ -661,7 +661,7 @@ def _make_node_str_list(l):
661661 node_list = MpvNodeList (
662662 num = len (l ),
663663 keys = None ,
664- values = ( MpvNode * len (l ))( * [ MpvNode (
664+ values = ( MpvNode * len (l ))( * [ MpvNode ( # pyre-ignore
665665 format = MpvFormat .STRING ,
666666 val = MpvNodeUnion (string = p ))
667667 for p in char_ps ]))
@@ -675,8 +675,8 @@ def _make_node_str_map(d):
675675 char_ps = [ (c_char_p (k .encode ('utf-8' )), c_char_p (_mpv_coax_proptype (v , str ))) for k , v in d .items () ]
676676 node_list = MpvNodeList (
677677 num = len (d ),
678- keys = ( c_char_p * len (d ))( * [k for k , v in char_ps ] ),
679- values = ( MpvNode * len (d ))( * [ MpvNode (
678+ keys = ( c_char_p * len (d ))( * [k for k , v in char_ps ] ), # pyre-ignore
679+ values = ( MpvNode * len (d ))( * [ MpvNode ( # pyre-ignore
680680 format = MpvFormat .STRING ,
681681 val = MpvNodeUnion (string = v ))
682682 for k , v in char_ps ]))
@@ -697,7 +697,7 @@ def _event_generator(handle):
697697def _create_null_term_cmd_arg_array (name , args ):
698698 args = [name .encode ('utf-8' )] + [(arg if type (arg ) is bytes else str (arg ).encode ('utf-8' ))
699699 for arg in args if arg is not None ] + [None ]
700- return (c_char_p * len (args ))(* args )
700+ return (c_char_p * len (args ))(* args ) # pyre-ignore
701701
702702
703703_py_to_mpv = lambda name : name .replace ('_' , '-' )
@@ -751,28 +751,28 @@ def __init__(self, generator_fun, size=None):
751751 self .size = size
752752
753753 def seek (self , offset ):
754- self ._read_iter = iter (self ._generator_fun ())
755- self ._read_chunk = b''
754+ self ._read_iter = iter (self ._generator_fun ()) # pyre-ignore
755+ self ._read_chunk = b'' # pyre-ignore
756756 return 0 # We only support seeking to the first byte atm
757757 # implementation in case seeking to arbitrary offsets would be necessary
758758 # while offset > 0:
759759 # offset -= len(self.read(offset))
760760 # return offset
761761
762762 def read (self , size ):
763- if not self ._read_chunk :
763+ if not self ._read_chunk : # pyre-ignore
764764 try :
765- self ._read_chunk += next (self ._read_iter )
765+ self ._read_chunk += next (self ._read_iter ) # pyre-ignore
766766 except StopIteration :
767767 return b''
768768 rv , self ._read_chunk = self ._read_chunk [:size ], self ._read_chunk [size :]
769769 return rv
770770
771771 def close (self ):
772- self ._read_iter = iter ([]) # make next read() call return EOF
772+ self ._read_iter = iter ([]) # make next read() call return EOF # pyre-ignore
773773
774774 def cancel (self ):
775- self ._read_iter = iter ([]) # make next read() call return EOF
775+ self ._read_iter = iter ([]) # make next read() call return EOF # pyre-ignore
776776
777777
778778class ImageOverlay :
@@ -785,10 +785,10 @@ def __init__(self, m, overlay_id, img=None, pos=(0, 0)):
785785 self .update (img )
786786
787787 def update (self , img = None , pos = None ):
788- from PIL import Image
788+ from PIL import Image # pyre-ignore
789789 if img is not None :
790- self .img = img
791- img = self .img
790+ self .img = img # pyre-ignore
791+ img = self .img # pyre-ignore
792792
793793 w , h = img .size
794794 stride = w * 4
@@ -803,11 +803,11 @@ def update(self, img=None, pos=None):
803803
804804 # Copy image to ctypes buffer
805805 if img .size != self ._size :
806- self ._buf = create_string_buffer (w * h * 4 )
806+ self ._buf = create_string_buffer (w * h * 4 ) # pyre-ignore
807807 self ._size = img .size
808808
809- ctypes .memmove (self ._buf , out .tobytes ('raw' , 'BGRA' ), w * h * 4 )
810- source = '&' + str (addressof (self ._buf ))
809+ ctypes .memmove (self ._buf , out .tobytes ('raw' , 'BGRA' ), w * h * 4 ) # pyre-ignore
810+ source = '&' + str (addressof (self ._buf )) # pyre-ignore
811811
812812 self .m .overlay_add (self .overlay_id , x , y , source , 0 , 'bgra' , w , h , stride )
813813
@@ -827,7 +827,7 @@ def __init__(self, m, overlay_id, filename=None, size=None, stride=None, pos=(0,
827827
828828 def update (self , filename = None , size = None , stride = None , pos = None ):
829829 if filename is not None :
830- self .filename = filename
830+ self .filename = filename # pyre-ignore
831831
832832 if pos is not None :
833833 self .pos = pos
@@ -842,7 +842,7 @@ def update(self, filename=None, size=None, stride=None, pos=None):
842842 w , h = self .size # type: ignore
843843 stride = self .stride or 4 * w
844844
845- self .m .overlay_add (self , self .overlay_id , x , y , self .filename , 0 , 'bgra' , w , h , stride )
845+ self .m .overlay_add (self , self .overlay_id , x , y , self .filename , 0 , 'bgra' , w , h , stride ) # pyre-ignore
846846
847847 def remove (self ):
848848 self .m .remove_overlay (self .overlay_id )
@@ -910,9 +910,9 @@ def __init__(self, *extra_mpv_flags, log_handler=None, start_event_thread=True,
910910 if loglevel is not None or log_handler is not None :
911911 self .set_loglevel (loglevel or 'terminal-default' )
912912 if start_event_thread :
913- self ._event_thread = threading .Thread (target = self ._loop , name = 'MPVEventHandlerThread' )
914- self ._event_thread .daemon = True
915- self ._event_thread .start ()
913+ self ._event_thread = threading .Thread (target = self ._loop , name = 'MPVEventHandlerThread' ) # pyre-ignore
914+ self ._event_thread .daemon = True # pyre-ignore
915+ self ._event_thread .start () # pyre-ignore
916916 else :
917917 self ._event_thread = None
918918 if (m := re .search (r'(\d+)\.(\d+)\.(\d+)' , self .mpv_version )): # type: ignore
@@ -976,13 +976,13 @@ def _loop(self):
976976 # cache list, since error handlers will unregister themselves
977977 for cb in list (self ._command_reply_callbacks .values ()):
978978 with self ._enqueue_exceptions ():
979- cb (EventOverflowError ('libmpv event queue has flown over because events have not been processed fast enough' ), None )
979+ cb (EventOverflowError ('libmpv event queue has flown over because events have not been processed fast enough' ), None ) # pyre-ignore
980980
981981 if eid == MpvEventID .SHUTDOWN :
982982 _mpv_destroy (self ._event_handle ) # type: ignore
983983 for cb in list (self ._command_reply_callbacks .values ()):
984984 with self ._enqueue_exceptions ():
985- cb (ShutdownError ('libmpv core has been shutdown' ), None )
985+ cb (ShutdownError ('libmpv core has been shutdown' ), None ) # pyre-ignore
986986 return
987987
988988 except Exception as e :
@@ -1217,7 +1217,7 @@ def terminate(self):
12171217 else :
12181218 _mpv_terminate_destroy (handle ) # type: ignore
12191219 if self ._event_thread :
1220- self ._event_thread .join ()
1220+ self ._event_thread .join () # pyre-ignore
12211221
12221222 def set_loglevel (self , level ):
12231223 """Set MPV's log level. This adjusts which output will be sent to this object's log handlers. If you just want
@@ -1272,7 +1272,7 @@ def abort():
12721272 del self ._command_reply_callbacks [id (future )]
12731273 future .cancel = abort # type: ignore
12741274
1275- self ._command_reply_callbacks [id (future )] = wrapper
1275+ self ._command_reply_callbacks [id (future )] = wrapper # pyre-ignore
12761276
12771277 if kwargs :
12781278 if args :
@@ -1348,7 +1348,7 @@ def screenshot_to_file(self, filename, includes='subtitles'):
13481348
13491349 def screenshot_raw (self , includes = 'subtitles' ):
13501350 """Mapped mpv screenshot_raw command, see man mpv(1). Returns a pillow Image object."""
1351- from PIL import Image
1351+ from PIL import Image # pyre-ignore
13521352 res = self .command ('screenshot-raw' , includes )
13531353 if res ['format' ] != 'bgr0' : # type: ignore
13541354 raise ValueError ('Screenshot in unknown format "{}". Currently, only bgr0 is supported.'
@@ -1377,13 +1377,13 @@ def create_file_overlay(self, filename=None, size=None, stride=None, pos=(0,0)):
13771377 def create_image_overlay (self , img = None , pos = (0 ,0 )):
13781378 overlay_id = self .allocate_overlay_id ()
13791379 overlay = ImageOverlay (self , overlay_id , img , pos )
1380- self .overlays [overlay_id ] = overlay
1380+ self .overlays [overlay_id ] = overlay # pyre-ignore
13811381 return overlay
13821382
13831383 def remove_overlay (self , overlay_id ):
13841384 self .overlay_remove (overlay_id )
13851385 self .free_overlay_id (overlay_id )
1386- del self .overlays [overlay_id ]
1386+ del self .overlays [overlay_id ] # pyre-ignore
13871387
13881388 def playlist_next (self , mode = 'weak' ):
13891389 """Mapped mpv playlist_next command, see man mpv(1)."""
@@ -1463,7 +1463,7 @@ def stop(self, keep_playlist=False):
14631463
14641464 def audio_add (self , url , flags = 'select' , title = None , lang = None ):
14651465 """Mapped mpv audio_add command, see man mpv(1)."""
1466- self .command ('audio_add' , url .encode (fs_enc ), * _drop_nones (flags , title , lang ))
1466+ self .command ('audio_add' , url .encode (fs_enc ), * _drop_nones (flags , title , lang )) # pyre-ignore
14671467
14681468 def audio_remove (self , audio_id = None ):
14691469 """Mapped mpv audio_remove command, see man mpv(1)."""
@@ -1475,7 +1475,7 @@ def audio_reload(self, audio_id=None):
14751475
14761476 def video_add (self , url , flags = 'select' , title = None , lang = None , albumart = None ):
14771477 """Mapped mpv video_add command, see man mpv(1)."""
1478- self .command ('video_add' , url .encode (fs_enc ), * _drop_nones (flags , title , lang , albumart ))
1478+ self .command ('video_add' , url .encode (fs_enc ), * _drop_nones (flags , title , lang , albumart )) # pyre-ignore
14791479
14801480 def video_remove (self , video_id = None ):
14811481 """Mapped mpv video_remove command, see man mpv(1)."""
@@ -1487,7 +1487,7 @@ def video_reload(self, video_id=None):
14871487
14881488 def sub_add (self , url , flags = 'select' , title = None , lang = None ):
14891489 """Mapped mpv sub_add command, see man mpv(1)."""
1490- self .command ('sub_add' , url .encode (fs_enc ), * _drop_nones (flags , title , lang ))
1490+ self .command ('sub_add' , url .encode (fs_enc ), * _drop_nones (flags , title , lang )) # pyre-ignore
14911491
14921492 def sub_remove (self , sub_id = None ):
14931493 """Mapped mpv sub_remove command, see man mpv(1)."""
@@ -1669,11 +1669,11 @@ def unregister_message_handler(self, target_or_handler):
16691669 registered.
16701670 """
16711671 if isinstance (target_or_handler , str ):
1672- del self ._message_handlers [target_or_handler ]
1672+ del self ._message_handlers [target_or_handler ] # pyre-ignore
16731673 else :
16741674 for key , val in self ._message_handlers .items ():
16751675 if val == target_or_handler :
1676- del self ._message_handlers [key ]
1676+ del self ._message_handlers [key ] # pyre-ignore
16771677
16781678 def message_handler (self , target ):
16791679 """Decorator to register a mpv script message handler.
@@ -1849,7 +1849,7 @@ def unregister_key_binding(self, keydef):
18491849 self .command ('disable-section' , binding_name )
18501850 self .command ('define-section' , binding_name , '' )
18511851 if binding_name in self ._key_binding_handlers :
1852- del self ._key_binding_handlers [binding_name ]
1852+ del self ._key_binding_handlers [binding_name ] # pyre-ignore
18531853 if not self ._key_binding_handlers :
18541854 self .unregister_message_handler ('key-binding' )
18551855
@@ -1921,7 +1921,7 @@ def read_backend(_userdata, buf, bufsize):
19211921
19221922 def close_backend (_userdata ):
19231923 with self ._enqueue_exceptions ():
1924- del self ._stream_protocol_frontends [proto ][uri ]
1924+ del self ._stream_protocol_frontends [proto ][uri ] # pyre-ignore
19251925 if hasattr (frontend , 'close' ):
19261926 frontend .close ()
19271927 close = cb_info .contents .close = StreamCloseFn (close_backend )
@@ -1992,7 +1992,7 @@ def _python_stream_open(self, uri):
19921992 generator_fun , size = self ._python_streams [name ]
19931993 else :
19941994 if self ._python_stream_catchall is not None :
1995- generator_fun , size = self ._python_stream_catchall (name )
1995+ generator_fun , size = self ._python_stream_catchall (name ) # pyre-ignore
19961996 else :
19971997 raise ValueError ('Python stream name not found and no catch-all defined' )
19981998
@@ -2039,7 +2039,7 @@ def unregister():
20392039 if name not in self ._python_streams or \
20402040 self ._python_streams [name ][0 ] is not cb : # This is just a basic sanity check
20412041 raise RuntimeError ('Python stream has already been unregistered' )
2042- del self ._python_streams [name ]
2042+ del self ._python_streams [name ] # pyre-ignore
20432043
20442044 cb .unregister = unregister
20452045 cb .stream_name = name
@@ -2219,8 +2219,8 @@ def __setattr__(self, name, value):
22192219
22202220 elif name == 'update_cb' :
22212221 func = value if value else (lambda : None )
2222- self ._update_cb = value
2223- self ._update_fn_wrapper = RenderUpdateFn (lambda _userdata : func ())
2222+ self ._update_cb = value # pyre-ignore
2223+ self ._update_fn_wrapper = RenderUpdateFn (lambda _userdata : func ()) # pyre-ignore
22242224 _mpv_render_context_set_update_callback (self ._handle , self ._update_fn_wrapper , None ) # type: ignore
22252225
22262226 else :
0 commit comments