Skip to content

Commit 0634086

Browse files
committed
Improved python API
- Better docstring - Refactored to uses module functions instead of (useless) Version class - Changed get_versions() to return an OrderedDict for easier in-python use - Added get_libzim_version() shortcut - Simplified print_version's code - Fixed print_version tests (use flush so we're sure its present when checking) - Changed tests for get_versions and get_libzim_version
1 parent 2fb7cb7 commit 0634086

File tree

4 files changed

+70
-37
lines changed

4 files changed

+70
-37
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [Unreleased]
9+
10+
### Added
11+
12+
* `version` module with
13+
* `version.get_versions()` returning an OrderedDict of library:version inclusing libzim
14+
* `version.print_versions()` print it on stdout (or another fd)
15+
* `version.get_libzim_version()` returns the libzim version only
16+
817
## [2.1.0] - 2022-12-06
918

1019
### Added

libzim/libzim.pyx

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import os
3939
import pathlib
4040
import sys
4141
import traceback
42+
from collections import OrderedDict
4243
from types import ModuleType
4344
from typing import Dict, Generator, Iterator, List, Optional, Set, Tuple, Union
4445
from uuid import UUID
@@ -1244,38 +1245,47 @@ suggestion_public_objects = [
12441245
suggestion = create_module(suggestion_module_name, suggestion_module_doc, suggestion_public_objects)
12451246

12461247
version_module_doc = """libzim version module
1247-
- Get versions of libzim.
1248-
- Print version of libzim.
1248+
- Get version of libzim and its dependencies
1249+
- Print version of libzim and its dependencies
1250+
- Get libzim version
12491251
12501252
Usage:
1251-
versions = Version.get_versions()
1252-
Version.print_version()"""
1253+
from libzim.version import get_libzim_version, get_versions, print_versions
1254+
major, minor, patch = get_libzim_version().split(".", 2)
1255+
1256+
for dependency, version in get_versions().items():
1257+
print(f"- {dependency}={version}")
1258+
1259+
print_versions()"""
1260+
1261+
1262+
def print_versions(out: Union[sys.stdout, sys.stderr] = sys.stdout):
1263+
"""print libzim and its dependencies list with their versions"""
1264+
for library, version in get_versions().items():
1265+
prefix = "" if library == "libzim" else "+ "
1266+
print(f"{prefix}{library} {version}", file=out or sys.stdout)
1267+
1268+
1269+
def get_versions() -> OrderedDict[str, str]:
1270+
""" library: version mapping. Always includes `libzim`"""
1271+
versions = zim.getVersions()
1272+
return OrderedDict({
1273+
library.decode("UTF-8"): version.decode("UTF-8")
1274+
for library, version in versions
1275+
})
1276+
1277+
def get_libzim_version() -> str:
1278+
"""libzim version string"""
1279+
return get_versions()["libzim"]
1280+
12531281
version_public_objects = [
1254-
Version,
1282+
get_libzim_version,
1283+
get_versions,
1284+
print_versions,
12551285
]
12561286
version_module_name = f"{__name__}.version"
12571287
version = create_module(version_module_name, version_module_doc, version_public_objects)
12581288

1259-
cdef class Version:
1260-
__module__ = version_module_name
1261-
@staticmethod
1262-
def get_versions() -> [(bytes, bytes)]:
1263-
return zim.getVersions()
1264-
1265-
@staticmethod
1266-
def print_version(out: Union[sys.stdout, sys.stderr] = sys.stdout):
1267-
versions = Version.get_versions()
1268-
for i, version in enumerate(versions):
1269-
prefix = ""
1270-
if i > 0:
1271-
prefix= "+"
1272-
output = "{prefix} {version_name} {version_value}".format(
1273-
prefix=prefix,
1274-
version_name=version[0].decode("utf-8"),
1275-
version_value=version[1].decode("utf-8"))
1276-
print(output, file=out)
1277-
1278-
12791289

12801290
class ModuleLoader(importlib.abc.Loader):
12811291
# Create our module. Easy, just return the created module

tests/test_libzim_reader.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ def test_reader_archive(all_zims, filename, filesize, new_ns, mutlipart, zim_uui
358358
def test_reader_metadata(
359359
all_zims, filename, metadata_keys, test_metadata, test_metadata_value
360360
):
361+
361362
zim = Archive(all_zims / filename)
362363

363364
# make sure metadata_keys is empty

tests/test_libzim_version.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,33 @@
1+
import re
12
import sys
23

3-
from libzim.version import Version
4+
from libzim.version import get_libzim_version, get_versions, print_versions
45

56

6-
def test_get_verions():
7-
versions = Version.get_versions()
8-
assert len(versions) != 0
9-
10-
11-
def test_print_verion_with_stdout(capfd):
12-
Version.print_version()
13-
stdout, stderr = capfd.readouterr()
7+
def test_version_print_version_with_stdout(capsys):
8+
print_versions()
9+
print("", file=sys.stdout, flush=True)
10+
stdout, stderr = capsys.readouterr()
1411
assert len(stdout) != 0
1512

1613

17-
def test_print_verion_with_stderr(capfd):
18-
Version.print_version(sys.stderr)
19-
stdout, stderr = capfd.readouterr()
14+
def test_version_print_version_with_stderr(capsys):
15+
print_versions(sys.stderr)
16+
print("", file=sys.stderr, flush=True)
17+
stdout, stderr = capsys.readouterr()
2018
assert len(stderr) != 0
19+
20+
21+
def test_get_versions():
22+
versions = get_versions()
23+
assert versions
24+
assert "libzim" in versions
25+
assert len(versions.keys()) > 1
26+
for library, version in versions.items():
27+
assert isinstance(library, str)
28+
assert isinstance(version, str)
29+
30+
31+
def test_get_libzim_version():
32+
# libzim uses semantic versioning
33+
assert re.match(r"\d+\.\d+\.\d+", get_libzim_version())

0 commit comments

Comments
 (0)