Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove python 2.7 #60

Merged
merged 8 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 36 additions & 12 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -1,34 +1,58 @@
name: Python package

on: [push]
on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
build:
lint:
name: "flake8 on code"
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.ref }}

- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: 3.12
allow-prereleases: true
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
- name: Run flake8
shell: bash
run: |
flake8

test:
needs: [ lint ]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["2.7", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
python-version: [ "3.7", "3.8", "3.9", "3.10", "3.11", "3.12" ]

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
pip install coveralls
# - name: Lint with flake8
# run: |
# stop the build if there are Python syntax errors or undefined names
# flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
# flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
pip install -r requirements-dev.txt

- name: Test
run: |
make coverage
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ dist
*.swp
doc/_build
*.egg-info
.idea
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's that? Never heard of it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jetbrains IDEs create this folder.
This just prevents from adding it accidently.

10 changes: 4 additions & 6 deletions bin/jsonpointer
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function

import sys
import os.path
import json
import jsonpointer
import argparse
import json
import sys

import jsonpointer

parser = argparse.ArgumentParser(
description='Resolve a JSON pointer on JSON files')
Expand All @@ -20,7 +18,7 @@ ptr_group.add_argument('-f', '--pointer-file', type=argparse.FileType('r'),
nargs='?',
help='File containing a JSON pointer expression')

ptr_group.add_argument('POINTER', type=str, nargs='?',
ptr_group.add_argument('POINTER', type=str, nargs='?',
help='A JSON pointer expression')

parser.add_argument('FILE', type=argparse.FileType('r'), nargs='+',
Expand Down
42 changes: 15 additions & 27 deletions jsonpointer.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,38 +32,26 @@

""" Identify specific nodes in a JSON document (RFC 6901) """

from __future__ import unicode_literals

# Will be parsed by setup.py to determine package metadata
__author__ = 'Stefan Kögl <[email protected]>'
__version__ = '2.4'
__version__ = '3.0.0'
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any specific reason to go for 3 digits? Is there some standard to follow?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

__website__ = 'https://github.com/stefankoegl/python-json-pointer'
__license__ = 'Modified BSD License'


try:
from itertools import izip
str = unicode
encode_str = lambda u: u.encode("raw_unicode_escape")
except ImportError: # Python 3
izip = zip
encode_str = lambda u: u

try:
from collections.abc import Mapping, Sequence
except ImportError: # Python 3
from collections import Mapping, Sequence

from itertools import tee, chain
import re
import copy

import re
from itertools import tee, chain

_nothing = object()


def set_pointer(doc, pointer, value, inplace=True):
"""Resolves pointer against doc and sets the value of the target within doc.
"""Resolves a pointer against doc and sets the value of the target within doc.

With inplace set to true, doc is modified as long as pointer is not the
root.
Expand Down Expand Up @@ -145,7 +133,7 @@ def pairwise(iterable):
a, b = tee(iterable)
for _ in b:
break
return izip(a, b)
return zip(a, b)


class JsonPointerException(Exception):
Expand Down Expand Up @@ -259,12 +247,11 @@ def get_part(cls, doc, part):
else:
raise JsonPointerException("Document '%s' does not support indexing, "
"must be mapping/sequence or support __getitem__" % type(doc))

def get_parts(self):
"""Returns the list of the parts. For example, JsonPointer('/a/b').get_parts() == ['a', 'b']"""

return self.parts

return self.parts

def walk(self, doc, part):
""" Walks one step in doc and returns the referenced part """
Expand All @@ -281,7 +268,7 @@ def walk(self, doc, part):
return doc[part]

except IndexError:
raise JsonPointerException("index '%s' is out of bounds" % (part, ))
raise JsonPointerException("index '%s' is out of bounds" % (part,))

# Else the object is a mapping or supports __getitem__(so assume custom indexing)
try:
Expand All @@ -290,7 +277,6 @@ def walk(self, doc, part):
except KeyError:
raise JsonPointerException("member '%s' not found in %s" % (part, doc))


def contains(self, ptr):
""" Returns True if self contains the given ptr """
return self.parts[:len(ptr.parts)] == ptr.parts
Expand All @@ -309,12 +295,13 @@ def join(self, suffix):
suffix_parts = suffix
try:
return JsonPointer.from_parts(chain(self.parts, suffix_parts))
except:
except: # noqa E722
raise JsonPointerException("Invalid suffix")

def __truediv__(self, suffix): # Python 3
def __truediv__(self, suffix): # Python 3
return self.join(suffix)
__div__ = __truediv__ # Python 2

__div__ = __truediv__ # Python 2
cunla marked this conversation as resolved.
Show resolved Hide resolved

@property
def path(self):
Expand Down Expand Up @@ -342,10 +329,10 @@ def __hash__(self):
return hash(tuple(self.parts))

def __str__(self):
return encode_str(self.path)
return self.path

def __repr__(self):
return "JsonPointer(" + repr(self.path) + ")"
return type(self).__name__ + "(" + repr(self.path) + ")"

@classmethod
def from_parts(cls, parts):
Expand All @@ -362,5 +349,6 @@ def from_parts(cls, parts):
def escape(s):
return s.replace('~', '~0').replace('/', '~1')


def unescape(s):
return s.replace('~1', '/').replace('~0', '~')
5 changes: 3 additions & 2 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
wheel
twine>=1.11.0
setuptools>=38.6.0
setuptools
coverage
flake8
4 changes: 4 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
[bdist_wheel]
universal = 1

[flake8]
max-line-length = 120
exclude = .git,.tox,dist,doc,*egg,build,.venv
17 changes: 7 additions & 10 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#!/usr/bin/env python

from setuptools import setup
import re
import io
import os.path
import re

from setuptools import setup

dirname = os.path.dirname(os.path.abspath(__file__))
filename = os.path.join(dirname, 'jsonpointer.py')
Expand All @@ -14,7 +15,7 @@
PACKAGE = 'jsonpointer'

MODULES = (
'jsonpointer',
'jsonpointer',
)

AUTHOR_EMAIL = metadata['author']
Expand All @@ -26,10 +27,8 @@
# Extract name and e-mail ("Firstname Lastname <[email protected]>")
AUTHOR, EMAIL = re.match(r'(.*) <(.*)>', AUTHOR_EMAIL).groups()


with open('README.md') as readme:
long_description = readme.read()

long_description = readme.read()

CLASSIFIERS = [
'Development Status :: 5 - Production/Stable',
Expand All @@ -38,8 +37,6 @@
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
Expand All @@ -65,5 +62,5 @@
py_modules=MODULES,
scripts=['bin/jsonpointer'],
classifiers=CLASSIFIERS,
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*',
)
python_requires='>=3.7',
)
Loading