Skip to content

Run Pylint on test_shapefile.py, suppress W0212 for now, and make changes to silence other warnings from it #303

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

Merged
merged 3 commits into from
Sep 19, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@ jobs:
- uses: actions/setup-python@v5
- uses: pre-commit/action@v3.0.1

pylint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: install Pylint and plugin
run: |
python -m pip install --upgrade pip
pip install pytest pylint pylint-per-file-ignores
- name: run Pylint for errors and warnings only, on test_shapefile.py
run: |
pylint --disable=R,C test_shapefile.py

test_on_old_Pythons:
strategy:
fail-fast: false
Expand Down Expand Up @@ -60,6 +73,8 @@ jobs:
include:
- os: ubuntu-24.04
python-version: "3.14.0-alpha.0"
- os: ubuntu-22.04
python-version: "3.14.0-alpha.0"

runs-on: ${{ matrix.os }}
steps:
Expand Down
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1440,8 +1440,9 @@ In the same folder as README.md and shapefile.py, from the command line run
$ python shapefile.py
```

Linux/Mac and similar platforms will need to run `$ dos2unix README.md` in order
to correct line endings in README.md.
Linux/Mac and similar platforms may need to run `$ dos2unix README.md` in order
to correct line endings in README.md, if Git has not automatically changed them.


# Contributors

Expand All @@ -1459,10 +1460,12 @@ fiveham
geospatialpython
Hannes
Ignacio Martinez Vazquez
James Parrott
Jason Moujaes
Jonty Wareing
Karim Bahgat
karanrn
Kurt Schwehr
Kyle Kelley
Louis Tiao
Marcin Cuprjak
Expand Down
20 changes: 20 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[tool.pylint.MASTER]
load-plugins=[
"pylint_per_file_ignores",
]

[tool.pylint.'MESSAGES CONTROL']
# Silence warning: shapefile.py:2076:20: W0212: Access to a protected
# member _from_geojson of a client class (protected-access)
#
# Silence warnings: test_shapefile.py:{783,786,799,803,06,1195}:19:
# W0212: Access to a protected member _offsets of a
# client class (protected-access)
#
# Toml multi-line string used instead of array due to:
# https://github.com/christopherpickering/pylint-per-file-ignores/issues/160
per-file-ignores = """
shapefile.py:W0212
test_shapefile.py:W0212
"""
2 changes: 1 addition & 1 deletion requirements.test.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
pytest
pytest >= 3.7
setuptools
44 changes: 21 additions & 23 deletions test_shapefile.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,16 @@
import datetime
import json
import os.path
import sys

if sys.version_info.major == 3:
try:
from pathlib import Path
except ImportError:
# pathlib2 is a dependency of pytest >= 3.7
from pathlib2 import Path

# third party imports
import pytest

if sys.version_info.major == 2:
# required by pytest for python <36
from pathlib2 import Path

# our imports
import shapefile

Expand Down Expand Up @@ -208,7 +206,7 @@ def test_empty_shape_geo_interface():
"""
shape = shapefile.Shape()
with pytest.raises(Exception):
shape.__geo_interface__
getattr(shape, '__geo_interface__')

@pytest.mark.parametrize("typ,points,parts,expected", geo_interface_tests)
def test_expected_shape_geo_interface(typ, points, parts, expected):
Expand Down Expand Up @@ -257,17 +255,17 @@ def test_reader_url():
# test with extension
url = "https://github.com/nvkelso/natural-earth-vector/blob/master/110m_cultural/ne_110m_admin_0_tiny_countries.shp?raw=true"
with shapefile.Reader(url) as sf:
for recShape in sf.iterShapeRecords():
for __recShape in sf.iterShapeRecords():
pass
assert sf.shp.closed == sf.shx.closed == sf.dbf.closed is True
assert sf.shp.closed is sf.shx.closed is sf.dbf.closed is True

# test without extension
url = "https://github.com/nvkelso/natural-earth-vector/blob/master/110m_cultural/ne_110m_admin_0_tiny_countries?raw=true"
with shapefile.Reader(url) as sf:
for recShape in sf.iterShapeRecords():
for __recShape in sf.iterShapeRecords():
pass
assert len(sf) > 0
assert sf.shp.closed == sf.shx.closed == sf.dbf.closed is True
assert sf.shp.closed is sf.shx.closed is sf.dbf.closed is True

# test no files found
url = "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/README.md"
Expand All @@ -278,10 +276,10 @@ def test_reader_url():
# test reading zipfile from url
url = "https://github.com/JamesParrott/PyShp_test_shapefile/raw/main/gis_osm_natural_a_free_1.zip"
with shapefile.Reader(url) as sf:
for recShape in sf.iterShapeRecords():
for __recShape in sf.iterShapeRecords():
pass
assert len(sf) > 0
assert sf.shp.closed == sf.shx.closed == sf.dbf.closed is True
assert sf.shp.closed is sf.shx.closed is sf.dbf.closed is True


def test_reader_zip():
Expand All @@ -290,10 +288,10 @@ def test_reader_zip():
"""
# test reading zipfile only
with shapefile.Reader("shapefiles/blockgroups.zip") as sf:
for recShape in sf.iterShapeRecords():
for __recShape in sf.iterShapeRecords():
pass
assert len(sf) > 0
assert sf.shp.closed == sf.shx.closed == sf.dbf.closed is True
assert sf.shp.closed is sf.shx.closed is sf.dbf.closed is True

# test require specific path when reading multi-shapefile zipfile
with pytest.raises(shapefile.ShapefileException):
Expand All @@ -302,17 +300,17 @@ def test_reader_zip():

# test specifying the path when reading multi-shapefile zipfile (with extension)
with shapefile.Reader("shapefiles/blockgroups_multishapefile.zip/blockgroups2.shp") as sf:
for recShape in sf.iterShapeRecords():
for __recShape in sf.iterShapeRecords():
pass
assert len(sf) > 0
assert sf.shp.closed == sf.shx.closed == sf.dbf.closed is True
assert sf.shp.closed is sf.shx.closed is sf.dbf.closed is True

# test specifying the path when reading multi-shapefile zipfile (without extension)
with shapefile.Reader("shapefiles/blockgroups_multishapefile.zip/blockgroups2") as sf:
for recShape in sf.iterShapeRecords():
for __recShape in sf.iterShapeRecords():
pass
assert len(sf) > 0
assert sf.shp.closed == sf.shx.closed == sf.dbf.closed is True
assert sf.shp.closed is sf.shx.closed is sf.dbf.closed is True

# test raising error when can't find shapefile inside zipfile
with pytest.raises(shapefile.ShapefileException):
Expand Down Expand Up @@ -783,7 +781,7 @@ def test_reader_offsets():
# shx offsets should not be read during loading
assert not sf._offsets
# reading a shape index should trigger reading offsets from shx file
shape = sf.shape(3)
sf.shape(3)
assert len(sf._offsets) == len(sf.shapes())


Expand All @@ -800,7 +798,7 @@ def test_reader_offsets_no_shx():
assert not sf._offsets
# reading a shape index should iterate to the shape
# but the list of offsets should remain empty
shape = sf.shape(3)
sf.shape(3)
assert not sf._offsets
# reading all the shapes should build the list of offsets
shapes = sf.shapes()
Expand Down Expand Up @@ -1180,7 +1178,7 @@ def test_write_shp_shx_only(tmpdir):
assert writer.shp and writer.shx and not writer.dbf
assert writer.shpNum == 1
assert len(writer) == 1
assert writer.shp.closed == writer.shx.closed is True
assert writer.shp.closed is writer.shx.closed is True

# assert test.shp exists
assert os.path.exists(filename+'.shp')
Expand Down Expand Up @@ -1214,7 +1212,7 @@ def test_write_shp_dbf_only(tmpdir):
assert writer.shp and not writer.shx and writer.dbf
assert writer.shpNum == writer.recNum == 1
assert len(writer) == 1
assert writer.shp.closed == writer.dbf.closed is True
assert writer.shp.closed is writer.dbf.closed is True

# assert test.shp exists
assert os.path.exists(filename+'.shp')
Expand Down
Loading