Repository URL to install this package:
|
Version:
0.4.184 ▾
|
from lib_b2b.policy import Predicate, SimplePredicate
from typing import Callable
from lib_b2b.change import ChangeRequest, ChangeDataProvider, Changeable
import logging
from os import environ
import abc
logger = logging.getLogger(__name__)
class OrderChangeRequest(ChangeRequest):
def __init__(self, on_behalf_of: str, conditions: [Predicate]):
super().__init__(on_behalf_of, conditions)
@abc.abstractmethod
def will_change(self, order: 'Order') -> bool:
"""
Compares the existing data to the change request to determine if there has been a change
:return: True/False
:rtype: bool
"""
raise NotImplementedError
def permitted(self, changeable_object: 'Changeable') -> bool:
self.changeable_object = changeable_object
return self.policy.is_permitted(self, changeable_object)
def operation_identifier(self) -> str:
from lib_b2b.order import Order
if isinstance(self.changeable_object, Order):
return f"{type(self).__name__} on {self.changeable_object.order_id}"
else:
return f"{type(self).__name__} on {str(self.changeable_object)}"
def subject(self) -> str:
from lib_b2b.order import Order
if isinstance(self.changeable_object, Order):
return self.changeable_object.customer_edi_id
else:
return str(self.changeable_object)
@abc.abstractmethod
def apply(self, order: 'Order'):
raise NotImplementedError
class SimpleOrderPredicate(SimplePredicate):
def __init__(self, fn: Callable[[Changeable, ChangeRequest], bool], name: str):
super().__init__(fn, name)
def evaluate(self, changeable: Changeable, with_: ChangeRequest) -> bool:
result = self.fn(changeable)
return result
class OrderStatusChangeDataProvider(ChangeDataProvider, metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def new_status(self) -> 'OrderStatus':
raise NotImplementedError
from . import accept
from . import address
from . import cancel
from . import cancel_line
from . import paid
from . import ship_date
from . import revision