MkDocs plugin for setting revision date from git per markdown file

Overview

mkdocs-git-revision-date-plugin

MkDocs plugin that displays the last revision date of the current page of the documentation based on Git. The revision date will be displayed in ISO format (YYYY-mm-dd). If you need other date formats check out timvink's fork

Setup

Install the plugin using pip:

pip install mkdocs-git-revision-date-plugin

Activate the plugin in mkdocs.yml:

plugins:
  - search
  - git-revision-date

Note: If you have no plugins entry in your config file yet, you'll likely also want to add the search plugin. MkDocs enables it by default if there is no plugins entry set, but now you have to enable it explicitly.

More information about plugins in the MkDocs documentation.

Usage

Templates - page.meta.revision_date:

Example

{% block footer %}
<hr>
<p>{% if config.copyright %}
<small>{{ config.copyright }}<br></small>
{% endif %}
<small>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</small>
{% if page.meta.revision_date %}
<small><br><i>Updated {{ page.meta.revision_date }}</i></small>
{% endif %}
</p>
{% endblock %}

More information about templates here.

More information about blocks here.

Markdown - {{ git_revision_date }}:

Example

Page last revised on: {{ git_revision_date }}

If using mkdocs_macro_plugin, it must be included after our plugin.

i.e., mkdocs.yml:

plugins:
  - search
  - git-revision-date
  - macros

Options

enabled_if_env

Setting this option will enable the build only if there is an environment variable set to 1. Default is not set.

modify_md

Setting this option to false will disable the use of {{ git_revision_date }} in markdown files. Default is true.

as_datetime

Setting this option to True will output git_revision_date as a python datetime. This means you can use jinja2 date formatting, for example as {{ git_revision_date.strftime('%d %B %Y') }}. Default is false.

Comments
  • Error with mkdocs 1.1:

    Error with mkdocs 1.1: "ImportError: cannot import name 'string_types'"

    Hi,

    I am using Travis CI to build my site. After mkdocs updating to version 1.1 from 1.0.4 build failed with the following error:

    File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/mkdocs_git_revision_date_plugin/plugin.py", line 6, in from mkdocs.utils import string_types ImportError: cannot import name 'string_types'

    Full log is there: https://travis-ci.com/alperyazar/www/builds/150195520

    If I forced Travis CI to use mkdocs version 1.0.4 everything works fine. (https://travis-ci.com/alperyazar/www/builds/150197448)

    Is an update required to work with mkdocs 1.1?

    Thank you.

    opened by alperyazar 3
  • cannot run mkdocs build

    cannot run mkdocs build

    Is this plugin work with private github repository ?

    When I try to build mkdocs, I have this message :

    jinja2.exceptions.UndefinedError: 'secrets' is undefined

    Full log :

    ERROR   -  Error reading page 'deviens.dev---hébergement.md': 'secrets' is undefined 
    Traceback (most recent call last):
      File "/home/profy/.ve-mkdocs-python3/bin/mkdocs", line 8, in <module>
        sys.exit(cli())
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/click/core.py", line 764, in __call__
        return self.main(*args, **kwargs)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/click/core.py", line 717, in main
        rv = self.invoke(ctx)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/click/core.py", line 956, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/click/core.py", line 555, in invoke
        return callback(*args, **kwargs)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/mkdocs/__main__.py", line 163, in build_command
        ), dirty=not clean)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/mkdocs/commands/build.py", line 274, in build
        _populate_page(file.page, config, files, dirty)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/mkdocs/commands/build.py", line 174, in _populate_page
        'page_markdown', page.markdown, page=page, config=config, files=files
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/mkdocs/plugins.py", line 94, in run_event
        result = method(item, **kwargs)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/mkdocs_git_revision_date_plugin/plugin.py", line 59, in on_page_markdown
        return md_template.render({'git_revision_date': revision_date})
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
        return original_render(self, *args, **kwargs)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
        return self.environment.handle_exception(exc_info, True)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
        raise value.with_traceback(tb)
      File "<template>", line 103, in top-level template code
      File "/home/profy/.ve-mkdocs-python3/lib/python3.6/site-packages/jinja2/environment.py", line 430, in getattr
        return getattr(obj, attribute)
    jinja2.exceptions.UndefinedError: 'secrets' is undefined
    
    opened by profy12 3
  • {{ page.meta.revision_date }} should be type String

    {{ page.meta.revision_date }} should be type String

    Currently it is impossible to edit {{ page.meta.revision_date }} using Javascript because it is a number (typeof=number). I would like to change the displaying format from YYYY-MM-DD to something more user friendly such as a text like 25 January 2019 but for that {{ page.meta.revision_date }} should be a String in order to perform some operations such as split() and concat().

    Is there any way to change the date-format using your plugin? Have you think about changing the type of variable from number to String?

    Thanks!

    opened by angelobanse 3
  • Display relative time ago

    Display relative time ago

    When using revision-date in templates we could offer the possibility to display it relatively using the timeago package and implementing as a custom jinja2 filter, like so:

    <i>Updated {{ page.meta.revision_date }}</i>
    <i>Updated {{ page.meta.revision_date | totimeago }}</i>
    <i>Updated {{ page.meta.revision_date | totimeago('nl') }}</i>
    

    Example output:

    Updated 2019-11-28
    Updated 20 hours ago
    Updated 20 uren geleden
    

    Would like to offer a PR!

    opened by timvink 2
  • 4 as datetime

    4 as datetime

    • Adds option to output git-revision-datetime as python datetime object
    • Consistent output as str when there is no revision_date (was datetime)
    • Updated README
    opened by timvink 2
  • jinja2.exceptions.UndefinedError: 'None' has no attribute 'meta'

    jinja2.exceptions.UndefinedError: 'None' has no attribute 'meta'

    I followed the instructions in the README, but got 'None' has no attribute 'meta' error during build.

    Full log (click to expand):

    $ mkdocs build
    INFO    -  Cleaning site directory 
    INFO    -  Building documentation to directory: app/templates/docs
    Traceback (most recent call last):
      File "env/bin/mkdocs", line 11, in <module>
        sys.exit(cli())
      File "env/lib/python3.6/site-packages/click/core.py", line 764, in __call__
        return self.main(*args, **kwargs)
      File "env/lib/python3.6/site-packages/click/core.py", line 717, in main
        rv = self.invoke(ctx)
      File "env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "env/lib/python3.6/site-packages/click/core.py", line 956, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "env/lib/python3.6/site-packages/click/core.py", line 555, in invoke
        return callback(*args, **kwargs)
      File "env/lib/python3.6/site-packages/mkdocs/__main__.py", line 163, in build_command
        ), dirty=not clean)
      File "env/lib/python3.6/site-packages/mkdocs/commands/build.py", line 288, in build
        _build_theme_template(template, env, files, config, nav)
      File "env/lib/python3.6/site-packages/mkdocs/commands/build.py", line 117, in _build_theme_template
        output = _build_template(template_name, template, files, config, nav)
      File "env/lib/python3.6/site-packages/mkdocs/commands/build.py", line 96, in _build_template
        output = template.render(context)
      File "env/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
        return original_render(self, *args, **kwargs)
      File "env/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
        return self.environment.handle_exception(exc_info, True)
      File "env/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "env/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
        raise value.with_traceback(tb)
      File "env/lib/python3.6/site-packages/mkdocs/themes/readthedocs/search.html", line 1, in top-level template code
        {% extends "base.html" %}
      File "env/lib/python3.6/site-packages/mkdocs/themes/readthedocs/base.html", line 118, in top-level template code
        {%- block footer %}
      File "env/lib/python3.6/site-packages/mkdocs/themes/readthedocs/base.html", line 119, in block "footer"
        {% include "footer.html" %}
      File "markdown/custom_theme/footer.html", line 27, in top-level template code
        <br><i>Updated {{ page.meta.revision_date }}</i>
      File "env/lib/python3.6/site-packages/jinja2/environment.py", line 430, in getattr
        return getattr(obj, attribute)
    jinja2.exceptions.UndefinedError: 'None' has no attribute 'meta'
    

    As can be sean from stack trace, I am using readthedocs theme and have footer.html file in custom_theme dir:

    plugins:
      - search
      - git-revision-date
    theme:
      name: readthedocs
      custom_dir: custom_theme/
    
    footer.html (click to expand):

    <footer>
      {%- block next_prev %}
      {% if config.theme.prev_next_buttons_location|lower in ['bottom', 'both']
            and page and (page.next_page or page.previous_page) %}
        <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
          {% if page.next_page %}
            <a href="{{ page.next_page.url|url }}" class="btn btn-neutral float-right" title="{{ page.next_page.title }}">Next <span class="icon icon-circle-arrow-right"></span></a>
          {% endif %}
          {% if page.previous_page %}
            <a href="{{ page.previous_page.url|url }}" class="btn btn-neutral" title="{{ page.previous_page.title }}"><span class="icon icon-circle-arrow-left"></span> Previous</a>
          {% endif %}
        </div>
      {% endif %}
      {%- endblock %}
    
      <hr/>
    
      <div role="contentinfo">
        <!-- Copyright etc -->
        {% if config.copyright %}
          <p><small>{{ config.copyright }}</small></p>
        {% endif %}
      </div>
    
      <small>
        Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
        <br><i>Updated {{ page.meta.revision_date }}</i>
      </small>
    </footer>
    

    Where am I doing wrong?

    readthedocs theme 
    opened by ozbek 2
  • Update plugin.py

    Update plugin.py

    Fixes a Regression, cleans up unused import

    ImportError: cannot import name 'string_types' from 'mkdocs.utils' (/Users/munagekar/../lib/python3.8/site-packages/mkdocs/utils/__init__.py)
    
    opened by munagekar 1
  • Add option for document expiration

    Add option for document expiration

    If the published date is older than a predefined interval, then mkdocs build should fail, and a warning message issues for the offending document.

    For example, here is a snippet from an article

    ---
    date: 2001-07-19
    ---
    
    # Article Title
    

    And here is the option in my mkdocs.yml file:

    extra:
      expiration_period: 2Y
    

    Then during the build phase:

    mkdocs build
    Error: documentation has not been update since July, 2001.
    
    opened by oxr463 1
  • fix mkdocs 1.1 compatibility

    fix mkdocs 1.1 compatibility

    mkdocs 1.1 removed util.string_types and recommends to use str directly

    Fixes: https://github.com/zhaoterryy/mkdocs-git-revision-date-plugin/issues/12

    opened by NeroBurner 1
  • help with material

    help with material

    Hi! I use material theme and would like to keep the footer as it is plus revision date and not completly replace it. How would I do that?

    Also, I am wondering if it would be possible to add the date at the top-right of every page? As it says in the documentation:

    content: Contains the page content and table of contents for the page.

    So I have to insert it somewhere there?

    invalid 
    opened by berot3 1
  • How can I add this to markdown

    How can I add this to markdown

    I don't want to mess with theme files because then upgrading theme later might be problematic.

    I have a header/footer system via mkdocs-include. Is it possible to add this in markdown directly, i.e.

    footer.md

    Last changed: {{revision_date}}
    
    opened by majkinetor 1
  • git error when building docs with the git-revision-date plugin

    git error when building docs with the git-revision-date plugin

    A recent change in Git impacts our GitHub build. We have the error described here:

    ERROR    -  Error reading page 'index.md': Cmd('git') failed due to: exit code(128)
      cmdline: git log -n 1 --date=short --format=%ad /docs/docs/index.md
      stderr: 'fatal: unsafe repository ('/docs' is owned by someone else)
    

    Using the workaround didn't work as we are using mkdocs within a container (docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build).

    Until a solution is found, we have removed the plugin from our project. Let us know if you have a workaround or recommendations to use your plugin within GitHub actions.

    opened by jeromevdl 0
  • `mkdocs build` will fail when `as_datetime` is `true`

    `mkdocs build` will fail when `as_datetime` is `true`

    Hi I'm facing the problem below, please let me know if there is some workaround to build document with as_datetime setting is enabled.

    Description

    When if as_datetime: true as the plugin setting, then the command mkdocs build will fail by the following error:

    ERROR   -  Error reading page 'index.md': decoding to str: need a bytes-like object, datetime.datetime found 
    Traceback (most recent call last):
      File "/usr/local/bin/mkdocs", line 8, in <module>
        sys.exit(cli())
      File "/usr/local/lib/python3.8/site-packages/click/core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "/usr/local/lib/python3.8/site-packages/click/core.py", line 782, in main
        rv = self.invoke(ctx)
      File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/local/lib/python3.8/site-packages/click/core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "/usr/local/lib/python3.8/site-packages/mkdocs/__main__.py", line 152, in build_command
        build.build(config.load_config(**kwargs), dirty=not clean)
      File "/usr/local/lib/python3.8/site-packages/mkdocs/commands/build.py", line 271, in build
        _populate_page(file.page, config, files, dirty)
      File "/usr/local/lib/python3.8/site-packages/mkdocs/commands/build.py", line 167, in _populate_page
        page.markdown = config['plugins'].run_event(
      File "/usr/local/lib/python3.8/site-packages/mkdocs/plugins.py", line 94, in run_event
        result = method(item, **kwargs)
      File "/usr/local/lib/python3.8/site-packages/mkdocs_git_revision_date_plugin/plugin.py", line 57, in on_page_markdown
        markdown = re.sub(r"\{\{(\s)*git_revision_date(\s)*\}\}",
      File "/usr/local/lib/python3.8/re.py", line 210, in sub
        return _compile(pattern, flags).sub(repl, string, count)
      File "/usr/local/lib/python3.8/re.py", line 327, in _subx
        template = _compile_repl(template, pattern)
      File "/usr/local/lib/python3.8/re.py", line 318, in _compile_repl
        return sre_parse.parse_template(repl, pattern)
      File "/usr/local/lib/python3.8/sre_parse.py", line 972, in parse_template
        s = Tokenizer(source)
      File "/usr/local/lib/python3.8/sre_parse.py", line 228, in __init__
        string = str(string, 'latin1')
    TypeError: decoding to str: need a bytes-like object, datetime.datetime found
    

    Steps to reproduce the bug

    The problem can be reproduced by using the simple project below with the package versions below: https://github.com/hitsumabushi845/git-revision-issue-reproduction

    Package versions

    • Python: 3.8.6
    • MkDocs: 1.1.2
    • git-revision-plugin: 0.3.1
    opened by hitsumabushi845 1
  • can't use curly braces in my doc

    can't use curly braces in my doc

    Hi, I'm having an issue trying to render curly braces in documentation (doc for jinja2 templates)

    I'm looking to render something simple like:

    {{ define "main" }}
    

    I found 4 ways for that:

    1. {% raw %} {{ define "main" }} {% endraw %} 
    2. <!-- {% raw %} --> {{ define "main" }}   <!-- {% endraw %} --> 
    3. {\{ define "main" }}
    4. {{ define "main" }}   
    

    Problem is:

    Online

    on gitlab pages :

    • method 1 renders {% raw%} {{ define "main" }} (hiding {% endraw %})
    • method 2 & 3 & 4 work

    on my computer (Debian 10)

    (with mkdocs installed via pip3 and requirements via requirements.txt):

    • method 1, 2 and 3 work ,
    • method 4 breaks build:
    ERROR   -  Error reading page 'raw_test.md': expected token 'end of print statement', got 'string' 
      Traceback (most recent call last):
        File "/home/makayabou/.local/bin/mkdocs", line 10, in <module>
          sys.exit(cli())
        File "/home/makayabou/.local/lib/python3.7/site-packages/click/core.py", line 829, in __call__
          return self.main(*args, **kwargs)
        File "/home/makayabou/.local/lib/python3.7/site-packages/click/core.py", line 782, in main
          rv = self.invoke(ctx)
        File "/home/makayabou/.local/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
          return _process_result(sub_ctx.command.invoke(sub_ctx))
        File "/home/makayabou/.local/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
          return ctx.invoke(self.callback, **ctx.params)
        File "/home/makayabou/.local/lib/python3.7/site-packages/click/core.py", line 610, in invoke
          return callback(*args, **kwargs)
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs/__main__.py", line 136, in serve_command
          **kwargs
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs/commands/serve.py", line 141, in serve
          config = builder()
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs/commands/serve.py", line 136, in builder
          build(config, live_server=live_server, dirty=dirty)
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs/commands/build.py", line 271, in build
          _populate_page(file.page, config, files, dirty)
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs/commands/build.py", line 168, in _populate_page
          'page_markdown', page.markdown, page=page, config=config, files=files
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs/plugins.py", line 94, in run_event
          result = method(item, **kwargs)
        File "/home/makayabou/.local/lib/python3.7/site-packages/mkdocs_git_revision_date_plugin/plugin.py", line 57, in on_page_markdown
          md_template = Template(markdown)
        File "/home/makayabou/.local/lib/python3.7/site-packages/jinja2/environment.py", line 1031, in __new__
          return env.from_string(source, template_class=cls)
        File "/home/makayabou/.local/lib/python3.7/site-packages/jinja2/environment.py", line 941, in from_string
          return cls.from_code(self, self.compile(source), globals, None)
        File "/home/makayabou/.local/lib/python3.7/site-packages/jinja2/environment.py", line 638, in compile
          self.handle_exception(source=source_hint)
        File "/home/makayabou/.local/lib/python3.7/site-packages/jinja2/environment.py", line 832, in handle_exception
          reraise(*rewrite_traceback_stack(source=source))
        File "/home/makayabou/.local/lib/python3.7/site-packages/jinja2/_compat.py", line 28, in reraise
          raise value.with_traceback(tb)
        File "<unknown>", line 16, in template
      jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got 'string'
    

    Files

    Here is my mkdocs.yml :

    site_name: Garage Num Doc
    site_url: https://garagenum.gitlab.io/doc
    site_dir: public
    theme: 
        name: material
        custom_dir: overrides
        features:
            - navigation.instant
            - navigation.expand
            - navigation.tabs
    plugins:
        - search:
            min_search_length: 2
        - add-number:
            order: 2
            excludes:
                - divers/cmd/
            includes:
                - divers/cmd/screen
        - git-authors  
        - git-revision-date
    markdown_extensions:
        - admonition
        - pymdownx.tabbed
        - pymdownx.details
        - pymdownx.superfences:
            custom_fences:
              - name: mermaid
                class: mermaid
                format: !!python/name:pymdownx.superfences.fence_div_format
        - pymdownx.highlight:
            use_pygments: false
            linenums_style: pymdownx.inline
        - pymdownx.inlinehilite
        - pymdownx.keys
        - footnotes
        - toc:
            permalink: true
        - attr_list
    

    and here is my requirements.txt

    mkdocs>=1.1.2
    mkdocs-material>=5.4.0
    Pygments
    git+https://github.com/pugong/mkdocs-mermaid-plugin
    mkdocs-git-authors-plugin
    mkdocs-git-revision-date-plugin
    mkdocs-add-number-plugin
    

    Maybe you will also need my .gitlab-ci.yml:

    image: python:3.8-buster
    
    before_script:
      - pip install -r requirements.txt
    
    pages:
      stage: deploy
      script:
      - mkdocs build --strict --verbose
      only:
      - master
    

    I had reported that to mkdocs but they pointed me to you as says traceback . https://github.com/mkdocs/mkdocs/issues/2275

    thanks

    opened by makayabou 1
Releases(v0.3.2)
Owner
Terry Zhao
cruising @ exactly 42 🤷‍♂️/day
Terry Zhao
A simple document management REST based API for collaboratively interacting with documents

documan_api A simple document management REST based API for collaboratively interacting with documents.

Shahid Yousuf 1 Jan 22, 2022
100 numpy exercises (with solutions)

100 numpy exercises This is a collection of numpy exercises from numpy mailing list, stack overflow, and numpy documentation. I've also created some p

Nicolas P. Rougier 9.5k Dec 30, 2022
YAML metadata extension for Python-Markdown

YAML metadata extension for Python-Markdown This extension adds YAML meta data handling to markdown with all YAML features. As in the original, metada

Nikita Sivakov 14 Dec 30, 2022
EasyModerationKit is an open-source framework designed to moderate and filter inappropriate content.

EasyModerationKit is a public transparency statement. It declares any repositories and legalities used in the EasyModeration system. It allows for implementing EasyModeration into an advanced charact

Aarav 1 Jan 16, 2022
An open-source script written in python just for fun

Owersite Owersite is an open-source script written in python just for fun. It do

大きなペニスを持つ少年 7 Sep 21, 2022
Contains the assignments from the course Building a Modern Computer from First Principles: From Nand to Tetris.

Contains the assignments from the course Building a Modern Computer from First Principles: From Nand to Tetris.

Matheus Rodrigues 1 Jan 20, 2022
A document format conversion service based on Pandoc.

reformed Document format conversion service based on Pandoc. Usage The API specification for the Reformed server is as follows: GET /api/v1/formats: L

David Lougheed 3 Jul 18, 2022
Fast, efficient Blowfish cipher implementation in pure Python (3.4+).

blowfish This module implements the Blowfish cipher using only Python (3.4+). Blowfish is a block cipher that can be used for symmetric-key encryption

Jashandeep Sohi 41 Dec 31, 2022
EasyMultiClipboard - Python script written to handle more than 1 string in clipboard

EasyMultiClipboard - Python script written to handle more than 1 string in clipboard

WVlab 1 Jun 18, 2022
Python Eacc is a minimalist but flexible Lexer/Parser tool in Python.

Python Eacc is a parsing tool it implements a flexible lexer and a straightforward approach to analyze documents.

Iury de oliveira gomes figueiredo 60 Nov 16, 2022
Mayan EDMS is a document management system.

Mayan EDMS is a document management system. Its main purpose is to store, introspect, and categorize files, with a strong emphasis on preserving the contextual and business information of documents.

3 Oct 02, 2021
Project documentation with Markdown.

MkDocs Project documentation with Markdown. View the MkDocs documentation. Project release notes. Visit the MkDocs wiki for community resources, inclu

MkDocs 15.6k Jan 02, 2023
Python For Finance Cookbook - Code Repository

Python For Finance Cookbook - Code Repository

Packt 544 Dec 25, 2022
ReStructuredText and Sphinx bridge to Doxygen

Breathe Packagers: PGP signing key changes for Breathe = v4.23.0. https://github.com/michaeljones/breathe/issues/591 This is an extension to reStruct

Michael Jones 643 Dec 31, 2022
Documentation of the QR code found on new Austrian ID cards.

Austrian ID Card QR Code This document aims to be a complete documentation of the format used in the QR area on the back of new Austrian ID cards (Per

Gabriel Huber 9 Dec 12, 2022
Convert excel xlsx file's table to csv file, A GUI application on top of python/pyqt and other opensource softwares.

Convert excel xlsx file's table to csv file, A GUI application on top of python/pyqt and other opensource softwares.

David A 0 Jan 20, 2022
Easy OpenAPI specs and Swagger UI for your Flask API

Flasgger Easy Swagger UI for your Flask API Flasgger is a Flask extension to extract OpenAPI-Specification from all Flask views registered in your API

Flasgger 3.1k Jan 05, 2023
Cleaner script to normalize knock's output EPUBs

clean-epub The excellent knock application by Benton Edmondson outputs EPUBs that seem to be DRM-free. However, if you run the application twice on th

2 Dec 16, 2022
Numpy's Sphinx extensions

numpydoc -- Numpy's Sphinx extensions This package provides the numpydoc Sphinx extension for handling docstrings formatted according to the NumPy doc

NumPy 234 Dec 26, 2022
xeuledoc - Fetch information about a public Google document.

xeuledoc - Fetch information about a public Google document.

Malfrats Industries 651 Dec 27, 2022