def test_from_uri_parse_error_missing_cost(uri): from cryptoconditions.condition import Condition from cryptoconditions.exceptions import ParsingError with raises(ParsingError) as exc_info: Condition.from_uri(uri) assert exc_info.value.args == ( 'Invalid condition format: "cost" parameter or value missing.',)
def test_from_uri_malformed_uri(uri): from cryptoconditions.condition import Condition from cryptoconditions.exceptions import ParsingError # Note that the uri will contain `sha-265` instead of `sha-256` with raises(ParsingError): Condition.from_uri(uri)
def test_from_uri_with_unsupported_type(uri): from cryptoconditions.condition import Condition from cryptoconditions.exceptions import UnsupportedTypeError with raises(UnsupportedTypeError) as exc_info: Condition.from_uri(uri) condition_type = parse_qs(urlparse(uri.rstrip()).query)['fpt'][0] assert exc_info.value.args == ( 'Type {} is not supported'.format(condition_type),)
def test_from_uri_prefix_error(uri): from cryptoconditions.condition import Condition, CONDITION_URI_SCHEME from cryptoconditions.exceptions import PrefixError with raises(PrefixError) as exc_info: Condition.from_uri(uri) assert exc_info.value.args == ( 'Serialized condition must start with "{}:"' .format(CONDITION_URI_SCHEME),)
def test_condition_comparison(minimal_ed25519, minimal_prefix): from cryptoconditions.condition import Condition assert Condition.from_uri(minimal_ed25519.condition_uri) == \ Condition.from_uri(minimal_ed25519.condition_uri) assert not Condition.from_uri(minimal_ed25519.condition_uri) == \ Condition.from_uri(minimal_prefix.condition_uri)
def test_from_uri_invalid_arguments(minimal_ed25519): from cryptoconditions.condition import Condition # raises a TypeError if the serialized_condition is not a str with raises(TypeError): Condition.from_uri(1) # Note: This should be removed in future versions of the code # from uri will return the the condition instance if we pass it a # condition instance condition = Condition.from_uri(minimal_ed25519.condition_uri) assert Condition.from_uri(condition) == condition
def subcondition(self, subcondition): if isinstance(subcondition, str): subcondition = Condition.from_uri(subcondition) elif not isinstance(subcondition, Condition): raise Exception( 'Subconditions must be URIs or objects of type Condition') self._subcondition = subcondition
def add_subcondition_uri(self, subcondition_uri): """ Add a subcondition (unfulfilled). This will automatically parse the URI and call addSubcondition. Args: subcondition_uri (str): Subcondition URI. """ if not isinstance(subcondition_uri, str): raise TypeError('Subcondition must be provided as a URI string') self.add_subcondition(Condition.from_uri(subcondition_uri))
def add_subcondition_uri(self, subcondition_uri): """ Add a subcondition (unfulfilled). This will automatically parse the URI and call addSubcondition. Args: subcondition_uri (str): Subcondition URI. """ if not isinstance(subcondition_uri, str): raise TypeError('Subcondition must be provided as a URI string, was {}'.format(subcondition_uri)) self.add_subcondition(Condition.from_uri(subcondition_uri))
def test_condition_to_asn1_json(basic_threshold): from cryptoconditions.condition import Condition from cryptoconditions.type_registry import TypeRegistry condition = Condition.from_uri(basic_threshold.condition_uri) condition_type = TypeRegistry.find_by_type_id(condition.type_id) assert condition.to_asn1_json() == { 'type': condition_type['asn1_condition'], 'value': { 'cost': basic_threshold.cost, 'fingerprint': condition.hash, 'subtypes': '01011' } }
def add_subcondition(self, subcondition): """ Add a subcondition (unfulfilled). This can be used to generate a new threshold condition from a set of subconditions or to provide a non-fulfilled subcondition when creating a threshold fulfillment. Args: subcondition (:class:`~cryptoconditions.condition.Condition` or :obj:`str`): Condition object or URI string representing a new subcondition to be added. """ if isinstance(subcondition, str): subcondition = Condition.from_uri(subcondition) elif not isinstance(subcondition, Condition): raise TypeError('Subconditions must be URIs or objects of type Condition') self.subconditions.append({'type': CONDITION, 'body': subcondition})
def add_subcondition(self, subcondition): """ Add a subcondition (unfulfilled). This can be used to generate a new threshold condition from a set of subconditions or to provide a non-fulfilled subcondition when creating a threshold fulfillment. Args: subcondition (:class:`~cryptoconditions.condition.Condition` or :obj:`str`): Condition object or URI string representing a new subcondition to be added. """ if isinstance(subcondition, str): subcondition = Condition.from_uri(subcondition) elif not isinstance(subcondition, Condition): raise TypeError( 'Subconditions must be URIs or objects of type Condition') self.subconditions.append({'type': CONDITION, 'body': subcondition})
def add_subcondition(self, subcondition, weight=1): """ Add a subcondition (unfulfilled). This can be used to generate a new threshold condition from a set of subconditions or to provide a non-fulfilled subcondition when creating a threshold fulfillment. Args: subcondition (Condition, str): Condition to add weight (int): Integer weight of the subcondition. """ if isinstance(subcondition, str): subcondition = Condition.from_uri(subcondition) elif not isinstance(subcondition, Condition): raise TypeError('Subconditions must be URIs or objects of type Condition') if not isinstance(weight, int): raise ValueError('Invalid weight, not an integer: {}'.format(weight)) self.subconditions.append( { 'type': CONDITION, 'body': subcondition, 'weight': weight })
def add_subcondition(self, subcondition, weight=1): """ Add a subcondition (unfulfilled). This can be used to generate a new threshold condition from a set of subconditions or to provide a non-fulfilled subcondition when creating a threshold fulfillment. Args: subcondition (Condition, str): Condition to add weight (int): Integer weight of the subcondition. """ if isinstance(subcondition, str): subcondition = Condition.from_uri(subcondition) elif not isinstance(subcondition, Condition): raise TypeError('Subconditions must be URIs or objects of type Condition') if not isinstance(weight, int) or weight < 1: raise ValueError('Invalid weight: {}'.format(weight)) self.subconditions.append( { 'type': CONDITION, 'body': subcondition, 'weight': weight })
def test_from_uri_parse_error_invalid_cost(uri): from cryptoconditions.condition import Condition from cryptoconditions.exceptions import ParsingError with raises(ParsingError) as exc_info: Condition.from_uri(uri) assert exc_info.value.args == ('No or invalid cost provided',)
def validate_condition(serialized_condition): condition = Condition.from_uri(serialized_condition) return condition.validate()