Пример #1
0
 def matches(self, item, mismatch_description=None):
     """Return whether the item is a valid to-many relationship."""
     if mismatch_description is None:
         mismatch_description = StringDescription()
     if "data" not in item:
         mismatch_description.append('missing key "data"')
         return False
     if not isinstance(item["data"], list):
         mismatch_description.append(
             "to-many relationship is not a `list`\n     "
             f"got: `{item.__class__.__name__}`")
         return False
     if not self.optional and not item["data"]:
         mismatch_description.append(
             "non-optional to-many relationship is ")
         mismatch_description.append_description_of(item["data"])
         return False
     for index, data in enumerate(item["data"]):
         if not super().matches(data):
             mismatch_description.append(
                 f"to-many relationship at index {index}"
                 " does not match. Failed because: ")
             super().matches(data, mismatch_description)
             return False
     return True
Пример #2
0
 def matches(self, item, mismatch_description=None):
     """Return whether the item is a valid to-one relationship."""
     if mismatch_description is None:
         mismatch_description = StringDescription()
     if "data" not in item:
         mismatch_description.append('missing key "data"')
         return False
     if item["data"] is None:
         if self.optional:
             return True
         mismatch_description.append("non-optional to-one relationship is ")
         mismatch_description.append_description_of(item["data"])
         return False
     return super().matches(item["data"], mismatch_description)
Пример #3
0
    def _matches(self, item):
        if not (isinstance(item, list) or isinstance(item, tuple)):
            self.messages.append(
                f'Can\'t perform ListSorted matcher on {type(item)} object.')

        pairs = [(item[i], item[i + 1]) for i in range(len(item) - 1)]
        for i, (left, right) in enumerate(pairs):
            matcher = self.pair_matcher(self.criteria(right))
            if not matcher.matches(self.criteria(left)):
                description = StringDescription()
                matcher.describe_to(description)
                description.append_text(' expected, but ')
                matcher.describe_mismatch(self.criteria(left), description)
                description.append(f'. items indexes are {i}, and {i + 1}')
                self.messages.append(str(description))
                return False
        return True
Пример #4
0
 def matches(self, item, mismatch_description=None):
     """Return whether the item is a json:api document."""
     if mismatch_description is None:
         mismatch_description = StringDescription()
     if "data" not in item:
         mismatch_description.append('missing key "data"')
         return False
     if not self.optional and not item["data"]:
         mismatch_description.append('non-optional "data" is ')
         mismatch_description.append_description_of(item["data"])
         return False
     if self.many:
         if not isinstance(item["data"], list):
             mismatch_description.append(
                 f'"data" is not a `list`\n     got: `{item.__class__.__name__}`'
             )
             return False
         for index, data in enumerate(item["data"]):
             if not self._match_resource(
                     data, mismatch_description, index=index):
                 return False
     elif not self._match_resource(item["data"], mismatch_description):
         return False
     return self._matches_includes(item, mismatch_description)
def test_description_append_invalid_input():
    desc = StringDescription()
    desc.append(chr(239))
def test_description_append_valid_input(valid_input):
    desc = StringDescription()
    desc.append(valid_input)
    str(desc)
Пример #7
0
 def matches(self, item, mismatch_description=None):
     """Return whether the item is a resource identifier."""
     if mismatch_description is None:
         mismatch_description = StringDescription()
     if not isinstance(item, dict):
         mismatch_description.append(
             f"not a `dict`\n     got: `{item.__class__.__name__}`")
         return False
     if "id" not in item:
         mismatch_description.append("missing key id")
         return False
     id_value = item["id"]
     if not isinstance(id_value, str):
         mismatch_description.append("id is not a string")
         return False
     if id_value == "":
         mismatch_description.append("id is blank")
         return False
     if "type" not in item:
         mismatch_description.append("missing key type")
         return False
     type_value = item["type"]
     if type_value != self.resource_name:
         mismatch_description.append(
             f'type does not match "{self.resource_name}"')
         return False
     return True