Skip to content

Commit

Permalink
Merge pull request #14 from TheCleric/update/python_versions_mac
Browse files Browse the repository at this point in the history
Exclude python 3.6 and 3.7 for macos-latest. Actually use the python-version. Add latest python-versions. Update coverage to v7 on supported platforms.
  • Loading branch information
TheCleric authored Jun 21, 2024
2 parents 74fc92f + df466e8 commit 656ae57
Show file tree
Hide file tree
Showing 14 changed files with 465 additions and 425 deletions.
5 changes: 5 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[report]
show_missing = True

[run]
relative_files = True
28 changes: 25 additions & 3 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,37 @@ jobs:
- 3.7
- 3.8
- 3.9
- "3.10"
- "3.11"
- "3.12"
platform:
- ubuntu-20.04
- macos-latest
- macos-13
- windows-latest
exclude:
# 3.6, 3.7 doesn't exist as a runner on arm64 macs
- python-version: 3.6
platform: macos-latest
- python-version: 3.7
platform: macos-latest

runs-on: "${{ matrix.platform }}"
steps:
- uses: actions/checkout@v4

- name: Set up Python 3.6
- name: Set up Python ${{matrix.python-version}}
uses: actions/setup-python@v5
with:
python-version: "3.6"
python-version: ${{matrix.python-version}}

- name: Setup poetry
uses: abatilo/actions-poetry@v2

- name: Fix urllib3 for py 3.7
if: ${{ matrix.python-version == '3.7' }}
shell: bash
run: pip3 install -I urllib3==2.0.7

- name: Update PATH
if: ${{ matrix.platorm != 'windows-latest' }}
Expand All @@ -47,6 +63,12 @@ jobs:
shell: bash
run: poetry config virtualenvs.in-project true

- name: Update pip and install setuptools
shell: bash
run: |
python -m pip install pip --upgrade
pip install setuptools
- name: Poetry check & build
shell: bash
run: poetry check && poetry build
Expand All @@ -59,7 +81,7 @@ jobs:
shell: bash
run: poetry run mypy .

- name: Mypy
- name: Pylint
shell: bash
run: poetry run pylint coverage_lcov tests

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ jobs:

- name: Setup poetry
uses: abatilo/actions-poetry@v2
with:
poetry-version: "1.1.10"

- name: Update PATH
shell: bash
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ venv
dist
.coverage
lcov.info
.tox
6 changes: 3 additions & 3 deletions coverage_lcov/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import os
# import os

import toml
# import toml

# __version__ = toml.load(os.path.join(os.path.dirname(__file__), "..", "pyproject.toml"))["tool"]["poetry"]["version"]
__version__ = "0.2.1"
__version__ = "0.2.6"
4 changes: 2 additions & 2 deletions coverage_lcov/__main__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .cli import main
from .cli import main # pragma: no cover

if __name__ == "__main__":
if __name__ == "__main__": # pragma: no cover
main() # pylint: disable=no-value-for-parameter
12 changes: 12 additions & 0 deletions coverage_lcov/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ def main(
config_file: str,
relative_path: bool,
preview: bool,
) -> None: # pragma: no cover
__main_internal__(
data_file_path, output_file_path, config_file, relative_path, preview
)


def __main_internal__(
data_file_path: str,
output_file_path: str,
config_file: str,
relative_path: bool,
preview: bool,
) -> None:
converter = Converter(
data_file_path=data_file_path,
Expand Down
116 changes: 82 additions & 34 deletions coverage_lcov/converter.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
import logging
from typing import Any, List, Optional, Union
import sys
from typing import Any, List, Optional, Tuple, Union

import coverage
from coverage.files import FnmatchMatcher, prep_patterns
from coverage.misc import CoverageException, NoSource, NotPython
from coverage.python import PythonFileReporter
from coverage.python import PythonFileReporter, FileReporter
from coverage.results import Analysis

if sys.version_info < (3, 8): # pragma: no cover
from coverage.files import (
FnmatchMatcher,
prep_patterns,
)
else: # pragma: no cover
from coverage.files import GlobMatcher, prep_patterns
from coverage.types import TMorf

log = logging.getLogger("coverage_lcov.converter")

if sys.version_info < (3, 8):
FileReportersList = List[Union[PythonFileReporter, Any]]
else:
FileReportersList = List[Tuple[FileReporter, TMorf]]


class Converter:
def __init__(
Expand All @@ -25,34 +39,54 @@ def __init__(
self.cov_obj.load()
self.cov_obj.get_data()

def get_file_reporters(self) -> List[Union[PythonFileReporter, Any]]:
file_reporters: List[
Union[PythonFileReporter, Any]
] = self.cov_obj._get_file_reporters( # pylint: disable=protected-access
def get_file_reporters(self) -> FileReportersList:
file_reporters: FileReportersList = self.cov_obj._get_file_reporters( # pylint: disable=protected-access
None
)
config = self.cov_obj.config

if config.report_include:
matcher = FnmatchMatcher( # pylint: disable=too-many-function-args
prep_patterns(config.report_include), "report_include"
)
file_reporters = [fr for fr in file_reporters if matcher.match(fr.filename)]
if sys.version_info < (3, 8):
matcher = FnmatchMatcher(
prep_patterns(config.report_include), "report_include"
)
file_reporters = [
fr for fr in file_reporters if matcher.match(fr.filename)
]
else:
matcher = GlobMatcher(
prep_patterns(config.report_include),
)
file_reporters = [
(fr, morf)
for fr, morf in file_reporters
if matcher.match(fr.filename)
]

if config.report_omit:
matcher = FnmatchMatcher( # pylint: disable=too-many-function-args
prep_patterns(config.report_omit), "report_omit"
)
file_reporters = [
fr for fr in file_reporters if not matcher.match(fr.filename)
]

if not file_reporters:
if sys.version_info < (3, 8):
matcher = FnmatchMatcher(
prep_patterns(config.report_omit), "report_omit"
)
file_reporters = [
fr for fr in file_reporters if not matcher.match(fr.filename)
]
else:
matcher = GlobMatcher(
prep_patterns(config.report_omit),
)
file_reporters = [
(fr, morf)
for fr, morf in file_reporters
if not matcher.match(fr.filename)
]

if not file_reporters: # pragma: no-cover
raise CoverageException("No data to report.")

return file_reporters

def get_lcov(self) -> str:
def get_lcov(self) -> str: # pylint: disable=too-many-branches
"""Get LCOV output
This is shamelessly adapted from https://github.com/nedbat/coveragepy/blob/master/coverage/report.py
Expand All @@ -64,12 +98,24 @@ def get_lcov(self) -> str:

config = self.cov_obj.config

for file_reporter in sorted(file_reporters):
for file_reporter_item in sorted(file_reporters):
if sys.version_info < (3, 8):
file_reporter = file_reporter_item
else:
file_reporter, morf = file_reporter_item
try:
analysis = self.cov_obj._analyze( # pylint: disable=protected-access
file_reporter
)
token_lines = analysis.file_reporter.source_token_lines()
if sys.version_info < (3, 8):
analysis = (
self.cov_obj._analyze( # pylint: disable=protected-access
file_reporter
)
)
token_lines = analysis.file_reporter.source_token_lines()
else:
analysis = self.cov_obj._analyze( # pylint: disable=protected-access
morf
)
token_lines = file_reporter.source_token_lines()
if self.relative_path:
filename = file_reporter.relative_filename()
else:
Expand All @@ -94,17 +140,19 @@ def get_lcov(self) -> str:
raise

except NotPython:
if file_reporter.should_be_python():
if config.ignore_errors:
msg = "Couldn't parse Python file '{}'".format(
file_reporter.filename
)
self.cov_obj._warn( # pylint: disable=protected-access
msg, slug="couldnt-parse"
)

if sys.version_info < (3, 8):
if file_reporter.should_be_python():
if config.ignore_errors:
msg = "Couldn't parse Python file '{}'".format( # pylint: disable=useless-suppression, bad-option-value, consider-using-f-string
file_reporter.filename
)
self.cov_obj._warn( # pylint: disable=protected-access
msg, slug="couldnt-parse"
)
else:
raise
else:
raise

return output

Expand Down
Loading

0 comments on commit 656ae57

Please sign in to comment.