Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: timvink/mkdocs-git-revision-date-localized-plugin
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.2.0
Choose a base ref
...
head repository: timvink/mkdocs-git-revision-date-localized-plugin
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.2.1
Choose a head ref
  • 8 commits
  • 12 files changed
  • 1 contributor

Commits on Oct 15, 2023

  1. Copy the full SHA
    31ac474 View commit details
  2. Copy the full SHA
    5bc1535 View commit details
  3. Copy the full SHA
    f11450f View commit details
  4. remove unused import

    timvink authored Oct 15, 2023
    Copy the full SHA
    2d8339b View commit details
  5. Copy the full SHA
    e00d5c5 View commit details
  6. Copy the full SHA
    4bf713a View commit details
  7. Merge pull request #122 from timvink/utctimestamp

    Support Utctimestamp in python 3.12
    timvink authored Oct 15, 2023
    Copy the full SHA
    4d55756 View commit details
  8. bump to v1.2.1

    timvink authored Oct 15, 2023
    Copy the full SHA
    520e7fa View commit details
4 changes: 2 additions & 2 deletions .github/workflows/pythonpublish.yml
Original file line number Diff line number Diff line change
@@ -8,11 +8,11 @@ jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
fetch-depth: '0'
- name: Set up Python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install dependencies
2 changes: 1 addition & 1 deletion .github/workflows/scheduled_unittests.yml
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@master
with:
python-version: 3.9
python-version: 3.10

- name: Install dependencies
run: |
4 changes: 2 additions & 2 deletions .github/workflows/unittests.yml
Original file line number Diff line number Diff line change
@@ -5,11 +5,11 @@ jobs:
name: Run unit tests with codecov upload
runs-on: ${{ matrix.os }}
env:
USING_COVERAGE: '3.7'
USING_COVERAGE: '3.10'
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: [3.7, 3.8, 3.9, "3.10"]
python-version: [3.8, 3.9, "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@master

4 changes: 2 additions & 2 deletions .github/workflows/unittests_codecov.yml
Original file line number Diff line number Diff line change
@@ -13,11 +13,11 @@ jobs:
name: Run unit tests with codecov upload
runs-on: ${{ matrix.os }}
env:
USING_COVERAGE: '3.7'
USING_COVERAGE: '3.10'
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: [3.7, 3.8, 3.9, "3.10"]
python-version: [3.8, 3.9, "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@master

47 changes: 47 additions & 0 deletions mkdocs_git_revision_date_localized_plugin/dates.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@

from babel.dates import format_date, get_timezone

from datetime import datetime, timezone
from typing import Any, Dict


def get_date_formats(
unix_timestamp: float,
locale: str = "en",
time_zone: str = "UTC",
custom_format: str = "%d. %B %Y"
) -> Dict[str, Any]:
"""
Calculate different date formats / types.
Args:
unix_timestamp (float): A timestamp in seconds since 1970. Assumes UTC.
locale (str): Locale code of language to use. Defaults to 'en'.
time_zone (str): Timezone database name (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
custom_format (str): strftime format specifier for the 'custom' type
Returns:
dict: Different date formats.
"""
assert time_zone is not None
assert locale is not None

utc_revision_date = datetime.fromtimestamp(int(unix_timestamp), tz=timezone.utc)
loc_revision_date = utc_revision_date.replace(
tzinfo=get_timezone("UTC")
).astimezone(get_timezone(time_zone))

return {
"date": format_date(loc_revision_date, format="long", locale=locale),
"datetime": " ".join(
[
format_date(loc_revision_date, format="long", locale=locale),
loc_revision_date.strftime("%H:%M:%S"),
]
),
"iso_date": loc_revision_date.strftime("%Y-%m-%d"),
"iso_datetime": loc_revision_date.strftime("%Y-%m-%d %H:%M:%S"),
"timeago": '<span class="timeago" datetime="%s" locale="%s"></span>' % (loc_revision_date.isoformat(), locale),
"custom": loc_revision_date.strftime(custom_format),
}

45 changes: 4 additions & 41 deletions mkdocs_git_revision_date_localized_plugin/util.py
Original file line number Diff line number Diff line change
@@ -2,11 +2,11 @@
import logging
import os
import time
from datetime import datetime

from mkdocs_git_revision_date_localized_plugin.ci import raise_ci_warnings
from mkdocs_git_revision_date_localized_plugin.dates import get_date_formats


from babel.dates import format_date, get_timezone
from git import (
Repo,
Git,
@@ -16,7 +16,7 @@
NoSuchPathError,
)

from typing import Any, Dict
from typing import Dict

logger = logging.getLogger("mkdocs.plugins")

@@ -44,43 +44,6 @@ def _get_repo(self, path: str) -> Git:

return self.repo_cache[path]

@staticmethod
def _date_formats(
unix_timestamp: float, locale: str = "en", time_zone: str = "UTC", custom_format: str = "%d. %B %Y"
) -> Dict[str, Any]:
"""
Calculate different date formats / types.
Args:
unix_timestamp (float): A timestamp in seconds since 1970.
locale (str): Locale code of language to use. Defaults to 'en'.
time_zone (str): Timezone database name (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
custom_format (str): strftime format specifier for the 'custom' type
Returns:
dict: Different date formats.
"""
assert time_zone is not None
assert locale is not None

utc_revision_date = datetime.utcfromtimestamp(int(unix_timestamp))
loc_revision_date = utc_revision_date.replace(
tzinfo=get_timezone("UTC")
).astimezone(get_timezone(time_zone))

return {
"date": format_date(loc_revision_date, format="long", locale=locale),
"datetime": " ".join(
[
format_date(loc_revision_date, format="long", locale=locale),
loc_revision_date.strftime("%H:%M:%S"),
]
),
"iso_date": loc_revision_date.strftime("%Y-%m-%d"),
"iso_datetime": loc_revision_date.strftime("%Y-%m-%d %H:%M:%S"),
"timeago": '<span class="timeago" datetime="%s" locale="%s"></span>' % (loc_revision_date.isoformat(), locale),
"custom": loc_revision_date.strftime(custom_format),
}

def get_git_commit_timestamp(
self,
@@ -201,7 +164,7 @@ def get_date_formats_for_timestamp(
Returns:
dict: Localized date variants.
"""
date_formats = self._date_formats(
date_formats = get_date_formats(
unix_timestamp=commit_timestamp,
time_zone=self.config.get("timezone"),
locale=locale,
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@

setup(
name="mkdocs-git-revision-date-localized-plugin",
version="1.2.0",
version="1.2.1",
description="Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file.",
long_description=LONG_DESCRIPTION,
long_description_content_type="text/markdown",
17 changes: 4 additions & 13 deletions tests/fixtures/i18n/mkdocs.yml
Original file line number Diff line number Diff line change
@@ -22,22 +22,13 @@ markdown_extensions:
plugins:
- search
- i18n:
default_language: !ENV [DEFAULT_LANGUAGE, "en"]
default_language_only: !ENV [DEFAULT_LANGUAGE_ONLY, false]
languages:
default:
name: Default (en)
build: true
en:
- locale: en
name: English
build: true
site_name: "MkDocs static i18n plugin demo (en)"
fr:
default: true
- locale: fr
name: Français
build: true
site_name: "Démo du plugin MkDocs static i18n (fr)"
nav_translations:
fr:
Topic1: Sujet1
Topic2: Sujet2

- git-revision-date-localized
18 changes: 5 additions & 13 deletions tests/fixtures/i18n/mkdocs_wrong_order.yml
Original file line number Diff line number Diff line change
@@ -27,21 +27,13 @@ plugins:
- search
- git-revision-date-localized
- i18n:
default_language: !ENV [DEFAULT_LANGUAGE, "en"]
default_language_only: !ENV [DEFAULT_LANGUAGE_ONLY, false]
languages:
default:
name: Default (en)
build: true
en:
- locale: en
name: English
build: true
site_name: "MkDocs static i18n plugin demo (en)"
fr:
default: true
- locale: fr
name: Français
build: true
site_name: "Démo du plugin MkDocs static i18n (fr)"
nav_translations:
fr:
Topic1: Sujet1
Topic2: Sujet2


24 changes: 9 additions & 15 deletions tests/test_builds.py
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@
# package module
from mkdocs_git_revision_date_localized_plugin.util import Util
from mkdocs_git_revision_date_localized_plugin.ci import commit_count
from mkdocs_git_revision_date_localized_plugin.dates import get_date_formats

# ##################################
# ######## Globals #################
@@ -147,6 +148,7 @@ def setup_commit_history(testproject_path):
testproject_path = str(testproject_path)

repo = git.Repo.init(testproject_path, bare=False)
repo.git.checkout("-b", "master")
author = "Test Person <testtest@gmail.com>"


@@ -342,18 +344,6 @@ def validate_mkdocs_file(temp_path: str, mkdocs_yml_file: str):
# ##################################


def test_date_formats():
u = Util()
assert u._date_formats(1582397529) == {
"date": "February 22, 2020",
"datetime": "February 22, 2020 18:52:09",
"iso_date": "2020-02-22",
"iso_datetime": "2020-02-22 18:52:09",
"timeago": '<span class="timeago" datetime="2020-02-22T18:52:09+00:00" locale="en"></span>',
"custom": '22. February 2020',
}


@pytest.mark.parametrize("mkdocs_file", MKDOCS_FILES, ids=lambda x: f"mkdocs file: {x}")
def test_tags_are_replaced(tmp_path, mkdocs_file):
"""
@@ -390,7 +380,7 @@ def test_tags_are_replaced(tmp_path, mkdocs_file):

# the revision date was in 'setup_commit_history' was set to 1642911026 (Sun Jan 23 2022 04:10:26 GMT+0000)
# Assert {{ git_revision_date_localized }} is replaced
date_formats_revision_date = Util()._date_formats(1642911026,
date_formats_revision_date = get_date_formats(1642911026,
locale=plugin_config.get("locale"),
time_zone=plugin_config.get("timezone"),
custom_format=plugin_config.get("custom_format")
@@ -403,7 +393,7 @@ def test_tags_are_replaced(tmp_path, mkdocs_file):

# The last site revision was set in setup_commit_history to 1643911026 (Thu Feb 03 2022 17:57:06 GMT+0000)
# Assert {{ git_site_revision_date_localized }} is replaced
date_formats_revision_date = Util()._date_formats(1643911026,
date_formats_revision_date = get_date_formats(1643911026,
locale=plugin_config.get("locale"),
time_zone=plugin_config.get("timezone"),
custom_format=plugin_config.get("custom_format")
@@ -416,7 +406,7 @@ def test_tags_are_replaced(tmp_path, mkdocs_file):
# Note {{ git_creation_date_localized }} is only replaced when configured in the config
if plugin_config.get("enable_creation_date"):
# The creation of page_with_tag.md was set in setup_commit_history to 1500854705 ( Mon Jul 24 2017 00:05:05 GMT+0000 )
date_formats_revision_date = Util()._date_formats(1500854705,
date_formats_revision_date = get_date_formats(1500854705,
locale=plugin_config.get("locale"),
time_zone=plugin_config.get("timezone"),
custom_format=plugin_config.get("custom_format")
@@ -628,6 +618,10 @@ def test_low_fetch_depth(tmp_path, caplog):

# Clone the local repo with fetch depth of 1
repo = git.Repo.init(cloned_folder, bare=False)
try:
repo.heads.main.rename("master", force=True)
except:
pass
origin = repo.create_remote("origin", str(testproject_path))
origin.fetch(depth=1, prune=True)
repo.create_head(
72 changes: 72 additions & 0 deletions tests/test_dates.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import pytest
from datetime import datetime, timezone
from babel.dates import get_timezone

from mkdocs_git_revision_date_localized_plugin.dates import get_date_formats



def test_get_dates():
# Test with default arguments
expected_output = {
"date": "January 1, 1970",
"datetime": "January 1, 1970 00:00:00",
"iso_date": "1970-01-01",
"iso_datetime": "1970-01-01 00:00:00",
"timeago": '<span class="timeago" datetime="1970-01-01T00:00:00+00:00" locale="en"></span>',
"custom": "01. January 1970"
}
assert get_date_formats(0) == expected_output

# Test with custom arguments
expected_output = {
"date": "January 1, 1970",
"datetime": "January 1, 1970 00:00:00",
"iso_date": "1970-01-01",
"iso_datetime": "1970-01-01 00:00:00",
"timeago": '<span class="timeago" datetime="1970-01-01T00:00:00+00:00" locale="en"></span>',
"custom": "01. Jan 1970"
}
assert get_date_formats(0, locale="en", time_zone="UTC", custom_format="%d. %b %Y") == expected_output

# Test with non-UTC timezone
expected_output = {
"date": "January 1, 1970",
"datetime": "January 1, 1970 02:00:00",
"iso_date": "1970-01-01",
"iso_datetime": "1970-01-01 02:00:00",
"timeago": '<span class="timeago" datetime="1970-01-01T02:00:00+01:00" locale="en"></span>',
"custom": "01. January 1970"
}
loc_dt = datetime(1970, 1, 1, 1, 0, 0, tzinfo=get_timezone("Europe/Berlin"))
unix_timestamp = loc_dt.replace(tzinfo=timezone.utc).timestamp()
assert get_date_formats(unix_timestamp, time_zone="Europe/Berlin") == expected_output

# Test with missing arguments
with pytest.raises(TypeError):
get_date_formats() # noqa

# Test with invalid timezone
with pytest.raises(LookupError):
get_date_formats(0, time_zone="Invalid/Timezone")

# Test with more recent date
expected_output = {
'date': 'October 15, 2023',
'datetime': 'October 15, 2023 13:32:04',
'iso_date': '2023-10-15',
'iso_datetime': '2023-10-15 13:32:04',
'timeago': '<span class="timeago" datetime="2023-10-15T13:32:04+02:00" locale="en"></span>',
'custom': '15. October 2023'
}
assert get_date_formats(1697369524, time_zone="Europe/Amsterdam") == expected_output


assert get_date_formats(1582397529) == {
"date": "February 22, 2020",
"datetime": "February 22, 2020 18:52:09",
"iso_date": "2020-02-22",
"iso_datetime": "2020-02-22 18:52:09",
"timeago": '<span class="timeago" datetime="2020-02-22T18:52:09+00:00" locale="en"></span>',
"custom": '22. February 2020',
}
Loading