Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Support additional (Python) types in more than the `type` validator

Đang mở
#727 1 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
30/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Bắt đầu bằng cách đọc issue #364 và pull request liên quan, sau đó tái hiện các ví dụ NamedTuple trong issue này với các validator required và additionalProperties. Xác định cách các thuộc tính NamedTuple cần được nhận diện và truy cập một cách nhất quán, và coi công việc là hoàn tất khi cả hai ví dụ đều xác thực các thuộc tính dự kiến mà không xem các giá trị của chúng là tên thuộc tính.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Dialects v2 Enhancement

In issue #364 and the related PR the type checker was expanded to allow redefining how jsonschema identifies/validates a type, with the intention of allowing a named tuple to be used as a jsonschema "object" type. In practice, this does not appear to be enough, as other portions of jsonschema use the python "in" expression to test for or iterate over properties in an object. In a NamedTuple, this will actually test the values of the properties. Two specific examples (required and additionalProperties) highlight this:

from typing import NamedTuple
from jsonschema import Draft7Validator
from jsonschema.validators import extend
from jsonschema.exceptions import ValidationError

# dict or tuple w/ _fields is object (allowed NamedTuple as object)
def is_object_or_namedtuple(checker, instance):
    return isinstance(instance, dict) or (
        isinstance(instance, tuple) and hasattr(instance, '_fields'))

# redefine object to allow namedtuple
type_checker = Draft7Validator.TYPE_CHECKER.redefine(
    'object', is_object_or_namedtuple)

# extend validator with new type checker
Validator = extend(Draft7Validator, type_checker=type_checker)

# validator with foo as required property
validator_foo_required = Validator(schema={
    "type": "object",
    "properties": {
        "foo": {
            "type": "string"
        }
    },
    "required": ["foo"]
})

# validator with foo as optional property, no additional
validator_foo_optional_no_additional = Validator(schema={
    "type": "object",
    "properties": {
        "foo": {
            "type": "string"
        }
    },
    "additionalProperties": False
})

class Example(NamedTuple):
    foo: str


example = Example(foo="bar")

try:
    validator_foo_required.validate(example)
except ValidationError as e:
    print(f"Error: {e.message}")

try:
    validator_foo_optional_no_additional.validate(example)
except ValidationError as e:
    print(f"Error: {e.message}")

# the problem is that 'foo' is not "in" example..
print('Is foo in example? ', ('foo' in example))

# ... but 'bar' is
print('Is bar in example? ', ('bar' in example))

This is more of an FYI, as #364 was targeted at supporting NamedTuple, but it looks like there would be some bigger changes required to facilitate redefining how properties are identified/accessed in the NamedTuple.

Ngôn ngữ chính
Python
Star
5k
Fork
700
Merge trung bình
1 ngày 20 giờ
Pull request đã merge (30 ngày)
6

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python-jsonschema/jsonschema

Tất cả issue của python-jsonschema/jsonschema

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.