Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
lib-py-b2b / errors.py
Size: Mime:
from abc import abstractmethod

from typing import List, Dict

from lib_b2b.persistent import Persistable


class TechnicalError(Exception):
    def __init__(self, message):
        self.sanitized_message = message
        self.message = ":[TechnicalError]: " + message


class BusinessError(Exception):
    def __init__(self, message):
        self.sanitized_message = message
        self.message = ":[BusinessError]: " + message


class NotificationFailedError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class AcknowledgementUrlNotProvidedError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class InvalidLabelPrintRequestError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class LabelPrintError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class AddressValidationServiceError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class OrderNotFoundError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class OrderValidationError(BusinessError):
    def __init__(self, message, reasons: List['RejectionReason']):
        super().__init__(message)
        self.reasons = reasons


class OrderLookupError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class CapturePaymentFailedError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class AcknowledgementFailedWarning(Exception):
    def __init__(self, message):
        super().__init__(message)


class AcknowledgementFailedError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class InvalidAddressError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ShipNoticeFailedWarning(Exception):
    def __init__(self, message):
        super().__init__(message)


class VersionConflictError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class ConditionCheckError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class ShipNoticeFailedError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ShipDateChangeError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class ItemPricingNotFound(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ShipRateNotFound(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ShipZoneNotFound(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class CustomerNotFoundError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class CustomerLookupError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class InvalidAPIKey(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class InvalidShopifyDomain(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class OrderExistsError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class InvalidCustomerItemError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ShopifyOrderExistsError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class InvalidSignatureError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class TranslationError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class OrderFetchError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class OrderLineNotFoundError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class OrderFlowFailure(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class OrderSaveError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class FulfillmentLookupError(Exception):
    def __init__(self, message):
        super().__init__(message)


class FulfillmentExistsError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class FulfillmentStatusError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class InvalidQuantityError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class NotFoundError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class OrderShipStatusError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ContainerCreationError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class ContainerContentsError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class InvalidPackageError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class ItemMismatchError(BusinessError):
    def __init__(self, message):
        super().__init__(message)
        super().__init__(message)


class ConfigurationError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class FulfillmentFetchError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class FulfillmentSaveError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class ShippingRateSaveError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class IntegrationError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class ChangeFailedError(TechnicalError):
    def __init__(self, message):
        super().__init__(message)


class OrderStatusChangeError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class RuleNotFound(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class LineCancelError(BusinessError):
    def __init__(self, line_id, message):
        super().__init__(message)
        self.line_id = line_id


class TaxLocationNotFoundError(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class OrderCancelError(BusinessError):
    def __init__(self, order_id, line_errors: List[LineCancelError], message):
        _line_errs = "line_errors: \n\t{}".format('\n\t'.join([f'line_id: {e.line_id} - {e.message}' for e in line_errors]))
        _msg = f"{message} :: order_id: {order_id}{' :: ' + _line_errs if line_errors else ''}"
        super().__init__(_msg)
        self.order_id = order_id
        self.line_errors = line_errors

    def __str__(self):
        return self.message


class ChangeNotAllowed(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class PolicyViolation(BusinessError):
    def __init__(self, message):
        super().__init__(message)


class NoticeRecord(Persistable):
    def __init__(self, code: str, msg: str, field: str = None, extra_data: Dict = None):
        self.extra_data = extra_data
        self.field = field
        self.msg = msg
        self.code = code

    @property
    @abstractmethod
    def persist_as(self) -> str:
        raise NotImplementedError

    @classmethod
    def from_dict(cls, data: dict):
        return cls(
            code=data.get('code'),
            msg=data.get('msg'),
            field=data.get('field'),
            extra_data=data.get('extra_data')
        )

    def as_dict(self) -> dict:
        return vars(self)


class ErrorRecord(NoticeRecord):
    def __init__(self, code: str, msg: str, field: str = None, extra_data: Dict = None):
        super().__init__(code=code, msg=msg, field=field, extra_data=extra_data)

    @property
    def persist_as(self) -> str:
        return 'errors'


class WarningRecord(NoticeRecord):
    def __init__(self, code: str, msg: str, field: str = None, extra_data: Dict = None):
        super().__init__(code=code, msg=msg, field=field, extra_data=extra_data)

    @property
    def persist_as(self) -> str:
        return 'warnings'


class RejectionReason(Persistable):
    def __init__(self, rejection_type: str, message: str):
        self.rejection_type = rejection_type
        self.message = message

    @staticmethod
    def from_dict(data: dict):
        return RejectionReason(
            rejection_type=data.get('rejection_type'),
            message=data.get('message')
        )

    def as_dict(self) -> dict:
        return vars(self)