from arkitekt.monitor.monitor import get_current_monitor
from herre.console.context import get_current_console
from uuid import uuid4
from arkitekt.packers.utils import expand_outputs, shrink_inputs
from asyncio.futures import Future
from arkitekt.messages.postman.log import LogLevel
from contextvars import Context
from arkitekt.messages.postman.reserve.reserve_transition import ReserveState
from arkitekt.contracts.exceptions import AssignmentException
from arkitekt.messages import *
from arkitekt.schema.enums import NodeType
from arkitekt.messages.postman.reserve.params import ReserveParams
from arkitekt.postman import Postman
from rich.table import Table
from rich.panel import Panel
from arkitekt.monitor import Monitor, current_monitor
from arkitekt.registry import get_current_postman
import asyncio
import logging
from herre.herre import Herre, get_current_herre
from koil.koil import Koil, get_current_koil
from koil.loop import koil, koil_gen
logger = logging.getLogger(__name__)
class UnknownMessageError(Exception):
pass
class ReservationError(Exception):
pass
class CouldNotReserveError(ReservationError):
pass
class IncorrectStateForAssignation(ReservationError):
pass
def build_reserve_message(reference, node_id: str = None, template_id: str= None, provision: str= None, params_dict: dict = {}, with_log=False, context=None):
assert reference is not None, "Must have a reference"
assert node_id is not None or template_id is not None, "Please provide either a node_id or template_id"
data={
"node": node_id,
"template": template_id,
"provision": provision,
"params": params_dict,
}
meta={
"reference": reference,
"extensions": {
"with_progress": with_log,
}
}
if context:
meta = {**meta, "context": context}
return BouncedReserveMessage(data=data, meta=meta)
else:
return ReserveMessage(data=data, meta=meta)
def build_unreserve_messsage(reference, reservation, with_log=False, context=None):
assert reference is not None, "Must have a reference"
data= {
"reservation": reservation
}
meta={
"reference": reference,
"extensions": {
"with_progress": with_log
}
}
if context:
meta = {**meta, "context": context}
return BouncedUnreserveMessage(data=data, meta=meta)
else:
return UnreserveMessage(data=data, meta=meta)
def build_assign_message(reference, reservation, args, kwargs, with_log=False, context=None, persist=False):
assert reference is not None, "Must have a reference"
data = {
"reservation": reservation,
"args": args,
"kwargs": kwargs,
}
meta = {
"reference": reference,
"extensions": {
"with_progress": with_log,
"persist": persist
}
}
if context:
meta = {**meta, "context": context}
return BouncedAssignMessage(data=data, meta=meta)
else:
return AssignMessage(data=data, meta=meta)
def build_unassign_messsage(reference, assignation, with_log=False, context=None, persist=False):
assert reference is not None, "Must have a reference"
data= {
"assignation": assignation
}
meta={
"reference": reference,
"extensions": {
"with_progress": with_log,
"persist": persist
}
}
if context:
meta = {**meta, "context": context}
return BouncedUnassignMessage(data=data, meta=meta)
else:
return UnassignMessage(data=data, meta=meta)
class Reservation:
def __init__(self, node,
reference: str = None,
provision: str = None,
monitor: Monitor = None,
ignore_node_exceptions=False,
transition_hook=None,
with_log=False,
enter_on=[ReserveState.ACTIVE],
exit_on=[ReserveState.ERROR, ReserveState.CANCELLED, ReserveState.CRITICAL],
context: Context =None,
koil: Koil = None,
herre: Herre = None,
postman: Postman = None,
**params) -> None:
self.monitor: Monitor = monitor or get_current_monitor()
self.panel = self.monitor.create_reservation_panel(self) if self.monitor else None
self.console = get_current_console()
self.herre = herre or get_current_herre()
self.koil = koil or get_current_koil()
self.loop = self.koil.loop
self.postman = postman or get_current_postman(force_creation=True)
# Reservation Params
self.reference = reference or str(uuid.uuid4())
self.provision = provision
self.node = node
self.params = ReserveParams(**params)
self.with_log = with_log or (self.monitor.log if self.monitor else None)
self.context = context # with_bounced allows us forward bounced checks
if self.context:
assert "can_forward_bounce" in self.herre.grant.scopes, "In order to use with_bounced forwarding you need to have the can_forward_bounced scope"
# Exception Mangement
self.ignore_node_exceptions = ignore_node_exceptions
self.critical_error = None
# State management
self.transition_hook = transition_hook
assert self.transition_hook is None or asyncio.iscoroutinefunction(self.transition_hook), "Transition Hook must be either a coroutine or set to None"
self.exit_states = exit_on
self.enter_states = enter_on
self.current_state = ReserveState.STARTING
def log(self, message: str, level: LogLevel=LogLevel.DEBUG):
"""Logs a Message
The Logged Message will be display on the Monitor if running inside a Monitor
and send to the logging output.
Args:
message (str): The Message
level (LogLevel, optional): The LogLevel. Defaults to LogLevel.DEBUG.
"""
if self.panel:
self.panel.log(message, level=level)
logger.info(f"{level}: {message}")
async def transition_state(self, message: ReserveTransitionMessage):
# Once we acquire a reserved resource our contract (the inner part of the context can start)
if self.transition_hook: await self.transition_hook(self, message.data.state)
print("iosnisnosinseo", self.exit_states)
print(message.data.state)
if message.data.state in self.exit_states:
print("oisndoisdnosdinodsin")
if self.enter_future.done():
self.log(f"We have transitioned to a critical State {message.data.message}. Terminating on Next Call")
else:
self.log("Cancelling Reservation")
raise Exception(message.data.message)
if not self.is_closing:
self.log(f"Received Exitstate: {message.data.state}. Closing reservation at next assignment", level=LogLevel.CRITICAL)
if message.data.state in self.enter_states:
if self.enter_future.done():
logger.info("We are already entered.")
else:
self.enter_future.set_result(message.meta.reference)
self.old_state = self.current_state
self.current_state = message.d
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
共134个文件
py:132个
toml:1个
pkg-info:1个
资源分类:Python库 所属语言:Python 资源全名:arkitekt-0.1.39.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源推荐
资源详情
资源评论
收起资源包目录
Python库 | arkitekt-0.1.39.tar.gz (134个子文件)
PKG-INFO 580B
reservation.py 18KB
functional.py 13KB
actify.py 12KB
agent.py 10KB
base.py 9KB
agent.py 9KB
actor.py 9KB
app.py 9KB
ports.py 7KB
base.py 7KB
magic_bar.py 5KB
monitor.py 5KB
templates.py 5KB
utils.py 5KB
actor.py 4KB
websocket.py 4KB
assign_widget.py 4KB
node.py 4KB
postman.py 4KB
provisions.py 3KB
base.py 3KB
registry.py 3KB
node.py 3KB
utils.py 3KB
qtlistsearchwidget.py 2KB
types.py 2KB
base.py 2KB
registry.py 2KB
base.py 2KB
registry.py 2KB
base.py 1KB
setup.py 1KB
utils.py 1KB
qtsliderwidget.py 1KB
graphql.py 1KB
base.py 1KB
widgets.py 1KB
provide_transition.py 1KB
reserve_transition.py 1KB
comfort.py 1KB
registry.py 1KB
sync_funcs.py 946B
bounced_forwarded_reserve.py 859B
bounced_assign.py 856B
structure.py 853B
bounced_forwarded_assign.py 836B
bounced_forwarded_unassign.py 828B
bounced_provide.py 814B
exception.py 810B
bounced_reserve.py 805B
settings_popup.py 780B
bounced_unassign.py 772B
provide.py 768B
base.py 747B
assign.py 744B
unprovide_critical.py 744B
reserve.py 743B
config.py 730B
registry.py 727B
__init__.py 714B
unprovide.py 709B
reserve_critical.py 694B
unassign_done.py 693B
bounced_unprovide.py 691B
assign_yield.py 685B
unreserve_done.py 682B
reserve_waiting.py 679B
assign_cancelled.py 675B
agent_disconnect.py 673B
assign_return.py 672B
unprovide_error.py 669B
reserve_done.py 666B
unprovide_done.py 666B
agent_connect.py 664B
ward.py 655B
bounced_unreserve.py 653B
bounced_forwarded_unreserve.py 653B
unassign.py 653B
unreserve_critical.py 651B
provide_done.py 650B
template.py 650B
reserve_active.py 649B
provide_critical.py 648B
unreserve.py 645B
assign_done.py 637B
unassign_critical.py 623B
assign_critical.py 617B
provide_log.py 610B
unprovide_log.py 601B
threadvars.py 544B
unreserve_log.py 541B
unassign_log.py 537B
reserve_log.py 534B
assign_log.py 530B
template.py 503B
__init__.py 454B
__init__.py 431B
negotiation.py 424B
log.py 411B
共 134 条
- 1
- 2
资源评论
挣扎的蓝藻
- 粉丝: 13w+
- 资源: 15万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功