Skip to content

Allow negative segment indexing on split extension #95

Open
@ElSaico

Description

@ElSaico

Currently, the split extension only allows positive indexes for its segments. However, I want to pick the very last segment, and their quantity is arbitrary.

My workaround so far is extending the parser just for a small regex tweak:

from jsonpath_ng.ext.parser import ExtentedJsonPathParser
from jsonpath_ng.ext.string import Split


SPLIT_NEGATIVE_INDEXABLE = re.compile(r"split\((.),\s+(-?\d+),\s+(\d+|-1)\)")


class SplitNegativeIndexable(Split):
    def __init__(self, method=None):
        m = SPLIT_NEGATIVE_INDEXABLE.match(method)
        self.char = m.group(1)
        self.segment = int(m.group(2))
        self.max_split = int(m.group(3))
        self.method = method


class JsonPathParser(ExtentedJsonPathParser):
    """we need a docstring here otherwise jsonpath-rw starts grumbling"""

    def p_jsonpath_named_operator(self, p):
        "jsonpath : NAMED_OPERATOR"
        if p[1].startswith("split("):
            p[0] = SplitNegativeIndexable(p[1])
        else:
            super().p_jsonpath_named_operator(p)

I can send a proper PR once I finish working for today.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions