sigal 2.4__tar.gz → 2.5__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 (261) hide show
  1. sigal-2.5/.github/dependabot.yml +15 -0
  2. {sigal-2.4 → sigal-2.5}/.github/workflows/publish.yml +7 -7
  3. {sigal-2.4 → sigal-2.5}/.github/workflows/python-tests.yml +5 -4
  4. {sigal-2.4 → sigal-2.5}/.pre-commit-config.yaml +4 -8
  5. sigal-2.5/.readthedocs.yml +20 -0
  6. {sigal-2.4 → sigal-2.5}/AUTHORS +9 -2
  7. {sigal-2.4 → sigal-2.5}/PKG-INFO +8 -13
  8. {sigal-2.4 → sigal-2.5}/README.rst +3 -4
  9. {sigal-2.4 → sigal-2.5}/docs/album_information.rst +2 -2
  10. {sigal-2.4 → sigal-2.5}/docs/changelog.rst +24 -0
  11. sigal-2.5/docs/conf.py +100 -0
  12. {sigal-2.4 → sigal-2.5}/docs/faq.rst +0 -2
  13. {sigal-2.4 → sigal-2.5}/docs/installation.rst +3 -1
  14. {sigal-2.4 → sigal-2.5}/docs/license.rst +3 -0
  15. {sigal-2.4 → sigal-2.5}/docs/plugins.rst +3 -10
  16. {sigal-2.4 → sigal-2.5}/docs/themes.rst +1 -1
  17. {sigal-2.4 → sigal-2.5}/pyproject.toml +11 -14
  18. {sigal-2.4 → sigal-2.5}/src/sigal/__main__.py +6 -1
  19. {sigal-2.4 → sigal-2.5}/src/sigal/gallery.py +24 -9
  20. {sigal-2.4 → sigal-2.5}/src/sigal/image.py +21 -4
  21. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/compress_assets.py +4 -3
  22. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/encrypt/encrypt.py +1 -1
  23. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/encrypt/endec.py +2 -2
  24. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/extended_caching.py +5 -1
  25. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/nomedia.py +1 -1
  26. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/titleregexp.py +2 -2
  27. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/zip_gallery.py +1 -1
  28. {sigal-2.4 → sigal-2.5}/src/sigal/settings.py +12 -1
  29. {sigal-2.4 → sigal-2.5}/src/sigal/templates/sigal.conf.py +9 -11
  30. sigal-2.5/src/sigal/themes/default/templates/description.html +29 -0
  31. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/footer.html +3 -0
  32. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/templates/album_items.html +2 -23
  33. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-dynamic-caption-plugin.esm.js +414 -0
  34. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-dynamic-caption-plugin.esm.min.js +5 -0
  35. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-fullscreen.esm.js +129 -0
  36. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-fullscreen.esm.min.js +8 -0
  37. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-lightbox.esm.js +1960 -0
  38. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-lightbox.esm.js.map +1 -0
  39. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-lightbox.esm.min.js +5 -0
  40. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-video-plugin.esm.js +257 -0
  41. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe-video-plugin.esm.min.js +1 -0
  42. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe.css +420 -0
  43. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe.esm.js +7081 -0
  44. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe.esm.js.map +1 -0
  45. sigal-2.5/src/sigal/themes/photoswipe/static/photoswipe.esm.min.js +5 -0
  46. {sigal-2.4 → sigal-2.5}/src/sigal/themes/photoswipe/static/styles.css +53 -0
  47. sigal-2.5/src/sigal/themes/photoswipe/templates/album.html +93 -0
  48. {sigal-2.4 → sigal-2.5}/src/sigal/utils.py +4 -1
  49. sigal-2.5/src/sigal/version.py +21 -0
  50. {sigal-2.4 → sigal-2.5}/src/sigal/video.py +2 -2
  51. {sigal-2.4 → sigal-2.5}/src/sigal/writer.py +10 -2
  52. {sigal-2.4 → sigal-2.5}/src/sigal.egg-info/PKG-INFO +8 -13
  53. {sigal-2.4 → sigal-2.5}/src/sigal.egg-info/SOURCES.txt +16 -15
  54. {sigal-2.4 → sigal-2.5}/src/sigal.egg-info/requires.txt +2 -2
  55. sigal-2.5/tests/sample/pictures/dir1/test1/11.md +10 -0
  56. sigal-2.5/tests/sample/pictures/dir1/test1/outdoor.heic +0 -0
  57. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test2/21.md +1 -1
  58. sigal-2.5/tests/sample/pictures/dir1/test2/index.md +2 -0
  59. sigal-2.5/tests/sample/pictures/nomedia/ignored/.nomedia +0 -0
  60. {sigal-2.4 → sigal-2.5}/tests/sample/sigal.conf.py +3 -2
  61. {sigal-2.4 → sigal-2.5}/tests/test_compress_assets_plugin.py +3 -1
  62. {sigal-2.4 → sigal-2.5}/tests/test_gallery.py +19 -5
  63. {sigal-2.4 → sigal-2.5}/tests/test_image.py +12 -0
  64. {sigal-2.4 → sigal-2.5}/tests/test_plugins.py +3 -1
  65. {sigal-2.4 → sigal-2.5}/tests/test_utils.py +3 -1
  66. {sigal-2.4 → sigal-2.5}/tests/test_zip.py +2 -7
  67. {sigal-2.4 → sigal-2.5}/tox.ini +5 -3
  68. sigal-2.4/.readthedocs.yml +0 -12
  69. sigal-2.4/docs/conf.py +0 -165
  70. sigal-2.4/src/sigal/plugins/upload_s3.py +0 -106
  71. sigal-2.4/src/sigal/themes/photoswipe/static/app.js +0 -214
  72. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.css +0 -485
  73. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.css.map +0 -10
  74. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.png +0 -0
  75. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/default-skin.svg +0 -36
  76. sigal-2.4/src/sigal/themes/photoswipe/static/default-skin/preloader.gif +0 -0
  77. sigal-2.4/src/sigal/themes/photoswipe/static/echo/blank.gif +0 -0
  78. sigal-2.4/src/sigal/themes/photoswipe/static/echo/echo.js +0 -135
  79. sigal-2.4/src/sigal/themes/photoswipe/static/echo/echo.min.js +0 -2
  80. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe-ui-default.js +0 -871
  81. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe-ui-default.min.js +0 -1
  82. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.css +0 -175
  83. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.css.map +0 -10
  84. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.js +0 -3592
  85. sigal-2.4/src/sigal/themes/photoswipe/static/photoswipe.min.js +0 -1
  86. sigal-2.4/src/sigal/themes/photoswipe/templates/album.html +0 -98
  87. sigal-2.4/src/sigal/version.py +0 -8
  88. sigal-2.4/tests/sample/pictures/dir1/test1/11.md +0 -4
  89. sigal-2.4/tests/sample/pictures/dir1/test2/index.md +0 -1
  90. {sigal-2.4 → sigal-2.5}/.git-blame-ignore-revs +0 -0
  91. {sigal-2.4 → sigal-2.5}/.gitignore +0 -0
  92. {sigal-2.4 → sigal-2.5}/CONTRIBUTING.rst +0 -0
  93. {sigal-2.4 → sigal-2.5}/LICENSE +0 -0
  94. {sigal-2.4 → sigal-2.5}/docs/Makefile +0 -0
  95. {sigal-2.4 → sigal-2.5}/docs/changelog.py +0 -0
  96. {sigal-2.4 → sigal-2.5}/docs/configuration.rst +0 -0
  97. {sigal-2.4 → sigal-2.5}/docs/contribute.rst +0 -0
  98. {sigal-2.4 → sigal-2.5}/docs/getting_started.rst +0 -0
  99. {sigal-2.4 → sigal-2.5}/docs/image_information.rst +0 -0
  100. {sigal-2.4 → sigal-2.5}/docs/index.rst +0 -0
  101. {sigal-2.4 → sigal-2.5}/docs/make.bat +0 -0
  102. {sigal-2.4 → sigal-2.5}/setup.cfg +0 -0
  103. {sigal-2.4 → sigal-2.5}/src/sigal/__init__.py +0 -0
  104. {sigal-2.4 → sigal-2.5}/src/sigal/log.py +0 -0
  105. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/__init__.py +0 -0
  106. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/adjust.py +0 -0
  107. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/copyright.py +0 -0
  108. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/encrypt/__init__.py +0 -0
  109. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/encrypt/static/decrypt.js +0 -0
  110. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/encrypt/static/keycheck.txt +0 -0
  111. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/encrypt/static/sw.js +0 -0
  112. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/feeds.py +0 -0
  113. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/media_page.py +0 -0
  114. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/nonmedia_files.py +0 -0
  115. {sigal-2.4 → sigal-2.5}/src/sigal/plugins/watermark.py +0 -0
  116. {sigal-2.4 → sigal-2.5}/src/sigal/signals.py +0 -0
  117. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/css/colorbox.css +0 -0
  118. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/css/skeleton.css +0 -0
  119. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/css/style.css +0 -0
  120. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/images/controls.png +0 -0
  121. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/images/loading.gif +0 -0
  122. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/app-with-media-page.js +0 -0
  123. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/app.js +0 -0
  124. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/jquery-2.2.1.js +0 -0
  125. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/jquery-2.2.1.min.js +0 -0
  126. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/jquery.colorbox-min.js +0 -0
  127. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/jquery.colorbox.js +0 -0
  128. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/jquery.touchSwipe.js +0 -0
  129. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/static/js/jquery.touchSwipe.min.js +0 -0
  130. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/templates/album.html +0 -0
  131. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/templates/album_list.html +0 -0
  132. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/templates/base.html +0 -0
  133. {sigal-2.4 → sigal-2.5}/src/sigal/themes/colorbox/templates/media.html +0 -0
  134. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/Control.FullScreen.css +0 -0
  135. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/Control.FullScreen.js +0 -0
  136. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/Leaflet.Photo.css +0 -0
  137. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/Leaflet.Photo.js +0 -0
  138. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/MarkerCluster.Default.css +0 -0
  139. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/MarkerCluster.css +0 -0
  140. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/README +0 -0
  141. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/icon-fullscreen-2x.png +0 -0
  142. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/icon-fullscreen.png +0 -0
  143. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/images/layers-2x.png +0 -0
  144. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/images/layers.png +0 -0
  145. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/images/marker-icon-2x.png +0 -0
  146. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/images/marker-icon.png +0 -0
  147. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/images/marker-shadow.png +0 -0
  148. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/leaflet-providers.js +0 -0
  149. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/leaflet-src.js +0 -0
  150. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/leaflet.css +0 -0
  151. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/leaflet.js +0 -0
  152. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/leaflet.markercluster-src.js +0 -0
  153. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/static/leaflet/leaflet.markercluster.js +0 -0
  154. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/analytics.html +0 -0
  155. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/breadcrumb.html +0 -0
  156. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/decrypt.html +0 -0
  157. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/default_head.html +0 -0
  158. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/download_zip.html +0 -0
  159. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/gtm.html +0 -0
  160. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/links.html +0 -0
  161. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/map.html +0 -0
  162. {sigal-2.4 → sigal-2.5}/src/sigal/themes/default/templates/piwik.html +0 -0
  163. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/README +0 -0
  164. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/css/normalize.css +0 -0
  165. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/css/style.css +0 -0
  166. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/galleria.js +0 -0
  167. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/galleria.min.js +0 -0
  168. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/img/empty.png +0 -0
  169. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/img/fullscreen.png +0 -0
  170. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/jquery-3.3.1.js +0 -0
  171. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/jquery-3.3.1.min.js +0 -0
  172. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/plugins/history/galleria.history.js +0 -0
  173. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/plugins/history/galleria.history.min.js +0 -0
  174. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.css +0 -0
  175. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.js +0 -0
  176. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.min.css +0 -0
  177. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/azur/galleria.azur.min.js +0 -0
  178. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.css +0 -0
  179. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.js +0 -0
  180. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.min.css +0 -0
  181. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/classic/galleria.classic.min.js +0 -0
  182. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.css +0 -0
  183. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.js +0 -0
  184. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.min.css +0 -0
  185. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/folio/galleria.folio.min.js +0 -0
  186. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.css +0 -0
  187. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.js +0 -0
  188. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.min.css +0 -0
  189. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/fullscreen/galleria.fullscreen.min.js +0 -0
  190. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/fullscreen/index.html +0 -0
  191. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.css +0 -0
  192. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.js +0 -0
  193. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.min.css +0 -0
  194. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/miniml/galleria.miniml.min.js +0 -0
  195. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.css +0 -0
  196. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.js +0 -0
  197. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.min.css +0 -0
  198. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/static/themes/twelve/galleria.twelve.min.js +0 -0
  199. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/templates/album.html +0 -0
  200. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/templates/album_list.html +0 -0
  201. {sigal-2.4 → sigal-2.5}/src/sigal/themes/galleria/templates/base.html +0 -0
  202. {sigal-2.4 → sigal-2.5}/src/sigal/themes/photoswipe/templates/album_list.html +0 -0
  203. {sigal-2.4 → sigal-2.5}/src/sigal/themes/photoswipe/templates/base.html +0 -0
  204. {sigal-2.4 → sigal-2.5}/src/sigal.egg-info/dependency_links.txt +0 -0
  205. {sigal-2.4 → sigal-2.5}/src/sigal.egg-info/entry_points.txt +0 -0
  206. {sigal-2.4 → sigal-2.5}/src/sigal.egg-info/top_level.txt +0 -0
  207. {sigal-2.4 → sigal-2.5}/tests/conftest.py +0 -0
  208. /sigal-2.4/tests/sample/pictures/dir1/empty/fake.txt → /sigal-2.5/tests/sample/pictures/.venv/lib64/fake.png +0 -0
  209. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/accentu/303/251/11.jpg" +0 -0
  210. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/accentu/303/251/h/303/251lico/303/257de.jpg" +0 -0
  211. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/accentu/303/251/test?<special> chars#.jpg" +0 -0
  212. {sigal-2.4/tests/sample/pictures → sigal-2.5/tests/sample/pictures/dir1}/empty/fake.txt +0 -0
  213. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/index.md +0 -0
  214. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test1/11.jpg +0 -0
  215. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test1/CMB_Timeline300_no_WMAP.jpg +0 -0
  216. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test1/example.gif +0 -0
  217. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test1/flickr_jerquiaga_2394751088_cc-by-nc.jpg +0 -0
  218. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test1/flickr_jerquiaga_2394751088_cc-by-nc.md +0 -0
  219. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test1/index.md +0 -0
  220. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test2/21.tiff +0 -0
  221. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test2/22.jpg +0 -0
  222. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test2/22.md +0 -0
  223. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test2/CMB_Timeline300_no_WMAP.jpg +0 -0
  224. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test2/CMB_Timeline300_no_WMAP.md +0 -0
  225. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test3/3.jpg +0 -0
  226. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir1/test3/index.md +0 -0
  227. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir2/.nozip_gallery +0 -0
  228. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir2/Hubble Interacting Galaxy NGC 5257.jpg +0 -0
  229. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir2/Hubble ultra deep field.jpg +0 -0
  230. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir2/KeckObservatory20071020.jpg +0 -0
  231. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir2/index.md +0 -0
  232. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/dir2/m57_the_ring_nebula-587px.jpg +0 -0
  233. /sigal-2.4/tests/sample/pictures/nomedia/ignored/.nomedia → /sigal-2.5/tests/sample/pictures/empty/fake.txt +0 -0
  234. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/encryptTest/21.jpg +0 -0
  235. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/encryptTest/22.jpg +0 -0
  236. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/exifTest/21.jpg +0 -0
  237. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/exifTest/22.jpg +0 -0
  238. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/exifTest/noexif.png +0 -0
  239. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/index.md +0 -0
  240. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/iptcTest/1.jpg +0 -0
  241. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/iptcTest/2.jpg +0 -0
  242. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/iptcTest/2.md +0 -0
  243. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/iptcTest/3.jpg +0 -0
  244. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/iptcTest/index.md +0 -0
  245. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nomedia/created/.nomedia +0 -0
  246. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nomedia/created/ignored/should_be_ignored2.jpg +0 -0
  247. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nomedia/created/should_be_created.jpg +0 -0
  248. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nomedia/created/should_be_ignored3.jpg +0 -0
  249. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nomedia/ignored/recursively_ignored/should_be_ignored.jpg +0 -0
  250. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nomedia/ignored/should_be_ignored_1.jpg +0 -0
  251. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/nonmedia_files/dummy.pdf +0 -0
  252. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/video/example video.md +0 -0
  253. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/video/example video.ogv +0 -0
  254. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/webp/_MG_7805_lossy80.webp +0 -0
  255. {sigal-2.4 → sigal-2.5}/tests/sample/pictures/webp/_MG_7808_lossy80.webp +0 -0
  256. {sigal-2.4 → sigal-2.5}/tests/sample/watermark.png +0 -0
  257. {sigal-2.4 → sigal-2.5}/tests/test_cli.py +0 -0
  258. {sigal-2.4 → sigal-2.5}/tests/test_encrypt.py +0 -0
  259. {sigal-2.4 → sigal-2.5}/tests/test_extended_caching.py +0 -0
  260. {sigal-2.4 → sigal-2.5}/tests/test_settings.py +0 -0
  261. {sigal-2.4 → sigal-2.5}/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@v4
17
20
  with:
18
21
  fetch-depth: 0
19
- - uses: actions/setup-python@v2
22
+ - uses: actions/setup-python@v5
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,14 +16,14 @@ 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.9, "3.10", "3.11", "3.12", "3.13"]
20
20
 
21
21
  steps:
22
- - uses: actions/checkout@v2
22
+ - uses: actions/checkout@v4
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@v5
27
27
  with:
28
28
  python-version: ${{ matrix.python-version }}
29
29
  - name: Install FFmpeg
@@ -38,6 +38,7 @@ jobs:
38
38
  - name: Convert coverage
39
39
  run: python -m coverage xml
40
40
  - name: Upload coverage to Codecov
41
- uses: codecov/codecov-action@v2
41
+ uses: codecov/codecov-action@v5
42
42
  with:
43
43
  fail_ci_if_error: true
44
+ 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: v5.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
16
- hooks:
17
- - id: black
18
-
19
- - repo: https://github.com/charliermarsh/ruff-pre-commit
20
- rev: v0.0.291
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ rev: v0.9.7
21
16
  hooks:
22
17
  - id: ruff
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-22.04
5
+ tools:
6
+ python: "3.12"
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,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sigal
3
- Version: 2.4
3
+ Version: 2.5
4
4
  Summary: Simple static gallery generator
5
5
  Author-email: Simon Conseil <contact@saimon.org>
6
6
  License: MIT License
@@ -12,14 +12,10 @@ Classifier: Environment :: Console
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: OS Independent
14
14
  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
15
  Classifier: Topic :: Internet :: WWW/HTTP
20
16
  Classifier: Topic :: Multimedia :: Graphics :: Viewers
21
17
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
- Requires-Python: >=3.8
18
+ Requires-Python: >=3.9
23
19
  Description-Content-Type: text/x-rst
24
20
  License-File: LICENSE
25
21
  Requires-Dist: blinker
@@ -30,17 +26,17 @@ Requires-Dist: Pillow>=8.0.0
30
26
  Requires-Dist: pilkit
31
27
  Requires-Dist: natsort
32
28
  Provides-Extra: all
33
- Requires-Dist: boto; extra == "all"
34
29
  Requires-Dist: brotli; extra == "all"
35
30
  Requires-Dist: feedgenerator; extra == "all"
36
31
  Requires-Dist: zopfli; extra == "all"
37
32
  Requires-Dist: cryptography; extra == "all"
33
+ Requires-Dist: pillow-heif; 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"
45
41
 
46
42
  Sigal - Simple Static Gallery Generator
@@ -68,14 +64,14 @@ The idea behind Sigal is to ease the use of the javascript libraries like
68
64
  galleria_. These libraries do a great job to display the images, Sigal does
69
65
  what is missing: resize images, create thumbnails, generate HTML pages.
70
66
 
71
- Sigal requires Python 3.8+.
67
+ Sigal requires Python 3.9+.
72
68
 
73
- Links :
69
+ Links
70
+ -----
74
71
 
75
72
  * Latest documentation on the website_
76
73
  * Source, issues and pull requests on GitHub_
77
74
  * Releases on PyPI_
78
- * ``#sigal`` on Freenode, or with the webchat_ interface.
79
75
 
80
76
  Themes & Demo
81
77
  -------------
@@ -96,5 +92,4 @@ Javascript libraries:
96
92
  .. _galleria demo: http://saimon.org/sigal-demo/galleria/
97
93
  .. _colorbox demo: http://saimon.org/sigal-demo/colorbox/
98
94
  .. _photoswipe demo: http://saimon.org/sigal-demo/photoswipe/
99
- .. _webchat: http://webchat.freenode.net/?channels=sigal
100
95
  .. _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.9+.
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
  -------------
@@ -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,30 @@
2
2
  Changelog
3
3
  ===========
4
4
 
5
+ Version 2.5
6
+ ~~~~~~~~~~~
7
+
8
+ Released on 2025-02-25.
9
+
10
+ Sigal now requires Python 3.9+.
11
+
12
+ - Remove s3 plugin since it relied on boto which is no longer maintained. Help
13
+ is welcome to update the plugin with the new boto3 library. [:issue:`513`]
14
+ - Cache input size to make updating faster [:issue:`506`].
15
+ - Allow sorting albums with negative numbers [:issue:`507`].
16
+ - Write the static files only once [:issue:`510`].
17
+ - Remove subdirectories for the ones skipped with ``ignore_dirs``
18
+ [:issue:`515`].
19
+ - New cli flag ``sigal serve --browser`` to open in default browser
20
+ [:issue:`516`].
21
+ - Add support for ``.heic`` files (requires the optional pillow-heif package)
22
+ [:issue:`519`].
23
+ - Add autoplay setting for galleria [:issue:`520`].
24
+ - Show HTML in media description (with galleria) [:issue:`521`].
25
+ - New ``display_timestamp`` setting to show the generation timestamp
26
+ [:issue:`524`].
27
+ - Update photoswipe to v5.4.4 [:issue:`528`].
28
+
5
29
  Version 2.4
6
30
  ~~~~~~~~~~~
7
31
 
sigal-2.5/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-2023, 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:
@@ -15,15 +15,11 @@ classifiers = [
15
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.9"
27
23
  dependencies = [
28
24
  "blinker",
29
25
  "click",
@@ -36,9 +32,9 @@ dependencies = [
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"]
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"
@@ -55,15 +51,16 @@ license-files = ["LICENSE"]
55
51
  where = ["src"]
56
52
  namespaces = true
57
53
 
54
+ [tool.setuptools.package-data]
55
+ sigal = [
56
+ "plugins/encrypt/static/*",
57
+ "themes/**",
58
+ ]
59
+
58
60
  [tool.setuptools_scm]
59
61
  write_to = "src/sigal/version.py"
60
62
 
61
- [tool.black]
62
- line-length = 88
63
- target-version = ['py38']
64
-
65
- [tool.ruff]
66
- target-version = "py38"
63
+ [tool.ruff.lint]
67
64
  select = [
68
65
  "E", "F", "W", # flake8
69
66
  "I", # isort
@@ -74,7 +71,7 @@ unfixable = [
74
71
  "F841", # Removes unused variables
75
72
  ]
76
73
 
77
- [tool.ruff.isort]
74
+ [tool.ruff.lint.isort]
78
75
  known-first-party = ["sigal"]
79
76
 
80
77
  [tool.coverage.run]
@@ -25,6 +25,7 @@ import pathlib
25
25
  import socketserver
26
26
  import sys
27
27
  import time
28
+ import webbrowser
28
29
  from http import server
29
30
 
30
31
  import click
@@ -227,7 +228,8 @@ def build(
227
228
  show_default=True,
228
229
  help="Configuration file",
229
230
  )
230
- def serve(destination, port, config):
231
+ @option("-b", "--browser", is_flag=True, help="Open in your default browser")
232
+ def serve(destination, port, config, browser):
231
233
  """Run a simple web server."""
232
234
  if os.path.exists(destination):
233
235
  pass
@@ -253,6 +255,9 @@ def serve(destination, port, config):
253
255
  httpd = socketserver.TCPServer(("", port), Handler, False)
254
256
  print(f" * Running on http://127.0.0.1:{port}/")
255
257
 
258
+ if browser:
259
+ webbrowser.open(f"http://127.0.0.1:{port}/")
260
+
256
261
  try:
257
262
  httpd.allow_reuse_address = True
258
263
  httpd.server_bind()
@@ -45,7 +45,13 @@ from natsort import natsort_keygen, ns
45
45
  from PIL import Image as PILImage
46
46
 
47
47
  from . import image, signals, video
48
- from .image import get_exif_tags, get_image_metadata, get_size, process_image
48
+ from .image import (
49
+ EXIF_EXTENSIONS,
50
+ get_exif_tags,
51
+ get_image_metadata,
52
+ get_size,
53
+ process_image,
54
+ )
49
55
  from .settings import Status, get_thumb
50
56
  from .utils import (
51
57
  Devnull,
@@ -264,7 +270,7 @@ class Image(Media):
264
270
  datetime_format = self.settings["datetime_format"]
265
271
  return (
266
272
  get_exif_tags(self.raw_exif, datetime_format=datetime_format)
267
- if self.raw_exif and self.src_ext in (".jpg", ".jpeg")
273
+ if self.raw_exif and self.src_ext in EXIF_EXTENSIONS
268
274
  else None
269
275
  )
270
276
 
@@ -289,7 +295,7 @@ class Image(Media):
289
295
  @cached_property
290
296
  def raw_exif(self):
291
297
  """If not `None`, contains the raw EXIF tags."""
292
- if self.src_ext in (".jpg", ".jpeg"):
298
+ if self.src_ext in EXIF_EXTENSIONS:
293
299
  return self.file_metadata["exif"]
294
300
 
295
301
  @cached_property
@@ -486,6 +492,7 @@ class Album:
486
492
  reverse = self.settings["albums_sort_reverse"]
487
493
 
488
494
  if "sort" in self.meta:
495
+ # override default sort order from settings
489
496
  albums_sort_attr = self.meta["sort"][0]
490
497
  if albums_sort_attr[0] == "-":
491
498
  albums_sort_attr = albums_sort_attr[1:]
@@ -515,7 +522,7 @@ class Album:
515
522
  continue
516
523
  return ""
517
524
 
518
- key = natsort_keygen(key=sort_key, alg=ns.LOCALE)
525
+ key = natsort_keygen(key=sort_key, alg=ns.SIGNED | ns.LOCALE)
519
526
  self.subdirs.sort(key=key, reverse=reverse)
520
527
 
521
528
  signals.albums_sorted.send(self)
@@ -530,11 +537,13 @@ class Album:
530
537
  elif medias_sort_attr.startswith("meta."):
531
538
  meta_key = medias_sort_attr.split(".", 1)[1]
532
539
  key = natsort_keygen(
533
- key=lambda s: s.meta.get(meta_key, [""])[0], alg=ns.LOCALE
540
+ key=lambda s: s.meta.get(meta_key, [""])[0],
541
+ alg=ns.SIGNED | ns.LOCALE,
534
542
  )
535
543
  else:
536
544
  key = natsort_keygen(
537
- key=lambda s: getattr(s, medias_sort_attr), alg=ns.LOCALE
545
+ key=lambda s: getattr(s, medias_sort_attr),
546
+ alg=ns.SIGNED | ns.LOCALE,
538
547
  )
539
548
 
540
549
  self.medias.sort(key=key, reverse=self.settings["medias_sort_reverse"])
@@ -734,6 +743,11 @@ class Gallery:
734
743
  fnmatch.fnmatch(relpath, ignore) for ignore in ignore_dirs
735
744
  ):
736
745
  self.logger.info("Ignoring %s", relpath)
746
+ # Remove sub-directories
747
+ for d in dirs[:]:
748
+ path = join(relpath, d) if relpath != "." else d
749
+ if path in albums.keys():
750
+ del albums[path]
737
751
  continue
738
752
 
739
753
  # Remove files that match the ignore_files settings
@@ -767,7 +781,7 @@ class Gallery:
767
781
 
768
782
  with progressbar(
769
783
  albums.values(),
770
- label="%16s" % "Sorting albums",
784
+ label="{:>16s}".format("Sorting albums"),
771
785
  file=self.progressbar_target,
772
786
  ) as progress_albums:
773
787
  for album in progress_albums:
@@ -775,7 +789,7 @@ class Gallery:
775
789
 
776
790
  with progressbar(
777
791
  albums.values(),
778
- label="%16s" % "Sorting media",
792
+ label="{:>16s}".format("Sorting medias"),
779
793
  file=self.progressbar_target,
780
794
  ) as progress_albums:
781
795
  for album in progress_albums:
@@ -891,12 +905,13 @@ class Gallery:
891
905
 
892
906
  if self.settings["write_html"]:
893
907
  album_writer = AlbumPageWriter(self.settings, index_title=self.title)
908
+ album_writer.copy_theme_files()
894
909
  album_list_writer = AlbumListPageWriter(
895
910
  self.settings, index_title=self.title
896
911
  )
897
912
  with progressbar(
898
913
  self.albums.values(),
899
- label="%16s" % "Writing files",
914
+ label="{:>16s}".format("Writing files"),
900
915
  item_show_func=log_func,
901
916
  show_eta=False,
902
917
  file=self.progressbar_target,