25 lines
845 B
Python
25 lines
845 B
Python
import abc
|
|
from typing import TypeVar
|
|
|
|
from .hashpoint import *
|
|
from .hashresolver import *
|
|
from .mentionable import *
|
|
from .resolvermetaorigin import *
|
|
|
|
__all__ = ('ExtendableResolver',)
|
|
|
|
Mentioned = TypeVar('Mentioned')
|
|
|
|
|
|
class ExtendableResolver(HashResolver, abc.ABC):
|
|
async def extend(self, hash_point: HashPoint[Mentioned]) -> 'ExtendableResolver':
|
|
raise NotImplementedError
|
|
|
|
async def migrate(self, hash_point: HashPoint[Mentioned]) -> HashPoint[Mentioned]:
|
|
assert isinstance(hash_point, HashPoint)
|
|
return ResolverMetaOrigin(await self.extend(hash_point)).hash_point(hash_point.factory, hash_point.point)
|
|
|
|
async def migrate_resolved(self, mentioned: Mentioned) -> Mentioned:
|
|
assert isinstance(mentioned, Mentionable)
|
|
return await (await self.migrate(HashPoint.of(mentioned))).resolve()
|