Fix MediaCache asyncio Semaphore early import bug
This commit is contained in:
		
							
								
								
									
										1
									
								
								TODO.md
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								TODO.md
									
									
									
									
									
								
							@@ -90,7 +90,6 @@
 | 
			
		||||
 | 
			
		||||
- Multiaccount aliases:
 | 
			
		||||
  - Warn when conflict with another alias
 | 
			
		||||
  - Forbid spaces?
 | 
			
		||||
  - Add an explanation tooltip
 | 
			
		||||
  - Prevent sending messages with a user not in the current room
 | 
			
		||||
  - Support \ escaping
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,14 @@
 | 
			
		||||
# SPDX-License-Identifier: LGPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
from abc import ABC
 | 
			
		||||
from dataclasses import dataclass, field
 | 
			
		||||
from typing import TYPE_CHECKING, Any, Optional
 | 
			
		||||
 | 
			
		||||
import pyotherside
 | 
			
		||||
 | 
			
		||||
from .models import SyncId
 | 
			
		||||
from .utils import serialize_value_for_qml
 | 
			
		||||
 | 
			
		||||
if TYPE_CHECKING:
 | 
			
		||||
    from .models import SyncId
 | 
			
		||||
    from .models.model_item import ModelItem
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -66,7 +65,7 @@ class LoopException(PyOtherSideEvent):
 | 
			
		||||
class ModelItemInserted(PyOtherSideEvent):
 | 
			
		||||
    """Indicate a `ModelItem` insertion into a `Backend` `Model`."""
 | 
			
		||||
 | 
			
		||||
    sync_id: SyncId      = field()
 | 
			
		||||
    sync_id: "SyncId"    = field()
 | 
			
		||||
    index:   int         = field()
 | 
			
		||||
    item:    "ModelItem" = field()
 | 
			
		||||
 | 
			
		||||
@@ -75,23 +74,23 @@ class ModelItemInserted(PyOtherSideEvent):
 | 
			
		||||
class ModelItemFieldChanged(PyOtherSideEvent):
 | 
			
		||||
    """Indicate a `ModelItem`'s field value change in a `Backend` `Model`."""
 | 
			
		||||
 | 
			
		||||
    sync_id:         SyncId = field()
 | 
			
		||||
    item_index_then: int    = field()
 | 
			
		||||
    item_index_now:  int    = field()
 | 
			
		||||
    changed_field:   str    = field()
 | 
			
		||||
    field_value:     Any    = field()
 | 
			
		||||
    sync_id:         "SyncId" = field()
 | 
			
		||||
    item_index_then: int      = field()
 | 
			
		||||
    item_index_now:  int      = field()
 | 
			
		||||
    changed_field:   str      = field()
 | 
			
		||||
    field_value:     Any      = field()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class ModelItemDeleted(PyOtherSideEvent):
 | 
			
		||||
    """Indicate the removal of a `ModelItem` from a `Backend` `Model`."""
 | 
			
		||||
 | 
			
		||||
    sync_id: SyncId = field()
 | 
			
		||||
    index:   int    = field()
 | 
			
		||||
    sync_id: "SyncId" = field()
 | 
			
		||||
    index:   int      = field()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class ModelCleared(PyOtherSideEvent):
 | 
			
		||||
    """Indicate that a `Backend` `Model` was cleared."""
 | 
			
		||||
 | 
			
		||||
    sync_id: SyncId = field()
 | 
			
		||||
    sync_id: "SyncId" = field()
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,10 @@
 | 
			
		||||
 | 
			
		||||
"""Install `uvloop` if possible and provide a `QMLBridge`."""
 | 
			
		||||
 | 
			
		||||
# WARNING: make sure to not top-level import the media_cache module here,
 | 
			
		||||
# directly or indirectly via another module import (e.g. backend).
 | 
			
		||||
# See https://stackoverflow.com/a/55918049
 | 
			
		||||
 | 
			
		||||
import asyncio
 | 
			
		||||
import logging as log
 | 
			
		||||
import signal
 | 
			
		||||
@@ -11,7 +15,6 @@ from operator import attrgetter
 | 
			
		||||
from threading import Thread
 | 
			
		||||
from typing import Coroutine, Sequence
 | 
			
		||||
 | 
			
		||||
from .backend import Backend
 | 
			
		||||
from .pyotherside_events import CoroutineDone, LoopException
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
@@ -36,6 +39,7 @@ class QMLBridge:
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def __init__(self) -> None:
 | 
			
		||||
        from .backend import Backend
 | 
			
		||||
        self.backend: Backend = Backend()
 | 
			
		||||
 | 
			
		||||
        self._loop = asyncio.get_event_loop()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user