• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

SlowAPI / fast-json-pointer / 3798344209

pending completion
3798344209

push

github

Tristan Sweeney
Clean up a bit

6 of 6 new or added lines in 2 files covered. (100.0%)

285 of 294 relevant lines covered (96.94%)

0.97 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

86.57
/src/fast_json_pointer/low_verbs.py
1
from .exceptions import ActionError, ResolutionException
1✔
2
from .jsontypes import JsonType
1✔
3
from .resolver import JsonResolver
1✔
4

5

6
def get(doc: JsonType, path: JsonResolver) -> JsonType:
1✔
7
    result = path.resolve(doc)
1✔
8
    return result.value
1✔
9

10

11
def add(doc: JsonType, path: JsonResolver, value: JsonType) -> None:
1✔
12
    if path.is_index_ref:
1✔
13
        raise ActionError("Can't add to a relative json pointer")
×
14

15
    try:
1✔
16
        result = path.resolve(doc)
1✔
17
    except ResolutionException as e:
1✔
18
        if len(e.remaining) > 1:
1✔
19
            raise ActionError("Can't add object, path doesn't exist")
×
20

21
        parent = e.refs[-1].doc
1✔
22
        step = e.remaining[0].step
1✔
23
    else:
24
        parent = result.refs[-2].doc
1✔
25
        step = result.refs[-1].operation.step
1✔
26

27
    match parent:
1✔
28
        case dict():
1✔
29
            parent[step] = value
1✔
30

31
        case list() if step == "-":
1✔
32
            parent.append(value)
1✔
33

34
        case list():
1✔
35
            if step == "-":
1✔
36
                parent.append(value)
×
37
            else:
38
                part_idx = int(step)
1✔
39
                if len(parent) == part_idx:
1✔
40
                    parent.append(value)
1✔
41
                else:
42
                    parent[part_idx] = value
1✔
43

44
        case _:
×
45
            raise RuntimeError(f"Unnavigable type {type(parent)}")
×
46

47

48
def remove(doc: JsonType, path: JsonResolver) -> JsonType:
1✔
49
    result = path.resolve(doc)
1✔
50
    parent, last = result.refs[-2:]
1✔
51

52
    part = last.operation.step
1✔
53

54
    match parent.doc:
1✔
55
        case dict():
1✔
56
            del parent.doc[part]
1✔
57
        case list():
1✔
58
            del parent.doc[int(part)]
1✔
59
        case _:
×
60
            raise RuntimeError()
×
61

62
    return result.value
1✔
63

64

65
def replace(doc: JsonType, path: JsonResolver, value: JsonType) -> JsonType:
1✔
66
    result = path.resolve(doc)
1✔
67
    parent, last = result.refs[-2:]
1✔
68

69
    part = last.operation.step
1✔
70

71
    match parent.doc:
1✔
72
        case dict():
1✔
73
            parent.doc[part] = value
1✔
74
        case list():
1✔
75
            parent.doc[int(part)] = value
1✔
76
        case _:
×
77
            raise RuntimeError()
×
78

79
    return result.value
1✔
80

81

82
def move(doc: JsonType, path: JsonResolver, from_: JsonResolver) -> JsonType:
1✔
83
    obj = remove(doc, from_)
1✔
84
    add(doc, path, obj)
1✔
85
    return obj
1✔
86

87

88
def copy(doc: JsonType, path: JsonResolver, from_: JsonResolver) -> JsonType:
1✔
89
    obj = get(doc, from_)
1✔
90
    add(doc, path, obj)
1✔
91
    return obj
1✔
92

93

94
def test(doc: JsonType, path: JsonResolver, value: JsonType) -> bool:
1✔
95
    obj = get(doc, path)
1✔
96
    return obj == value
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc