~~Python-Markdown>=2.6 and its meta extension supports YAML headers
and optional `yaml` switch which, when used, parses data with
PyYAML and hence a wee bit different metadata object gets provided.~~
Not anymore.
YAML is supported by python-markdown-yaml-meta-data extension
which uses PyYAML, which returns parsed lists of strings instead
of raw strings, datetime objects instead of string date
representations etc. Pelican needed only slight adjusting, and
now support Jekyll-like YAML headers with aforementioned Markdown
extension.
Related:
* https://github.com/teoric/python-markdown-yaml-meta-data
* https://github.com/getpelican/pelican-plugins/pull/382
* https://github.com/waylan/Python-Markdown/issues/390#issuecomment-76200467
Main goal is to delay `slugify` call until `slug` is needed. `slugify`
can be expensive depending on the input string (see #1172). Changing it
to a property gives plugins time to place custom `slug`s before `name`
is unnecessarily slugified.
With this change, default behavior is same except the time slugification
happens. But if you set custom slug, `slugify` won't be used at all.
So, this is a partial solution to #1172. The rest, setting a custom slug,
would best be handled by a plugin.
* move build environment into tox
* add new environment installing sphinx and testing for doc errors
* reorganize dependency installs for easier management
The quickstart was worded confusingly - it said "from your project directory", which implied doing a `cd ..` down to the `projects` dir, which would cause `pelican content` to fail. In fact, you need to be in the `yoursite` directory, which is the directory that has the `content` directory in it.
* move all metadata tests to use a single function call (assertDictHasSubset)
* add tests for assertDictHasSubset
* correct some tests that iterated over metadata instead of expected metadata, resulting in metadata that was expected to be there but was not
* correct resulting broken tests
* add additional tests for EXTRA_PATH_METADATA
* make MdReaderTest fail if Markdown is not available instead of skipping each method individually
`fab serve` and `make devserver` use different HTTP Handlers and as a
result they behave differently. This makes sure `fab serve` also uses
the Handler defined in `pelican.server` in order to get rid of the
inconsistency.