예제 #1
0
def generic_load(
    yaml_string, schema=None, label=u"<unicode string>", allow_flow_style=False
):
    if not utils.is_string(yaml_string):
        raise TypeError("StrictYAML can only read a string of valid YAML.")

    # We manufacture a class that has the label we want
    DynamicStrictYAMLLoader = type(
        "DynamicStrictYAMLLoader",
        (StrictYAMLLoader,),
        {"label": label, "allow_flow_style": allow_flow_style},
    )

    try:
        document = ruamelyaml.load(yaml_string, Loader=DynamicStrictYAMLLoader)
    except ruamelyaml.YAMLError as parse_error:
        if parse_error.context_mark is not None:
            parse_error.context_mark.name = label
        if parse_error.problem_mark is not None:
            parse_error.problem_mark.name = label

        raise parse_error

    # Document is just a (string, int, etc.)
    if type(document) not in (CommentedMap, CommentedSeq):
        document = yaml_string

    if schema is None:
        schema = Any()

    return schema(YAMLChunk(document, label=label))
예제 #2
0
 def to_yaml(self, data):
     if isinstance(data, list):
         return ", ".join([self._item_validator.to_yaml(item) for item in data])
     elif utils.is_string(data):
         for item in data.split(","):
             self._item_validator.to_yaml(item)
         return data
     else:
         raise YAMLSerializationError(
             "expected string or list, got '{}' of type '{}'".format(
                 data, type(data).__name__
             )
         )
예제 #3
0
 def to_yaml(self, data):
     if isinstance(data, datetime):
         return data.isoformat()
     if utils.is_string(data):
         try:
             dateutil.parser.parse(data)
             return data
         except ValueError:
             raise YAMLSerializationError(
                 "expected a datetime, got '{}'".format(data))
     raise YAMLSerializationError(
         "expected a datetime, got '{}' of type '{}'".format(
             data,
             type(data).__name__))
예제 #4
0
 def to_yaml(self, data):
     if isinstance(data, datetime):
         return data.isoformat()
     if utils.is_string(data):
         try:
             dateutil.parser.parse(data)
             return data
         except ValueError:
             raise YAMLSerializationError(
                 "expected a datetime, got '{}'".format(data)
             )
     raise YAMLSerializationError(
         "expected a datetime, got '{}' of type '{}'".format(
             data, type(data).__name__
         )
     )
예제 #5
0
 def should_be_string(self, data, message):
     if not utils.is_string(data):
         raise YAMLSerializationError(
             "{0} got '{1}' of type {2}.".format(message, data, type(data).__name__)
         )
예제 #6
0
 def to_yaml(self, data):
     if utils.has_number_type(data):
         return str(data)
     if utils.is_string(data) and utils.is_decimal(data):
         return data
     raise YAMLSerializationError("when expecting a float, got '{}'".format(data))
예제 #7
0
 def to_yaml(self, data):
     if utils.is_string(data) or isinstance(data, int):
         if utils.is_integer(str(data)):
             return str(data)
     raise YAMLSerializationError("'{}' not an integer.".format(data))
예제 #8
0
 def to_yaml(self, data):
     if not utils.is_string(data):
         raise YAMLSerializationError("'{}' is not a string".format(data))
     return str(data)
예제 #9
0
 def should_be_string(self, data, message):
     if not utils.is_string(data):
         raise YAMLSerializationError("{0} got '{1}' of type {2}.".format(
             message, data,
             type(data).__name__))
예제 #10
0
 def to_yaml(self, data):
     if utils.is_string(data) or isinstance(data, int):
         if utils.is_integer(str(data)):
             return str(data)
     raise YAMLSerializationError("'{}' not an integer.".format(data))
예제 #11
0
 def to_yaml(self, data):
     if not utils.is_string(data):
         raise YAMLSerializationError("'{}' is not a string".format(data))
     return str(data)
예제 #12
0
 def to_yaml(self, data):
     if not utils.is_string(data):
         raise YAMLSerializationError("'{}' is not a string".format(data))
     if "\n" in data:
         return PreservedScalarString(data)
     return data