sigal 2.4__tar.gz → 2.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. sigal-2.6/.github/dependabot.yml +15 -0
  2. {sigal-2.4 → sigal-2.6}/.github/workflows/publish.yml +7 -7
  3. {sigal-2.4 → sigal-2.6}/.github/workflows/python-tests.yml +9 -6
  4. {sigal-2.4 → sigal-2.6}/.pre-commit-config.yaml +5 -9
  5. sigal-2.6/.readthedocs.yml +20 -0
  6. {sigal-2.4 → sigal-2.6}/AUTHORS +9 -2
  7. {sigal-2.4 → sigal-2.6}/LICENSE +1 -1
  8. {sigal-2.4 → sigal-2.6}/PKG-INFO +14 -18
  9. {sigal-2.4 → sigal-2.6}/README.rst +4 -5
  10. {sigal-2.4 → sigal-2.6}/docs/album_information.rst +2 -2
  11. {sigal-2.4 → sigal-2.6}/docs/changelog.rst +41 -0
  12. sigal-2.6/docs/conf.py +100 -0
  13. {sigal-2.4 → sigal-2.6}/docs/faq.rst +0 -2
  14. {sigal-2.4 → sigal-2.6}/docs/installation.rst +3 -1
  15. {sigal-2.4 → sigal-2.6}/docs/license.rst +3 -0
  16. {sigal-2.4 → sigal-2.6}/docs/plugins.rst +3 -10
  17. {sigal-2.4 → sigal-2.6}/docs/themes.rst +1 -1
  18. {sigal-2.4 → sigal-2.6}/pyproject.toml +15 -19
  19. {sigal-2.4 → sigal-2.6}/src/sigal/__init__.py +1 -1
  20. {sigal-2.4 → sigal-2.6}/src/sigal/__main__.py +18 -10
  21. {sigal-2.4 → sigal-2.6}/src/sigal/gallery.py +90 -88
  22. {sigal-2.4 → sigal-2.6}/src/sigal/image.py +26 -7
  23. {sigal-2.4 → sigal-2.6}/src/sigal/log.py +1 -1
  24. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/compress_assets.py +4 -3
  25. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/encrypt/encrypt.py +1 -1
  26. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/encrypt/endec.py +2 -2
  27. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/extended_caching.py +5 -1
  28. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/feeds.py +1 -0
  29. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/media_page.py +1 -1
  30. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/nomedia.py +1 -1
  31. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/nonmedia_files.py +26 -15
  32. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/titleregexp.py +2 -2
  33. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/zip_gallery.py +1 -1
  34. {sigal-2.4 → sigal-2.6}/src/sigal/settings.py +35 -3
  35. {sigal-2.4 → sigal-2.6}/src/sigal/templates/sigal.conf.py +9 -11
  36. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/templates/album.html +30 -28
  37. sigal-2.6/src/sigal/themes/default/templates/description.html +29 -0
  38. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/footer.html +3 -0
  39. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/templates/album_items.html +3 -24
  40. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-dynamic-caption-plugin.esm.js +414 -0
  41. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-dynamic-caption-plugin.esm.min.js +5 -0
  42. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-fullscreen.esm.js +129 -0
  43. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-fullscreen.esm.min.js +8 -0
  44. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-lightbox.esm.js +1960 -0
  45. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-lightbox.esm.js.map +1 -0
  46. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-lightbox.esm.min.js +5 -0
  47. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-video-plugin.esm.js +257 -0
  48. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe-video-plugin.esm.min.js +1 -0
  49. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe.css +420 -0
  50. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe.esm.js +7081 -0
  51. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe.esm.js.map +1 -0
  52. sigal-2.6/src/sigal/themes/photoswipe/static/photoswipe.esm.min.js +5 -0
  53. {sigal-2.4 → sigal-2.6}/src/sigal/themes/photoswipe/static/styles.css +57 -5
  54. sigal-2.6/src/sigal/themes/photoswipe/templates/album.html +9 -0
  55. sigal-2.6/src/sigal/themes/photoswipe/templates/album_items.html +31 -0
  56. {sigal-2.4 → sigal-2.6}/src/sigal/themes/photoswipe/templates/album_list.html +5 -0
  57. sigal-2.6/src/sigal/themes/photoswipe/templates/base.html +92 -0
  58. {sigal-2.4 → sigal-2.6}/src/sigal/utils.py +5 -2
  59. sigal-2.6/src/sigal/version.py +34 -0
  60. {sigal-2.4 → sigal-2.6}/src/sigal/video.py +3 -3
  61. {sigal-2.4 → sigal-2.6}/src/sigal/writer.py +11 -3
  62. {sigal-2.4 → sigal-2.6}/src/sigal.egg-info/PKG-INFO +14 -18
  63. {sigal-2.4 → sigal-2.6}/src/sigal.egg-info/SOURCES.txt +19 -15
  64. {sigal-2.4 → sigal-2.6}/src/sigal.egg-info/requires.txt +4 -3
  65. sigal-2.6/tests/sample/pictures/dir1/test1/11.md +10 -0
  66. sigal-2.6/tests/sample/pictures/dir1/test1/outdoor.heic +0 -0
  67. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test2/21.md +1 -1
  68. sigal-2.6/tests/sample/pictures/dir1/test2/index.md +2 -0
  69. sigal-2.6/tests/sample/pictures/exifTest/22.jpg +0 -0
  70. sigal-2.6/tests/sample/pictures/nomedia/ignored/.nomedia +0 -0
  71. sigal-2.6/tests/sample/pictures/nonmedia_files/dummy.txt +0 -0
  72. {sigal-2.4 → sigal-2.6}/tests/sample/sigal.conf.py +4 -3
  73. {sigal-2.4 → sigal-2.6}/tests/test_compress_assets_plugin.py +3 -1
  74. {sigal-2.4 → sigal-2.6}/tests/test_gallery.py +48 -9
  75. {sigal-2.4 → sigal-2.6}/tests/test_image.py +12 -0
  76. {sigal-2.4 → sigal-2.6}/tests/test_plugins.py +3 -1
  77. {sigal-2.4 → sigal-2.6}/tests/test_settings.py +3 -2
  78. {sigal-2.4 → sigal-2.6}/tests/test_utils.py +3 -1
  79. {sigal-2.4 → sigal-2.6}/tests/test_zip.py +2 -7
  80. {sigal-2.4 → sigal-2.6}/tox.ini +10 -10
  81. sigal-2.4/.readthedocs.yml +0 -12
  82. sigal-2.4/docs/conf.py +0 -165
  83. sigal-2.4/src/sigal/plugins/upload_s3.py +0 -106
  84. sigal-2.4/src/sigal/themes/photoswipe/static/app.js +0 -214
  85. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.css +0 -485
  86. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.css.map +0 -10
  87. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.png +0 -0
  88. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.svg +0 -36
  89. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/preloader.gif +0 -0
  90. sigal-2.4/src/sigal/themes/photoswipe/static/echo/blank.gif +0 -0
  91. sigal-2.4/src/sigal/themes/photoswipe/static/echo/echo.js +0 -135
  92. sigal-2.4/src/sigal/themes/photoswipe/static/echo/echo.min.js +0 -2
  93. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe-ui-default.js +0 -871
  94. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe-ui-default.min.js +0 -1
  95. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.css +0 -175
  96. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.css.map +0 -10
  97. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.js +0 -3592
  98. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.min.js +0 -1
  99. sigal-2.4/src/sigal/themes/photoswipe/templates/album.html +0 -98
  100. sigal-2.4/src/sigal/themes/photoswipe/templates/base.html +0 -43
  101. sigal-2.4/src/sigal/version.py +0 -8
  102. sigal-2.4/tests/sample/pictures/dir1/test1/11.md +0 -4
  103. sigal-2.4/tests/sample/pictures/dir1/test2/index.md +0 -1
  104. {sigal-2.4 → sigal-2.6}/.git-blame-ignore-revs +0 -0
  105. {sigal-2.4 → sigal-2.6}/.gitignore +0 -0
  106. {sigal-2.4 → sigal-2.6}/CONTRIBUTING.rst +0 -0
  107. {sigal-2.4 → sigal-2.6}/docs/Makefile +0 -0
  108. {sigal-2.4 → sigal-2.6}/docs/changelog.py +0 -0
  109. {sigal-2.4 → sigal-2.6}/docs/configuration.rst +0 -0
  110. {sigal-2.4 → sigal-2.6}/docs/contribute.rst +0 -0
  111. {sigal-2.4 → sigal-2.6}/docs/getting_started.rst +0 -0
  112. {sigal-2.4 → sigal-2.6}/docs/image_information.rst +0 -0
  113. {sigal-2.4 → sigal-2.6}/docs/index.rst +0 -0
  114. {sigal-2.4 → sigal-2.6}/docs/make.bat +0 -0
  115. {sigal-2.4 → sigal-2.6}/setup.cfg +0 -0
  116. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/__init__.py +0 -0
  117. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/adjust.py +0 -0
  118. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/copyright.py +0 -0
  119. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/encrypt/__init__.py +0 -0
  120. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/encrypt/static/decrypt.js +0 -0
  121. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/encrypt/static/keycheck.txt +0 -0
  122. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/encrypt/static/sw.js +0 -0
  123. {sigal-2.4 → sigal-2.6}/src/sigal/plugins/watermark.py +0 -0
  124. {sigal-2.4 → sigal-2.6}/src/sigal/signals.py +0 -0
  125. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/css/colorbox.css +0 -0
  126. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/css/skeleton.css +0 -0
  127. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/css/style.css +0 -0
  128. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/images/controls.png +0 -0
  129. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/images/loading.gif +0 -0
  130. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/app-with-media-page.js +0 -0
  131. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/app.js +0 -0
  132. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/jquery-2.2.1.js +0 -0
  133. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/jquery-2.2.1.min.js +0 -0
  134. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/jquery.colorbox-min.js +0 -0
  135. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/jquery.colorbox.js +0 -0
  136. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/jquery.touchSwipe.js +0 -0
  137. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/static/js/jquery.touchSwipe.min.js +0 -0
  138. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/templates/album_list.html +0 -0
  139. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/templates/base.html +0 -0
  140. {sigal-2.4 → sigal-2.6}/src/sigal/themes/colorbox/templates/media.html +0 -0
  141. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/Control.FullScreen.css +0 -0
  142. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/Control.FullScreen.js +0 -0
  143. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/Leaflet.Photo.css +0 -0
  144. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/Leaflet.Photo.js +0 -0
  145. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/MarkerCluster.Default.css +0 -0
  146. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/MarkerCluster.css +0 -0
  147. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/README +0 -0
  148. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/icon-fullscreen-2x.png +0 -0
  149. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/icon-fullscreen.png +0 -0
  150. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/images/layers-2x.png +0 -0
  151. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/images/layers.png +0 -0
  152. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/images/marker-icon-2x.png +0 -0
  153. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/images/marker-icon.png +0 -0
  154. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/images/marker-shadow.png +0 -0
  155. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/leaflet-providers.js +0 -0
  156. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/leaflet-src.js +0 -0
  157. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/leaflet.css +0 -0
  158. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/leaflet.js +0 -0
  159. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/leaflet.markercluster-src.js +0 -0
  160. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/static/leaflet/leaflet.markercluster.js +0 -0
  161. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/analytics.html +0 -0
  162. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/breadcrumb.html +0 -0
  163. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/decrypt.html +0 -0
  164. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/default_head.html +0 -0
  165. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/download_zip.html +0 -0
  166. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/gtm.html +0 -0
  167. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/links.html +0 -0
  168. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/map.html +0 -0
  169. {sigal-2.4 → sigal-2.6}/src/sigal/themes/default/templates/piwik.html +0 -0
  170. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/README +0 -0
  171. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/css/normalize.css +0 -0
  172. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/css/style.css +0 -0
  173. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/galleria.js +0 -0
  174. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/galleria.min.js +0 -0
  175. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/img/empty.png +0 -0
  176. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/img/fullscreen.png +0 -0
  177. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/jquery-3.3.1.js +0 -0
  178. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/jquery-3.3.1.min.js +0 -0
  179. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/plugins/history/galleria.history.js +0 -0
  180. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/plugins/history/galleria.history.min.js +0 -0
  181. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.css +0 -0
  182. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.js +0 -0
  183. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.min.css +0 -0
  184. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.min.js +0 -0
  185. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.css +0 -0
  186. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.js +0 -0
  187. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.min.css +0 -0
  188. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.min.js +0 -0
  189. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.css +0 -0
  190. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.js +0 -0
  191. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.min.css +0 -0
  192. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.min.js +0 -0
  193. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.css +0 -0
  194. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.js +0 -0
  195. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.min.css +0 -0
  196. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.min.js +0 -0
  197. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/fullscreen/index.html +0 -0
  198. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.css +0 -0
  199. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.js +0 -0
  200. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.min.css +0 -0
  201. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.min.js +0 -0
  202. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.css +0 -0
  203. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.js +0 -0
  204. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.min.css +0 -0
  205. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.min.js +0 -0
  206. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/templates/album.html +0 -0
  207. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/templates/album_list.html +0 -0
  208. {sigal-2.4 → sigal-2.6}/src/sigal/themes/galleria/templates/base.html +0 -0
  209. {sigal-2.4 → sigal-2.6}/src/sigal.egg-info/dependency_links.txt +0 -0
  210. {sigal-2.4 → sigal-2.6}/src/sigal.egg-info/entry_points.txt +0 -0
  211. {sigal-2.4 → sigal-2.6}/src/sigal.egg-info/top_level.txt +0 -0
  212. {sigal-2.4 → sigal-2.6}/tests/conftest.py +0 -0
  213. /sigal-2.4/tests/sample/pictures/dir1/empty/fake.txt → /sigal-2.6/tests/sample/pictures/.venv/lib64/fake.png +0 -0
  214. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/accentu/303/251/11.jpg" +0 -0
  215. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/accentu/303/251/h/303/251lico/303/257de.jpg" +0 -0
  216. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/accentu/303/251/test?<special> chars#.jpg" +0 -0
  217. {sigal-2.4/tests/sample/pictures/dir1/test2 → sigal-2.6/tests/sample/pictures/dir1}/22.jpg +0 -0
  218. {sigal-2.4/tests/sample/pictures → sigal-2.6/tests/sample/pictures/dir1}/empty/fake.txt +0 -0
  219. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/index.md +0 -0
  220. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test1/11.jpg +0 -0
  221. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test1/CMB_Timeline300_no_WMAP.jpg +0 -0
  222. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test1/example.gif +0 -0
  223. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test1/flickr_jerquiaga_2394751088_cc-by-nc.jpg +0 -0
  224. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test1/flickr_jerquiaga_2394751088_cc-by-nc.md +0 -0
  225. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test1/index.md +0 -0
  226. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test2/21.tiff +0 -0
  227. {sigal-2.4/tests/sample/pictures/encryptTest → sigal-2.6/tests/sample/pictures/dir1/test2}/22.jpg +0 -0
  228. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test2/22.md +0 -0
  229. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test2/CMB_Timeline300_no_WMAP.jpg +0 -0
  230. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test2/CMB_Timeline300_no_WMAP.md +0 -0
  231. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test3/3.jpg +0 -0
  232. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir1/test3/index.md +0 -0
  233. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir2/.nozip_gallery +0 -0
  234. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir2/Hubble Interacting Galaxy NGC 5257.jpg +0 -0
  235. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir2/Hubble ultra deep field.jpg +0 -0
  236. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir2/KeckObservatory20071020.jpg +0 -0
  237. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir2/index.md +0 -0
  238. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/dir2/m57_the_ring_nebula-587px.jpg +0 -0
  239. /sigal-2.4/tests/sample/pictures/nomedia/ignored/.nomedia → /sigal-2.6/tests/sample/pictures/empty/fake.txt +0 -0
  240. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/encryptTest/21.jpg +0 -0
  241. {sigal-2.4/tests/sample/pictures/exifTest → sigal-2.6/tests/sample/pictures/encryptTest}/22.jpg +0 -0
  242. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/exifTest/21.jpg +0 -0
  243. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/exifTest/noexif.png +0 -0
  244. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/index.md +0 -0
  245. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/iptcTest/1.jpg +0 -0
  246. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/iptcTest/2.jpg +0 -0
  247. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/iptcTest/2.md +0 -0
  248. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/iptcTest/3.jpg +0 -0
  249. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/iptcTest/index.md +0 -0
  250. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nomedia/created/.nomedia +0 -0
  251. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nomedia/created/ignored/should_be_ignored2.jpg +0 -0
  252. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nomedia/created/should_be_created.jpg +0 -0
  253. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nomedia/created/should_be_ignored3.jpg +0 -0
  254. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nomedia/ignored/recursively_ignored/should_be_ignored.jpg +0 -0
  255. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nomedia/ignored/should_be_ignored_1.jpg +0 -0
  256. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/nonmedia_files/dummy.pdf +0 -0
  257. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/video/example video.md +0 -0
  258. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/video/example video.ogv +0 -0
  259. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/webp/_MG_7805_lossy80.webp +0 -0
  260. {sigal-2.4 → sigal-2.6}/tests/sample/pictures/webp/_MG_7808_lossy80.webp +0 -0
  261. {sigal-2.4 → sigal-2.6}/tests/sample/watermark.png +0 -0
  262. {sigal-2.4 → sigal-2.6}/tests/test_cli.py +0 -0
  263. {sigal-2.4 → sigal-2.6}/tests/test_encrypt.py +0 -0
  264. {sigal-2.4 → sigal-2.6}/tests/test_extended_caching.py +0 -0
  265. {sigal-2.4 → sigal-2.6}/tests/test_video.py +0 -0
@@ -0,0 +1,15 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "github-actions" # See documentation for possible values
9
+ directory: ".github/workflows" # Location of package manifests
10
+ schedule:
11
+ interval: "monthly"
12
+ groups:
13
+ actions:
14
+ patterns:
15
+ - "*"
@@ -10,15 +10,18 @@ jobs:
10
10
  build-n-publish:
11
11
  name: Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI
12
12
  runs-on: ubuntu-latest
13
+ environment: pypi
14
+ permissions:
15
+ id-token: write
13
16
  if: ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags')) || contains(github.event.pull_request.labels.*.name, 'Build wheels'))
14
17
 
15
18
  steps:
16
- - uses: actions/checkout@master
19
+ - uses: actions/checkout@v6
17
20
  with:
18
21
  fetch-depth: 0
19
- - uses: actions/setup-python@v2
22
+ - uses: actions/setup-python@v6
20
23
  with:
21
- python-version: 3.8
24
+ python-version: "3.13"
22
25
 
23
26
  - name: Install python-build and twine
24
27
  run: python -m pip install build twine
@@ -34,7 +37,4 @@ jobs:
34
37
 
35
38
  - name: Publish distribution 📦 to PyPI
36
39
  if: startsWith(github.ref, 'refs/tags')
37
- uses: pypa/gh-action-pypi-publish@master
38
- with:
39
- user: __token__
40
- password: ${{ secrets.pypi_password }}
40
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -16,20 +16,22 @@ jobs:
16
16
  runs-on: ubuntu-latest
17
17
  strategy:
18
18
  matrix:
19
- python-version: [3.8, 3.9, "3.10", "3.11"]
19
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
20
20
 
21
21
  steps:
22
- - uses: actions/checkout@v2
22
+ - uses: actions/checkout@v6
23
23
  with:
24
24
  fetch-depth: 0
25
25
  - name: Set up Python ${{ matrix.python-version }}
26
- uses: actions/setup-python@v2
26
+ uses: actions/setup-python@v6
27
27
  with:
28
28
  python-version: ${{ matrix.python-version }}
29
- - name: Install FFmpeg
29
+ cache: 'pip'
30
+ cache-dependency-path: pyproject.toml
31
+ - name: Install FFmpeg & Poppler
30
32
  run: |
31
33
  sudo apt update
32
- sudo apt install ffmpeg
34
+ sudo apt install ffmpeg poppler-utils
33
35
  ffmpeg -version
34
36
  - name: Install Tox
35
37
  run: python -m pip install tox tox-gh-actions coverage
@@ -38,6 +40,7 @@ jobs:
38
40
  - name: Convert coverage
39
41
  run: python -m coverage xml
40
42
  - name: Upload coverage to Codecov
41
- uses: codecov/codecov-action@v2
43
+ uses: codecov/codecov-action@v5
42
44
  with:
43
45
  fail_ci_if_error: true
46
+ token: ${{ secrets.CODECOV_TOKEN }}
@@ -1,7 +1,7 @@
1
1
  repos:
2
2
 
3
3
  - repo: https://github.com/pre-commit/pre-commit-hooks
4
- rev: v4.4.0
4
+ rev: v6.0.0
5
5
  hooks:
6
6
  - id: check-added-large-files
7
7
  - id: check-merge-conflict
@@ -11,13 +11,9 @@ repos:
11
11
  - id: trailing-whitespace
12
12
  exclude: ".*(galleria|photoswipe|jquery|leaflet).*$"
13
13
 
14
- - repo: https://github.com/psf/black
15
- rev: 23.9.1
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ rev: v0.15.0
16
16
  hooks:
17
- - id: black
18
-
19
- - repo: https://github.com/charliermarsh/ruff-pre-commit
20
- rev: v0.0.291
21
- hooks:
22
- - id: ruff
17
+ - id: ruff-check
23
18
  args: [ --fix, --show-fixes, --exit-non-zero-on-fix ]
19
+ - id: ruff-format
@@ -0,0 +1,20 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: ubuntu-24.04
5
+ tools:
6
+ python: "3.13"
7
+
8
+ sphinx:
9
+ configuration: docs/conf.py
10
+ fail_on_warning: true
11
+
12
+ python:
13
+ install:
14
+ - method: pip
15
+ path: .
16
+ extra_requirements:
17
+ - docs
18
+
19
+ # Don't build any extra formats
20
+ formats: []
@@ -5,6 +5,7 @@ alphabetical order):
5
5
  - Abdul Qabiz
6
6
  - Alexandre Chataignon (@xouillet)
7
7
  - Alexey Bazhin
8
+ - amesgen
8
9
  - Andreas Sieferlinger
9
10
  - Andriy Dzedolik (@IrvinDitz)
10
11
  - Antoine Beaupré
@@ -15,7 +16,8 @@ alphabetical order):
15
16
  - Cédric Bosdonnat
16
17
  - Christophe-Marie Duquesne
17
18
  - Craig Gallek
18
- - @datro
19
+ - datro
20
+ - David Runge
19
21
  - David Schultz
20
22
  - David Siroky
21
23
  - Edward Betts
@@ -36,12 +38,16 @@ alphabetical order):
36
38
  - Keith Feldman
37
39
  - Keith Johnson
38
40
  - Kevin Murray
41
+ - ksfeldman
42
+ - Lixeiden
39
43
  - Lucas Cimon
40
44
  - Lukas Vacek
41
- - Luke Cyca (@lukecyca)
45
+ - Luke Cyca
46
+ - Markus Blöchl
42
47
  - Mate Lakat
43
48
  - Mathieu Leplatre (@leplatrem)
44
49
  - Matthias Vogelgesang
50
+ - max (maauer)
45
51
  - Miroslav Pavleski
46
52
  - Nicolas Arnaud-Cormos
47
53
  - Nikolai Prokoschenko
@@ -58,6 +64,7 @@ alphabetical order):
58
64
  - @t-animal
59
65
  - @thomasdn
60
66
  - Thomas Misilo
67
+ - Tilman Adler
61
68
  - Tim AtLee
62
69
  - Tim Davies
63
70
  - @tired-engineer
@@ -1,5 +1,5 @@
1
1
  The MIT License (MIT)
2
- Copyright (c) 2009-2023 - Simon Conseil
2
+ Copyright (c) 2009-2026 - Simon Conseil
3
3
 
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to
@@ -1,47 +1,44 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: sigal
3
- Version: 2.4
3
+ Version: 2.6
4
4
  Summary: Simple static gallery generator
5
5
  Author-email: Simon Conseil <contact@saimon.org>
6
- License: MIT License
6
+ License-Expression: MIT
7
7
  Project-URL: repository, https://github.com/saimn/sigal
8
- Project-URL: documentation, http://sigal.saimon.org/en/latest/
8
+ Project-URL: documentation, https://sigal.readthedocs.io/en/latest/
9
9
  Keywords: gallery,static,generator,image,video,galleria
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
12
- Classifier: License :: OSI Approved :: MIT License
13
12
  Classifier: Operating System :: OS Independent
14
13
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
- Classifier: Programming Language :: Python :: 3.9
17
- Classifier: Programming Language :: Python :: 3.10
18
- Classifier: Programming Language :: Python :: 3.11
19
14
  Classifier: Topic :: Internet :: WWW/HTTP
20
15
  Classifier: Topic :: Multimedia :: Graphics :: Viewers
21
16
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
- Requires-Python: >=3.8
17
+ Requires-Python: >=3.11
23
18
  Description-Content-Type: text/x-rst
24
19
  License-File: LICENSE
25
20
  Requires-Dist: blinker
26
21
  Requires-Dist: click
27
22
  Requires-Dist: Jinja2>=2.7
28
23
  Requires-Dist: Markdown
29
- Requires-Dist: Pillow>=8.0.0
24
+ Requires-Dist: Pillow>=10.0.0
30
25
  Requires-Dist: pilkit
31
26
  Requires-Dist: natsort
32
27
  Provides-Extra: all
33
- Requires-Dist: boto; extra == "all"
34
28
  Requires-Dist: brotli; extra == "all"
35
29
  Requires-Dist: feedgenerator; extra == "all"
36
30
  Requires-Dist: zopfli; extra == "all"
37
31
  Requires-Dist: cryptography; extra == "all"
32
+ Requires-Dist: pillow-heif; extra == "all"
33
+ Requires-Dist: pdf2image; extra == "all"
38
34
  Provides-Extra: tests
39
35
  Requires-Dist: pytest; extra == "tests"
40
36
  Requires-Dist: pytest-cov; extra == "tests"
41
37
  Provides-Extra: docs
42
38
  Requires-Dist: Sphinx>=4.1.0; extra == "docs"
43
- Requires-Dist: alabaster; extra == "docs"
39
+ Requires-Dist: furo; extra == "docs"
44
40
  Requires-Dist: cryptography; extra == "docs"
41
+ Dynamic: license-file
45
42
 
46
43
  Sigal - Simple Static Gallery Generator
47
44
  =======================================
@@ -68,14 +65,14 @@ The idea behind Sigal is to ease the use of the javascript libraries like
68
65
  galleria_. These libraries do a great job to display the images, Sigal does
69
66
  what is missing: resize images, create thumbnails, generate HTML pages.
70
67
 
71
- Sigal requires Python 3.8+.
68
+ Sigal requires Python 3.11+.
72
69
 
73
- Links :
70
+ Links
71
+ -----
74
72
 
75
73
  * Latest documentation on the website_
76
74
  * Source, issues and pull requests on GitHub_
77
75
  * Releases on PyPI_
78
- * ``#sigal`` on Freenode, or with the webchat_ interface.
79
76
 
80
77
  Themes & Demo
81
78
  -------------
@@ -87,7 +84,7 @@ Javascript libraries:
87
84
  - `galleria demo`_
88
85
  - `photoswipe demo`_
89
86
 
90
- .. _website: http://sigal.saimon.org/
87
+ .. _website: https://sigal.readthedocs.io/en/latest/
91
88
  .. _GitHub: https://github.com/saimn/sigal/
92
89
  .. _PyPI: https://pypi.org/project/sigal/
93
90
  .. _galleria: https://github.com/GalleriaJS/galleria
@@ -96,5 +93,4 @@ Javascript libraries:
96
93
  .. _galleria demo: http://saimon.org/sigal-demo/galleria/
97
94
  .. _colorbox demo: http://saimon.org/sigal-demo/colorbox/
98
95
  .. _photoswipe demo: http://saimon.org/sigal-demo/photoswipe/
99
- .. _webchat: http://webchat.freenode.net/?channels=sigal
100
96
  .. _Jinja2: https://palletsprojects.com/p/jinja/
@@ -23,14 +23,14 @@ The idea behind Sigal is to ease the use of the javascript libraries like
23
23
  galleria_. These libraries do a great job to display the images, Sigal does
24
24
  what is missing: resize images, create thumbnails, generate HTML pages.
25
25
 
26
- Sigal requires Python 3.8+.
26
+ Sigal requires Python 3.11+.
27
27
 
28
- Links :
28
+ Links
29
+ -----
29
30
 
30
31
  * Latest documentation on the website_
31
32
  * Source, issues and pull requests on GitHub_
32
33
  * Releases on PyPI_
33
- * ``#sigal`` on Freenode, or with the webchat_ interface.
34
34
 
35
35
  Themes & Demo
36
36
  -------------
@@ -42,7 +42,7 @@ Javascript libraries:
42
42
  - `galleria demo`_
43
43
  - `photoswipe demo`_
44
44
 
45
- .. _website: http://sigal.saimon.org/
45
+ .. _website: https://sigal.readthedocs.io/en/latest/
46
46
  .. _GitHub: https://github.com/saimn/sigal/
47
47
  .. _PyPI: https://pypi.org/project/sigal/
48
48
  .. _galleria: https://github.com/GalleriaJS/galleria
@@ -51,5 +51,4 @@ Javascript libraries:
51
51
  .. _galleria demo: http://saimon.org/sigal-demo/galleria/
52
52
  .. _colorbox demo: http://saimon.org/sigal-demo/colorbox/
53
53
  .. _photoswipe demo: http://saimon.org/sigal-demo/photoswipe/
54
- .. _webchat: http://webchat.freenode.net/?channels=sigal
55
54
  .. _Jinja2: https://palletsprojects.com/p/jinja/
@@ -22,8 +22,8 @@ gallery:
22
22
  represent the gallery.
23
23
  - *Author*: the author of the gallery, if present it is used instead of the
24
24
  author setting.
25
- - *Sort*: the sort order for this album. If prefixed with a '-' it will be in
26
- reversed order.
25
+ - *Sort*: the sort order for the sub-albums of this album. If prefixed with
26
+ a '-' it will be in reversed order. Not supported to sort medias.
27
27
 
28
28
  Any additional meta-data is available in the templates. For instance::
29
29
 
@@ -2,6 +2,47 @@
2
2
  Changelog
3
3
  ===========
4
4
 
5
+ Version 2.6
6
+ ~~~~~~~~~~~~~~
7
+
8
+ Released on 2026-02-06.
9
+
10
+ Sigal now requires Python 3.11+.
11
+
12
+ - With the photoswipe theme, albums can contain both images and sub-albums
13
+ [:issue:`535`].
14
+ - Fix issue with latest version of feedgenerator.
15
+ - Fix compat with click 8.2.0.
16
+ - Fix theme URL for photoswipe.
17
+ - Thumbnail can now be set in ``index.md`` either with the original filename or
18
+ with the thumbnail name after format conversion [:issue:`476`].
19
+ - Allow portrait orientation for thumbnails [:issue:`531`].
20
+ - nonmedia_files plugin: adding support for PDF thumbnails [:issue:`536`].
21
+
22
+ Version 2.5
23
+ ~~~~~~~~~~~
24
+
25
+ Released on 2025-02-25.
26
+
27
+ Sigal now requires Python 3.9+.
28
+
29
+ - Remove s3 plugin since it relied on boto which is no longer maintained. Help
30
+ is welcome to update the plugin with the new boto3 library. [:issue:`513`]
31
+ - Cache input size to make updating faster [:issue:`506`].
32
+ - Allow sorting albums with negative numbers [:issue:`507`].
33
+ - Write the static files only once [:issue:`510`].
34
+ - Remove subdirectories for the ones skipped with ``ignore_dirs``
35
+ [:issue:`515`].
36
+ - New cli flag ``sigal serve --browser`` to open in default browser
37
+ [:issue:`516`].
38
+ - Add support for ``.heic`` files (requires the optional pillow-heif package)
39
+ [:issue:`519`].
40
+ - Add autoplay setting for galleria [:issue:`520`].
41
+ - Show HTML in media description (with galleria) [:issue:`521`].
42
+ - New ``display_timestamp`` setting to show the generation timestamp
43
+ [:issue:`524`].
44
+ - Update photoswipe to v5.4.4 [:issue:`528`].
45
+
5
46
  Version 2.4
6
47
  ~~~~~~~~~~~
7
48
 
sigal-2.6/docs/conf.py ADDED
@@ -0,0 +1,100 @@
1
+ import os
2
+
3
+ from sigal import __version__
4
+
5
+ # -- General configuration ----------------------------------------------------
6
+
7
+ # If your documentation needs a minimal Sphinx version, state it here.
8
+ # needs_sphinx = '1.0'
9
+
10
+ # Add any Sphinx extension module names here, as strings. They can be
11
+ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
12
+ extensions = ["sphinx.ext.autodoc", "sphinx.ext.extlinks"]
13
+
14
+ extlinks = {"issue": ("https://github.com/saimn/sigal/issues/%s", "#%s")}
15
+
16
+ # Add any paths that contain templates here, relative to this directory.
17
+ templates_path = ["_templates"]
18
+
19
+ # The suffix of source filenames.
20
+ source_suffix = ".rst"
21
+
22
+ # The encoding of source files.
23
+ # source_encoding = 'utf-8-sig'
24
+
25
+ # The master toctree document.
26
+ master_doc = "index"
27
+
28
+ # General information about the project.
29
+ project = "Sigal"
30
+ copyright = "2012-2026, Simon Conseil"
31
+
32
+ # The version info for the project you're documenting, acts as replacement for
33
+ # |version| and |release|, also used in various other places throughout the
34
+ # built documents.
35
+ release = __version__
36
+ version = __version__
37
+
38
+ # The language for content autogenerated by Sphinx. Refer to documentation
39
+ # for a list of supported languages.
40
+ # language = None
41
+
42
+ # There are two options for replacing |today|: either, you set today to some
43
+ # non-false value, then it is used:
44
+ # today = ''
45
+ # Else, today_fmt is used as the format for a strftime call.
46
+ # today_fmt = '%B %d, %Y'
47
+
48
+ # List of patterns, relative to source directory, that match files and
49
+ # directories to ignore when looking for source files.
50
+ exclude_patterns = ["_build"]
51
+
52
+ # If true, '()' will be appended to :func: etc. cross-reference text.
53
+ # add_function_parentheses = True
54
+
55
+ # If true, the current module name will be prepended to all description
56
+ # unit titles (such as .. function::).
57
+ # add_module_names = True
58
+
59
+ # If true, sectionauthor and moduleauthor directives will be shown in the
60
+ # output. They are ignored by default.
61
+ # show_authors = False
62
+
63
+ # The name of the Pygments (syntax highlighting) style to use.
64
+ pygments_style = "sphinx"
65
+ pygments_dark_style = "monokai"
66
+
67
+ # A list of ignored prefixes for module index sorting.
68
+ # modindex_common_prefix = []
69
+
70
+
71
+ # -- Options for HTML output --------------------------------------------------
72
+
73
+ # Define the canonical URL if you are using a custom domain on Read the Docs
74
+ html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "")
75
+
76
+ # Tell Jinja2 templates the build is running on Read the Docs
77
+ html_context = {"READTHEDOCS": os.environ.get("READTHEDOCS", "") == "True"}
78
+
79
+ html_theme = "furo"
80
+
81
+ html_theme_options = {
82
+ "source_repository": "https://github.com/saimn/sigal/",
83
+ "source_branch": "main",
84
+ "source_directory": "docs/",
85
+ "footer_icons": [
86
+ {
87
+ "name": "GitHub",
88
+ "url": "https://github.com/saimn/sigal",
89
+ "html": """
90
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
91
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
92
+ </svg>
93
+ """, # noqa: E501
94
+ "class": "",
95
+ },
96
+ ],
97
+ }
98
+
99
+ # Output file base name for HTML help builder.
100
+ htmlhelp_basename = "Sigaldoc"
@@ -2,8 +2,6 @@
2
2
  Frequently Asked Questions (FAQ)
3
3
  ==================================
4
4
 
5
- .. contents::
6
-
7
5
  How do I protect the gallery with a password?
8
6
  ---------------------------------------------
9
7
 
@@ -25,6 +25,7 @@ The mandatory dependencies are:
25
25
  - Blinker
26
26
  - Click
27
27
  - Jinja2
28
+ - natsort
28
29
  - Pilkit
29
30
  - Pillow
30
31
  - Python Markdown
@@ -33,8 +34,9 @@ There are also a number of optional dependencies for the :doc:`plugins`,
33
34
  installable with the ``[all]`` marker:
34
35
 
35
36
  - Brotli, zopfli (compress assets plugin)
36
- - Boto (upload to S3 plugin)
37
37
  - feedgenerator (feeds plugin)
38
+ - cryptography (encrypt plugin)
39
+ - pillow-heif (HEIF/HEIC support)
38
40
 
39
41
  Packages
40
42
  ~~~~~~~~
@@ -52,3 +52,6 @@ tests:
52
52
  (https://github.com/saimn/sigal/pull/233#issuecomment-275430083)
53
53
  - ``example video.ogv`` : https://commons.wikimedia.org/wiki/File:Examplevideo.ogv
54
54
  (Public domain)
55
+ - ``outdoor.heic``: From @ususdei,
56
+ https://github.com/saimn/sigal/pull/519#issuecomment-2543310727
57
+ (Public domain)
@@ -2,8 +2,6 @@
2
2
  Plugins
3
3
  =========
4
4
 
5
- .. contents::
6
-
7
5
  How to use plugins
8
6
  ------------------
9
7
 
@@ -131,10 +129,10 @@ Non-media Files plugin
131
129
 
132
130
  .. automodule:: sigal.plugins.nonmedia_files
133
131
 
134
- Upload to S3 plugin
135
- ===================
132
+ Titleregexp plugin
133
+ ==================
136
134
 
137
- .. automodule:: sigal.plugins.upload_s3
135
+ .. automodule:: sigal.plugins.titleregexp
138
136
 
139
137
  Watermark plugin
140
138
  ================
@@ -145,8 +143,3 @@ ZIP Gallery plugin
145
143
  ==================
146
144
 
147
145
  .. automodule:: sigal.plugins.zip_gallery
148
-
149
- Titleregexp plugin
150
- ==================
151
-
152
- .. automodule:: sigal.plugins.titleregexp
@@ -85,7 +85,7 @@ This script will then be imported and all defined functions will be available as
85
85
  with the same names in your templates.
86
86
 
87
87
  Documentation of sigal's main classes
88
- -------------------------------------
88
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89
89
 
90
90
  .. autoclass:: sigal.gallery.Album
91
91
  :members:
@@ -8,62 +8,58 @@ description = "Simple static gallery generator"
8
8
  readme = "README.rst"
9
9
  authors = [{name = "Simon Conseil", email = "contact@saimon.org"}]
10
10
  keywords = ["gallery", "static", "generator", "image", "video", "galleria"]
11
- license = {text = "MIT License"}
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
12
13
  classifiers = [
13
14
  "Development Status :: 5 - Production/Stable",
14
15
  "Environment :: Console",
15
- "License :: OSI Approved :: MIT License",
16
16
  "Operating System :: OS Independent",
17
17
  "Programming Language :: Python :: 3",
18
- "Programming Language :: Python :: 3.8",
19
- "Programming Language :: Python :: 3.9",
20
- "Programming Language :: Python :: 3.10",
21
- "Programming Language :: Python :: 3.11",
22
18
  "Topic :: Internet :: WWW/HTTP",
23
19
  "Topic :: Multimedia :: Graphics :: Viewers",
24
20
  "Topic :: Software Development :: Libraries :: Python Modules",
25
21
  ]
26
- requires-python = ">=3.8"
22
+ requires-python = ">=3.11"
27
23
  dependencies = [
28
24
  "blinker",
29
25
  "click",
30
26
  "Jinja2>=2.7",
31
27
  "Markdown",
32
- "Pillow>=8.0.0",
28
+ "Pillow>=10.0.0",
33
29
  "pilkit",
34
30
  "natsort",
35
31
  ]
36
32
  dynamic = ["version"]
37
33
 
38
34
  [project.optional-dependencies]
39
- all = ["boto", "brotli", "feedgenerator", "zopfli", "cryptography"]
35
+ all = ["brotli", "feedgenerator", "zopfli", "cryptography", "pillow-heif", "pdf2image"]
40
36
  tests = ["pytest", "pytest-cov"]
41
- docs = ["Sphinx>=4.1.0", "alabaster", "cryptography"]
37
+ docs = ["Sphinx>=4.1.0", "furo", "cryptography"]
42
38
 
43
39
  [project.scripts]
44
40
  sigal = "sigal.__main__:main"
45
41
 
46
42
  [project.urls]
47
43
  repository = "https://github.com/saimn/sigal"
48
- documentation = "http://sigal.saimon.org/en/latest/"
44
+ documentation = "https://sigal.readthedocs.io/en/latest/"
49
45
 
50
46
  [tool.setuptools]
51
47
  include-package-data = true
52
- license-files = ["LICENSE"]
53
48
 
54
49
  [tool.setuptools.packages.find]
55
50
  where = ["src"]
56
51
  namespaces = true
57
52
 
53
+ [tool.setuptools.package-data]
54
+ sigal = [
55
+ "plugins/encrypt/static/*",
56
+ "themes/**",
57
+ ]
58
+
58
59
  [tool.setuptools_scm]
59
60
  write_to = "src/sigal/version.py"
60
61
 
61
- [tool.black]
62
- line-length = 88
63
- target-version = ['py38']
64
-
65
- [tool.ruff]
66
- target-version = "py38"
62
+ [tool.ruff.lint]
67
63
  select = [
68
64
  "E", "F", "W", # flake8
69
65
  "I", # isort
@@ -74,7 +70,7 @@ unfixable = [
74
70
  "F841", # Removes unused variables
75
71
  ]
76
72
 
77
- [tool.ruff.isort]
73
+ [tool.ruff.lint.isort]
78
74
  known-first-party = ["sigal"]
79
75
 
80
76
  [tool.coverage.run]
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2009-2023 - Simon Conseil
1
+ # Copyright (c) 2009-2026 - Simon Conseil
2
2
 
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the "Software"), to