mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-29 21:14:00 +03:00
43 lines
798 B
Python
43 lines
798 B
Python
"""Resources module."""
|
|
|
|
import abc
|
|
import sys
|
|
from typing import TypeVar, Generic
|
|
|
|
if sys.version_info < (3, 7):
|
|
from typing import GenericMeta
|
|
else:
|
|
class GenericMeta(type):
|
|
...
|
|
|
|
|
|
T = TypeVar('T')
|
|
|
|
|
|
class ResourceMeta(GenericMeta, abc.ABCMeta):
|
|
def __getitem__(cls, item):
|
|
# Spike for Python 3.6
|
|
return cls(item)
|
|
|
|
|
|
class Resource(Generic[T], metaclass=ResourceMeta):
|
|
|
|
@abc.abstractmethod
|
|
def init(self, *args, **kwargs) -> T:
|
|
...
|
|
|
|
@abc.abstractmethod
|
|
def shutdown(self, resource: T) -> None:
|
|
...
|
|
|
|
|
|
class AsyncResource(Generic[T], metaclass=ResourceMeta):
|
|
|
|
@abc.abstractmethod
|
|
async def init(self, *args, **kwargs) -> T:
|
|
...
|
|
|
|
@abc.abstractmethod
|
|
async def shutdown(self, resource: T) -> None:
|
|
...
|