@@ -42,6 +42,21 @@ import sys
4242
4343pybool = 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"
466471cdef Py_ssize_t itemsize = 1
467472
468473cdef 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+
823853cdef 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
830861cdef 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
846878cdef 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+
0 commit comments