Skip to content

Commit 0fcc120

Browse files
committed
Define submodule reader and search.
1 parent 462b98f commit 0fcc120

File tree

4 files changed

+71
-51
lines changed

4 files changed

+71
-51
lines changed

libzim/reader.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

libzim/searcher.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

libzim/wrapper.pyx

Lines changed: 70 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,21 @@ import sys
4242

4343
pybool = type(True)
4444

45+
def create_module(name, doc, members):
46+
module = ModuleType(name, doc)
47+
_all = []
48+
for obj in members:
49+
if isinstance(obj, tuple):
50+
name = obj[0]
51+
obj = obj[1]
52+
else:
53+
name = obj.__name__
54+
setattr(module, name, obj)
55+
_all.append(name)
56+
module.__all__ = _all
57+
sys.modules[name] = module
58+
return module
59+
4560
###############################################################################
4661
#  Public API to be called from C++ side #
4762
###############################################################################
@@ -445,27 +460,18 @@ writer_public_objects = [
445460
StringProvider,
446461
pascalize
447462
]
448-
writer = ModuleType(writer_module_name, writer_module_doc)
449-
_all = []
450-
for obj in writer_public_objects:
451-
if isinstance(obj, tuple):
452-
name = obj[0]
453-
obj = obj[1]
454-
else:
455-
name = obj.__name__
456-
setattr(writer, name, obj)
457-
_all.append(name)
458-
writer.__all__ = _all
459-
sys.modules[writer_module_name] = writer
463+
writer = create_module(writer_module_name, writer_module_doc, writer_public_objects)
460464

461465

462466
###############################################################################
463467
#  Reader module #
464468
###############################################################################
465469

470+
reader_module_name = f"{__name__}.reader"
466471
cdef Py_ssize_t itemsize = 1
467472

468473
cdef class ReadingBlob:
474+
__module__ = reader_module_name
469475
cdef zim.Blob c_blob
470476
cdef Py_ssize_t size
471477
cdef int view_count
@@ -521,6 +527,7 @@ cdef class Entry:
521527
----------
522528
*c_entry : Entry (zim::)
523529
a pointer to the C++ entry object """
530+
__module__ = reader_module_name
524531
cdef zim.Entry c_entry
525532

526533
# Factory functions - Currently Cython can't use classmethods
@@ -575,6 +582,7 @@ cdef class Item:
575582
----------
576583
*c_entry : Entry (zim::)
577584
a pointer to the C++ entry object """
585+
__module__ = reader_module_name
578586
cdef zim.Item c_item
579587
cdef ReadingBlob _blob
580588
cdef bool _haveBlob
@@ -637,6 +645,7 @@ cdef class Archive:
637645
_filename : pathlib.Path
638646
the file name of the Archive Reader object """
639647

648+
__module__ = reader_module_name
640649
cdef zim.Archive c_archive
641650
cdef object _filename
642651

@@ -815,19 +824,42 @@ cdef class Archive:
815824
def __repr__(self) -> str:
816825
return f"{self.__class__.__name__}(filename={self.filename})"
817826

827+
reader_module_doc = """ libzim reader module
828+
829+
- Archive to open and read ZIM files
830+
- `Archive` gives access to all `Entry`
831+
- `Entry` gives access to `Item` (content)
832+
833+
Usage:
834+
835+
with Archive(fpath) as zim:
836+
entry = zim.get_entry_by_path(zim.main_entry.path)
837+
print(f"Article {entry.title} at {entry.path} is "
838+
f"{entry.get_item().content.nbytes}b")"""
839+
reader_public_objects = [
840+
Archive,
841+
Entry,
842+
Item,
843+
]
844+
reader = create_module(reader_module_name, reader_module_doc, reader_public_objects)
845+
818846

819847
###############################################################################
820848
#  Search module #
821849
###############################################################################
822850

851+
search_module_name = f"{__name__}.search"
852+
823853
cdef class Query:
854+
__module__ = search_module_name
824855
cdef zim.Query c_query
825856

826857
def set_query(self, query: str):
827858
self.c_query.setQuery(query.encode('utf8'))
828859

829860

830861
cdef class SearchResultSet:
862+
__module__ = search_module_name
831863
cdef zim.SearchResultSet c_resultset
832864

833865
@staticmethod
@@ -844,6 +876,7 @@ cdef class SearchResultSet:
844876
preincrement(current)
845877

846878
cdef class Search:
879+
__module__ = search_module_name
847880
cdef zim.Search c_search
848881

849882
# Factory functions - Currently Cython can't use classmethods
@@ -878,6 +911,7 @@ cdef class Searcher:
878911
*c_archive : Searcher
879912
a pointer to a C++ Searcher object
880913
"""
914+
__module__ = search_module_name
881915

882916
cdef zim.Searcher c_searcher
883917

@@ -894,3 +928,27 @@ cdef class Searcher:
894928
def search(self, object query: Query):
895929
return Search.from_search(move(self.c_searcher.search(query.c_query)))
896930

931+
search_module_doc = """ libzim search module
932+
933+
- Archive to open and read ZIM files
934+
- `Archive` gives access to all `Entry`
935+
- `Entry` gives access to `Item` (content)
936+
937+
Usage:
938+
939+
archive = Archive(fpath)
940+
searcher = Searcher(archive)
941+
query = Query()
942+
query.setQuery("foo")
943+
search = searcher.search(query)
944+
resultSet = search.getResult(10, 10) # get result from 10 to 20 (10 results)
945+
for path in resultSet:
946+
print(path)"""
947+
search_public_objects = [
948+
Searcher,
949+
Query
950+
]
951+
search = create_module(search_module_name, search_module_doc, search_public_objects)
952+
953+
__all__ = ["writer", "reader", "search"]
954+

tests/test_libzim_reader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
import libzim.writer
1212
from libzim.reader import Archive
13-
from libzim.searcher import Searcher, Query
13+
from libzim.search import Searcher, Query
1414

1515

1616
# expected data for tests ZIMs (see `all_zims`)

0 commit comments

Comments
 (0)