75 Commits

Author SHA1 Message Date
Oleh Prypin
30cdac47a9 Switch to pyproject.toml and Hatch build (#2988) 2022-10-07 00:42:48 +02:00
Oleh Prypin
12ee265cc1 Remove pybabel setuptools integration (#2990) 2022-10-03 19:30:02 +02:00
Oleh Prypin
418d23a4da Actually depend on 'colorama' on Windows (#2987)
This was missed in #2606
2022-10-02 20:14:06 +02:00
Oleh Prypin
a56ac6e051 Add plugin events that persist across builds in mkdocs serve
"One-time events" `on_startup(command)`, `on_shutdown`.

Their presence also shows that a plugin *wants* to persist across builds. Otherwise they will be re-created, to not change any existing behavior.
2022-09-11 23:06:34 +02:00
Oleh Prypin
b53e167ad1 Refactor test setup for temporary directories 2022-09-03 13:19:56 +02:00
Timothée Mazzucotelli
4ada758a79 Avoid importlib_metadata dependency since Python 3.10 (#2959) 2022-09-01 23:44:35 +02:00
Oleh Prypin
f7307905d4 Drop support for Python 3.6. It's EOL 2022-08-23 21:29:53 +02:00
Oleh Prypin
90e85f9fae Enforce 'mypy' type checker, add py.typed (#2941) 2022-08-21 18:51:17 +02:00
Oleh Prypin
2a06ece80a Synchronize requirements files, reduce deps installation for lint (#2943) 2022-08-21 17:15:46 +02:00
Ultrabug
dd7986ff7b Requirements: pin Markdown version to <3.4 (#2893) 2022-07-19 09:09:11 +02:00
Oleh Prypin
ec9b583b02 Bump importlib_metadata to at least 4.3 to support Python 3.10 (#2802) 2022-03-26 10:43:00 +01:00
Andrii Oriekhov
5ecbeddc28 add GitHub URL for PyPi (#2785) 2022-03-25 19:45:46 +01:00
Álvaro Mondéjar
7e69cc5f68 Declare support for Python 3.10 (#2617)
* Bump minimum Jinja2 requirement
2021-12-30 23:17:56 +02:00
Álvaro Mondéjar
1da44cea96 Update codebase to Python >= 3.6 (#2612)
- Replaced some `.format` calls with f-strings.
- Removed `'r'` mode argument for `open` function as it is uneeded.
- Removed `__future__` import and `coding: utf-8` comment from a file.
2021-10-24 19:58:17 +02:00
Waylan Limberg
57b5ccd7d6 Add support for Configuration Inheritance
* Support dict only markdown_extensions config
* Support dict only plugin config
* Remove explicit conversion to Unicode as PY2 is no longer supported.
* Refactor yaml_load so that is can recursively call itself.

Fixes #2218.
2021-06-01 14:50:00 -04:00
Oleh Prypin
a444c43474 Reimplement livereload
This discards the dependency on 'livereload' and 'tornado'. This implementation is based on stdlib http.server and is much smaller, while not being a downgrade in any way.

This fixes #2061: multiple file changes no longer cause the site to repeatedly rebuild.
It also makes reloads much more responsive; they're "instant" rather than being on a 1-second polling interval or such.

Each HTML page gets JavaScript injected into it (like before) but now, instead of connecting to WebSocket, it requests a long-polling endpoint, which blocks until a newer version ("epoch") of the site is available - then the page knows to reload itself. After a minute without events, the endpoint will just return the unchanged epoch (to avoid timeouts), then the page requests the same endpoint again. The "downtime" in between requests is not a problem because these are not events that need to be received in real time; the endpoint can instantly report that the latest version is newer than the one the page identified itself as.

The reason to replace WebSocket isn't that it's bad or something, just that stdlib doesn't have it. But long-polling works completely fine here too.
2021-05-25 10:16:31 -04:00
Waylan Limberg
e2a3480735 Remove hard dependency on lunr.py (#2402)
Begin deprecation of 'python' option of 'plugins.search.prebuild_index'.
2021-05-13 15:20:35 -04:00
Ultrabug
e1b77ab66e Support theme localization
A framework for translating themes as been added, which includes:

1. Use of Jinja's `i18n` plugin for translating phrases in templates (not page content).
2. A French translation of the built-in themes (contributions in other languages are welcome).
3. A new `theme.locale` option to define the locale/language of the site.
4. The search plugin uses the value of `theme.locale` as its default 'lang'.
5. Third party themes may chose to use the framework (use is optional).
6. A documented workflow for translating MkDocs built-in themes.
7. Custom tooling for use by translators and theme devs.

The dependencies are not installed by default and are not needed to use MkDocs without translations. However, for anyone who wants to make use of the features, `pip install mkdocs[i18n]` will install all necessary dependencies.

Relates to #211.
2021-05-06 14:30:21 -04:00
Matthew McMillan
0da7f72478 Update lunr and lunr.js to 0.5.9 and 2.3.9 (#2359) 2021-04-10 20:04:44 -04:00
Waylan Limberg
24f7e12efb Replace pgk_resources.parse_version with packaging.version.parse
This removes the final dependency in pkg_resources. Closes #2347.
2021-04-06 16:26:59 -04:00
Waylan Limberg
ec64ab40a5 Replace pkg_resources with importlib_metadata
This is using the new "selection interface" ( by calling `entry_points` with
the `group` parameter) that is being introduced in `importlib.metadata` of
Python 3.10 (currently in alpha). While the backport (`importlib_metadata`)
introduced the same change in version 3.6, various improvements have been made
up through the current release (3.10). Therefore we require
`importlib_metadata>=3.10` for all supported versions of Python (3.6-3.9).
2021-04-06 11:51:45 -04:00
Andre_601
fd5a890578 Refactor Readme and use for long_description
Improve readme with a different structure and some link changes.

The landscape.io links have been removed as that project seems 
discontinued since April 2020.

With `long_description_content_type="text/markdown"` it is possible
to use Markdown text in the `long_description` meta-data field. Make sure
the latest tools (setuptools, wheel, twine) are installed before deploying.
2021-03-29 10:22:44 -04:00
Waylan Limberg
f4de3c7387 Support Environment Variables in config file
Environment variables can be assigned as values in the configuration
file using the !ENV tag. Resolves #1954.

The behavior is defined in the third-party package pyyaml_env_tag:
https://github.com/waylan/pyyaml-env-tag
2020-12-23 13:02:21 -05:00
Waylan Limberg
c7d86d4989 Support PY39 and drop PY35 (#2260)
PyYAML 3.13 fails to install on PY3.9 on MacOS. The next public release was 5.1.
2020-12-21 16:31:38 -05:00
Waylan Limberg
5c2b4f1353 Update ghp_import dependency to 1.0
Replace vendored (and modified) copy of ghp_import with dependency on
upstream library. As of version 1.0+ ghp_import includes a Python API.

MkDocs can now benefit from recent bug fixes and new features, including the following:

* A `.nojekyll` file is automatically included when deploying to GitHub Pages.
* The `--shell` flag is now available, which reportedly works better on Windows.
* Git author and committer environment variables should be respected.

Resolves #2170 and resolves #1383.
2020-12-21 14:02:02 -05:00
Viktor Ahlqvist
b50f32f1c6 Add trove classifier for Python 3.8 2020-10-27 15:01:53 -04:00
Waylan Limberg
7428679a1c Set dependency to lunr[languages]==0.5.8.
Lunr.py version 0.5.8 maintains compatability with Lunr.js 2.3.8, but
restricts its dependnecy to nltk>=3.2.5,<3.5, which avoids installation
issues on some Docker images. Fixes #2062.
2020-04-18 16:30:29 -04:00
Waylan Limberg
675681448e Ensure lunr.py version matches lunr.js
Each version of lunr.py only works with a specific version of lunr.js.
Therefore we must hardcode the specific version of lunr.py in our
requirements. As we recently updated to lunr.js version 2.3.8 (#1995),
that coincides with lunr.py version 0.5.6. See the lunr.py CHANGELOG for
coinciding versions: https://github.com/yeraydiazdiaz/lunr.py/blob/master/CHANGELOG.md
2020-02-22 18:33:38 -05:00
Jim Porter
37e645d623 Use toc_tokens to generate the TOC
This patch improves the consistency of TOC levels, so now the level is always
equal to the N in the `<hN>` tag. It also allows users of the MkDocs theme to
set the navigation depth to show in the TOC panel (defaulting to 2).
Resolves #1910 and resolves #770.
2020-02-17 17:27:12 -05:00
Waylan Limberg
61105ce56d Update min Markdown version to 3.0. 2019-12-23 15:54:26 -05:00
Waylan Limberg
2491c1433a Update min dependency to Jinja 2.10.1.
Jinja 2.10.1 patched a security valnerability. See the release notes here:
https://github.com/pallets/jinja/blob/master/CHANGES.rst#version-2101

Closes #1780.
2019-12-20 15:01:02 -05:00
Waylan Limberg
f601e0ae62 Drop Python 3.4 support. 2019-12-20 09:21:35 -05:00
Waylan Limberg
c9032bd6bf Drop Python 2.7.
* Disable Linkchecker Test.
* Switch to unittest.mock in standard lib.
* Apply `pyupgrade --py3-plus`.
* Note: Using `builtins.open` mocks all calls to `open`, including test setup
(such as in `load_config`). Whereas, `path.to.namespace.open` only mocks
`open` in that namepsace. This all worked differently when we used `io.open`
as that wasn't a builtin to begin with. 
* Add a helpful error msg for PY2 users who use non-standard install methods.

Closes #1926.
2019-12-20 08:44:07 -05:00
Yeray Diaz Diaz
259c2b102b Use lunr.py for prebuilding indices (#1607) 2018-09-29 09:07:53 -04:00
coliff
b4b49a1f52 HTTPS Links 2018-07-19 11:53:56 -04:00
Waylan Limberg
7c0d0b7624 Add official support for PY37. (#1545)
* Use Python 3.7-dev in Travis until they add official support for PY37.
* PY37 requires PyYAML 3.13+.
2018-07-12 15:24:19 -04:00
Waylan Limberg
34ef3ca6d0 Internal Refactor of Pages, Files, and Navigation (#1504)
Internal handling of pages, files and navigation has been completely refactored.
The changes included in the refactor are summarized below.

* Support for hidden pages. All Markdown pages are now included in the build
  regardless of whether they are included in the navigation configuration
  (fixes #699).
* The navigation can now include links to external sites (fixes #989, fixes #1373,
  & fixes #1406).
* Page data (including titles) is properly determined for all pages before any
  page is rendered (fixes #1347).
* Automatically populated navigation now sorts index pages to the top. In other
  words, The index page will be listed as the first child of a directory, while
  all other documents are sorted alphanumerically by file name after the index
  page (fixes #73 & fixes #1042).
* A `README.md` file is now treated as an index file within a directory and
  will be rendered to `index.html` (fixes #608).
* The URLs for all files are computed once and stored in a files collection.
  This ensures all internal links are always computed correctly regardless of
  the configuration. This also allows all internal links to be validated, not
  just links to other Markdown pages. (fixes #842 & fixes #872).
* An `on_files` plugin event has been added, which could be used to include
  files not in the `docs_dir`, exclude files, redefine page URLs (i.e.
  implement extensionless URLs), or to manipulate files in various other ways.

Backward incompatible changes are highlighted in the release notes included 
with this commit. Some notes regarding various decisions follow in no particular 
order:

This started out as the contents of the 'structure' dir from @tomchristie's 
work in #689.

All paths must be all Unicode all the time. When a byte string and a 
Unicode string are both passed to os.path (join ect) then returned value 
is always a byte string. Therefore, we need every path string to be 
Unicode. This ensures validation checks that and if the byte string uses 
the file system encoding, decodes it. For any other encoding, a 
validation error is raised.

Paths which start with a slash are assumed to be relative to the
docs_dir root. This behavior fixes #192. However, the slash not being
present in the output may surprise some users who are trying to create a
link relative to the server root when the mkdocs root is not at the
server root. The URLs available on a page are:

* Page.url is the url relative to the site_dir
* Page.canonical_url is the relative url joined with site_url or None if
  site_url is not defined (the default).
* Page.abs_url is the path component of the canonical url or None if
  canonical_url is None.

Note that new behavior is slightly different than before. Previously
abs_url ignored site_url and was always url with '' prepended. With the
new behavior, if site_url includes a subdir, that subdir will be
included in the abs_url.

When not on a server, there is no sensable "absolute_url" for a page.
Therefore, we shouldn't try to define one.

The thinking is that users generating docs to be browsed in the local
file system (`file://`) should leave the site_url setting unset, while
users who will be serving their docs from a server should be setting the
site_url. And if the site_url point sot a subdir of the server, the
abs_url will stil be absolute from the server root as it uses the "path"
of the canonical_url of the page.

Note that without the magical url context all URLs must be prepended by
`{{ base_url }}/` in the templates. While this requires a change in
third party themes, it is more consistent.

Links being ignored in raw HTML is now documented. Fixes #991.

All related tests that require temp dirs use the `mkdocs.tests.base.tempdir`
decorator. Note that any unrelated tests have not yet been updated. 
That can happen separately from this. The one test in 
`mkdocs.tests.structure.page_tests` (test_BOM) is unique enough to 
not use the decorator.
2018-06-28 15:08:17 -04:00
Waylan Limberg
d6449f9080 Drop official support for Python 3.3.
Also up tornado version to >=5.0. Fixes #1427.
2018-04-03 15:49:15 -04:00
Waylan Limberg
dd7e2d910b Refactor search plugin (#1418)
* Use a web worker in the browser with a fallback (fixes #859 & closes #1396).
* Optionally pre-build search index (fixes #859 & closes #1061).
* Upgrade to lunr.js 2.x (fixes #1319).
* Support search in languages other than English (fixes #826).
* Allow the user to define the word separators (fixes #867).
* Only run searches for queries of length > 2 (fixes #1127).
* Remove dependency on require.js, mustache, etc. (fixes #1218).
* Compress the search index (fixes #1128).
2018-03-05 19:42:20 -05:00
Waylan Limberg
d393158445 Version to 0.17.0
Also made a couple adjustments to "documented" Python versions.
2017-10-19 19:01:36 -04:00
Waylan Limberg
31e7c29784 Set 'search' as a default plugin.
Maintains better backward-compatability. Documentation updated, including
how to override the default. Also renamed the entry_point to 'search'.
The lib is still 'legacy_search'. When a new/better search plugin is
developed, the `search` entry_point will be pointed there so the default
behavior will inlcude the upgrade and a new `entry_point` will be added
('legacy_search') which points to the old plugin for those who really want
it.
2017-10-12 16:12:40 -04:00
Waylan Limberg
ffae0ef89c The Plugin API. (#1223)
See the included documentation for a full explanation of the API.

Search has been removed and wrapped in a plugin (named "legacy_search").
The search feature was ported as-is. None of the open issues with search
have been addressed. Presumably, a new search plugin will be built from
the ground up which addresses those issues.

Note that there is no 'default' plugins. That means that users get no
search unless they enable it in the config by adding the following to
their `mkdocs.yml` file:

    plugins:
        - legacy_search

Fixes #206
2017-10-01 16:48:47 -04:00
Waylan Limberg
418965977f Drop support for Python 2.6.
MkDocs most likley will no longer run on Python 2.6. All relevant tests
have been removed. Closes #165.
2017-10-01 16:48:47 -04:00
Waylan Limberg
3c8a1fccca Up livereload version to >=2.5.1. (#1122)
This ensures older pyinotify versions don't break the livereload server.
Fixes #1106.
2017-01-08 17:53:08 -05:00
Dougal Matthews
cc1c9a3adb Remove external themes from MkDocs
This change removes the dependency on mkdocs-bootstrap and mkdocs-bootswatch.
It also updates all references in the code. The only remaining connection is
when a user specifies one of these themes but they are not installed they get
slightly helpful error.
2016-03-01 10:53:02 +00:00
Dougal Matthews
c1878a24a6 Add the classifier for Python 3.5 2016-01-29 17:21:25 +00:00
Dougal Matthews
71de07cdaf Lower the required Click version to 3.3 2016-01-29 17:21:12 +00:00
Dougal Matthews
bcb88abcda Rename cli.py to __main__.py
This uses the standard entrypoint name and allows `python -m mkdocs` to
work.
2015-08-13 09:26:21 +01:00
Dougal Matthews
0468754edb Add the default themes back in as packages 2015-06-27 10:40:18 +01:00
Dougal Matthews
aa7c34e3a7 Update package data discovery 2015-06-27 10:40:18 +01:00