Home

Awesome

flake8-datetime-import

<!-- markdownlint-disable MD013 -->

PyPI version PyPI - Python Version PyPI - Wheel codecov pre-commit.ci status

<!-- markdownlint-enable -->

flake8-datetime-import is an opinionated plugin which aims to reduce confusing or inconsistent usage of Python's datetime module. It checks that datetime and time are imported as modules and aliased like:

import datetime as dt
import time as tm

Installation

pip install flake8-datetime-import

flake8 codes

<!-- markdownlint-disable MD013 -->
CodeDescription
DTI100from datetime import ... is not allowed. datetime must be imported as a module.
DTI101datetime imported without aliasing as dt. Expected import datetime as dt.
DTI200from time import ... is not allowed. time must be imported as a module.
DTI201time imported without aliasing as tm. Expected import time as tm.
<!-- markdownlint-enable -->

Rationale

datetime and time are confusing when encountered in code. Are they modules? Are they classes or functions?

# Bad
import datetime
from datetime import datetime, time, timezone

import time
from time import time, timezone

Consistently importing and aliasing the datetime and time modules helps prevent this ambiguity.

# Good
import datetime as dt
import time as tm

dt.datetime.now()
tm.time()

Importing and namespacing datetime prevents other naming collisions, such as Django's django.utils.timezone:

import datetime as dt

from django.utils import timezone

dt.timezone.utc
timezone.now()

This plugin was inspired by:

Other notable mentions of this importing strategy:

<!-- markdownlint-disable MD013 --> <!-- markdownlint-enable -->

pre-commit

To use with pre-commit, add flake8-datetime-import as an additional dependency to flake8.

# .pre-commit-config.yml

-   repo: https://github.com/pycqa/flake8
    rev: 5.0.4
    hooks:
    -   id: flake8
        additional_dependencies: [
          flake8-datetime-import==0.1.0,
        ]