class RevocRegEntryValueField(MessageValidator): schema = ( (PREV_ACCUM, NonEmptyStringField(optional=True)), (ACCUM, NonEmptyStringField()), (ISSUED, IterableField(inner_field_type=IntegerField(), optional=True)), (REVOKED, IterableField(inner_field_type=IntegerField(), optional=True)) )
class ClientRevocDefSubmitField(MessageValidator): schema = ((TXN_TYPE, ConstantField(REVOC_REG_DEF)), (ID, NonEmptyStringField()), (REVOC_TYPE, LimitedLengthStringField()), (TAG, LimitedLengthStringField(max_length=TAG_LIMIT_SIZE)), (CRED_DEF_ID, NonEmptyStringField()), (VALUE, RevocDefValueField()))
class ClientRevocRegEntrySubmitField(MessageValidator): schema = ( (TXN_TYPE, ConstantField(REVOC_REG_ENTRY)), (REVOC_REG_DEF_ID, NonEmptyStringField()), (REVOC_TYPE, NonEmptyStringField()), (VALUE, RevocRegEntryValueField()) )
class ClientGetTxnAuthorAgreementOperation(MessageValidator): schema = ((TXN_TYPE, ConstantField(GET_TXN_AUTHOR_AGREEMENT)), (GET_TXN_AUTHOR_AGREEMENT_VERSION, NonEmptyStringField(optional=True)), (GET_TXN_AUTHOR_AGREEMENT_DIGEST, NonEmptyStringField(optional=True)), (GET_TXN_AUTHOR_AGREEMENT_TIMESTAMP, NonNegativeNumberField(optional=True)))
def rich_schema_objects_schema(txn_type, rs_type): return ((TXN_TYPE, ConstantField(txn_type)), (RS_ID, NonEmptyStringField()), (RS_TYPE, ConstantField(rs_type)), (RS_NAME, LimitedLengthStringField(max_length=NAME_FIELD_LIMIT)), (RS_VERSION, VersionField(version_cls=SchemaVersion)), (RS_CONTENT, NonEmptyStringField()), (OP_VER, LimitedLengthStringField(optional=True)))
class ClientRevocDefSubmitField(MessageValidator): schema = ( (ID, NonEmptyStringField()), (TYPE, NonEmptyStringField()), (TAG, NonEmptyStringField()), (CRED_DEF_ID, NonEmptyStringField()), (VALUE, RevocDefValueField()) )
class RevocDefValueField(MessageValidator): schema = ( (ISSUANCE_TYPE, NonEmptyStringField()), (MAX_CRED_NUM, IntegerField()), (PUBLIC_KEYS, AnyMapField()), (TAILS_HASH, NonEmptyStringField()), (TAILS_LOCATION, NonEmptyStringField()), )
class RevocDefValueField(MessageValidator): schema = ( (ISSUANCE_TYPE, ChooseField(values=(ISSUANCE_BY_DEFAULT, ISSUANCE_ON_DEMAND))), (MAX_CRED_NUM, IntegerField()), (PUBLIC_KEYS, AnyMapField()), (TAILS_HASH, NonEmptyStringField()), (TAILS_LOCATION, NonEmptyStringField()), )
class ClientRevocDefSubmitField(MessageValidator): schema = ( (TXN_TYPE, ConstantField(REVOC_REG_DEF)), (ID, NonEmptyStringField()), (REVOC_TYPE, NonEmptyStringField()), (TAG, NonEmptyStringField()), (CRED_DEF_ID, NonEmptyStringField()), (VALUE, RevocDefValueField()) )
class ClientPoolUpgradeOperation(MessageValidator): schema = ( (TXN_TYPE, ConstantField(POOL_UPGRADE)), (ACTION, ChooseField(values=( START, CANCEL, ))), (VERSION, VersionField(components_number=( 2, 3, ), max_length=VERSION_FIELD_LIMIT)), # TODO replace actual checks (idr, datetime) (SCHEDULE, MapField(IdentifierField(), NonEmptyStringField(), optional=True)), (SHA256, Sha256HexField()), (TIMEOUT, NonNegativeNumberField(optional=True)), (JUSTIFICATION, LimitedLengthStringField(max_length=JUSTIFICATION_MAX_SIZE, optional=True, nullable=True)), (NAME, LimitedLengthStringField(max_length=NAME_FIELD_LIMIT)), (FORCE, BooleanField(optional=True)), (REINSTALL, BooleanField(optional=True)), )
class ClientGetRevocRegDeltaField(MessageValidator): schema = ( (TXN_TYPE, ConstantField(GET_REVOC_REG_DELTA)), (REVOC_REG_DEF_ID, NonEmptyStringField()), (FROM, IntegerField(optional=True)), (TO, IntegerField()), )
class ClientGetRichSchemaObjectByMetadataOperation(MessageValidator): schema = ( (TXN_TYPE, ConstantField(GET_RICH_SCHEMA_OBJECT_BY_METADATA)), (RS_TYPE, NonEmptyStringField()), (RS_NAME, LimitedLengthStringField(max_length=NAME_FIELD_LIMIT)), (RS_VERSION, VersionField(version_cls=SchemaVersion)), )
class ClientPoolRestartOperation(MessageValidator): schema = ( (TXN_TYPE, ConstantField(POOL_RESTART)), (ACTION, ChooseField(values=( START, CANCEL, ))), (DATETIME, NonEmptyStringField(optional=True)), )
class ClientNYMOperation(MessageValidator): schema = ( (TXN_TYPE, ConstantField(NYM)), (ALIAS, NonEmptyStringField(optional=True)), (VERKEY, VerkeyField(optional=True)), (TARGET_NYM, DestNymField()), (ROLE, RoleField(optional=True)), # TODO: validate role using ChooseField, # do roles list expandable form outer context ) schema_is_strict = False
class ClientNodeOperationData(MessageValidator): schema = ( (NODE_IP, NetworkIpAddressField(optional=True)), (NODE_PORT, NetworkPortField(optional=True)), (CLIENT_IP, NetworkIpAddressField(optional=True)), (CLIENT_PORT, NetworkPortField(optional=True)), (ALIAS, NonEmptyStringField()), (SERVICES, IterableField(ChooseField(values=(VALIDATOR, )), optional=True)), ) def _validate_message(self, dct): # TODO: make ha fields truly optional (needs changes in stackHaChanged) required_ha_fields = {NODE_IP, NODE_PORT, CLIENT_IP, CLIENT_PORT} ha_fields = {f for f in required_ha_fields if f in dct} if ha_fields and len(ha_fields) != len(required_ha_fields): self._raise_missed_fields(*list(required_ha_fields - ha_fields))
class ClientMessageValidator(MessageValidator): def __init__(self, operation_schema_is_strict, *args, **kwargs): super().__init__(*args, **kwargs) # Following code is for support of non-strict schema # TODO: refactor this # TODO: this (and all related functionality) can be removed when # when fixed problem with transaction serialization (INDY-338) strict = operation_schema_is_strict if not strict: operation_field_index = 2 op = ClientOperationField(schema_is_strict=False) schema = list(self.schema) schema[operation_field_index] = (OPERATION, op) self.schema = tuple(schema) schema = ( (f.IDENTIFIER.nm, IdentifierField()), (f.REQ_ID.nm, NonNegativeNumberField()), (OPERATION, ClientOperationField()), (f.SIG.nm, SignatureField(optional=True)), (f.DIGEST.nm, NonEmptyStringField(optional=True)), )
class ClientGetRichSchemaObjectByIdOperation(MessageValidator): schema = ( (TXN_TYPE, ConstantField(GET_RICH_SCHEMA_OBJECT_BY_ID)), (RS_ID, NonEmptyStringField()), )
class ClientGetRevocRegField(MessageValidator): schema = ( (REVOC_REG_DEF_ID, NonEmptyStringField()), (TIMESTAMP, IntegerField()), (TXN_TYPE, ConstantField(GET_REVOC_REG)), )
class ClientGetRevocRegDefField(MessageValidator): schema = ( (ID, NonEmptyStringField()), (TXN_TYPE, ConstantField(GET_REVOC_REG_DEF)), )
class TestMsg(MessageBase): typename = "TESTMSG" schema = ( ("subject", NonEmptyStringField()), ("content", NonEmptyStringField()), )
def __init__(self, **kwargs): super().__init__(NonEmptyStringField(), NonNegativeNumberField(), **kwargs)
from collections import OrderedDict from indy_common.types import ClientGetRevocRegDefField from plenum.common.messages.fields import NonEmptyStringField, ConstantField from indy_common.constants import ID, TXN_TYPE, REVOC_TYPE EXPECTED_GET_REVOC_REG_DEF_FIELD = OrderedDict([ (ID, NonEmptyStringField()), (REVOC_TYPE, NonEmptyStringField), (TXN_TYPE, ConstantField), ]) def test_get_revoc_reg_def_schema(): actual_field_name = OrderedDict(ClientGetRevocRegDefField.schema).keys() assert EXPECTED_GET_REVOC_REG_DEF_FIELD.keys() == actual_field_name
class SomeNonMessageClass: typename = 'SomeNonMessageClass' schema = ( ('a', NonNegativeNumberField()), ('b', NonEmptyStringField()), )
class Message1(MessageBase): typename = 'Message1' schema = ( ('a', NonNegativeNumberField()), ('b', NonEmptyStringField()), )
import pytest from plenum.common.messages.fields import NonEmptyStringField validator = NonEmptyStringField() def test_non_empty_string(): assert not validator.validate("x") def test_empty_string(): assert validator.validate("")