Skip to content

datetime, date and time: strftime method takes different keyword argument: fmt (pure) or format (C) #85432

Description

@asottile
mannequin
BPO 41260
Nosy @srittau, @abalkin, @asottile, @pganssle, @ZackerySpytz, @AlexWaygood
PRs
  • bpo-41260: C impl of datetime.date.strftime() takes different keyword arg #21712
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2020-07-09.17:01:48.789>
    labels = ['type-bug', '3.9', '3.10', '3.11', 'extension-modules', 'library']
    title = 'datetime, date and time: strftime method takes different keyword argument: fmt (pure) or format (C)'
    updated_at = <Date 2021-11-16.19:27:41.778>
    user = 'https://github.com/asottile'

    bugs.python.org fields:

    activity = <Date 2021-11-16.19:27:41.778>
    actor = 'AlexWaygood'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Extension Modules', 'Library (Lib)']
    creation = <Date 2020-07-09.17:01:48.789>
    creator = 'Anthony Sottile'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 41260
    keywords = ['patch']
    message_count = 6.0
    messages = ['373407', '373421', '373424', '406418', '406421', '406424']
    nosy_count = 6.0
    nosy_names = ['srittau', 'belopolsky', 'Anthony Sottile', 'p-ganssle', 'ZackerySpytz', 'AlexWaygood']
    pr_nums = ['21712']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue41260'
    versions = ['Python 3.9', 'Python 3.10', 'Python 3.11']

    Linked PRs

    Activity

    1. asottile commented on Jul 9, 2020

      asottilemannequin
      MannequinAuthor

      C:

      static char *keywords[] = {"format", NULL};

      pure python:

      def strftime(self, fmt):

      this makes it difficult to properly type in mypy:

      https://github.com/python/typeshed/blob/209b6bb127f61fe173a60776e23883ac450cf1c8/stdlib/2and3/datetime.pyi#L55

      and calling with .strftime(fmt=...) or .strftime(format=...) is inconsistent

      (that said, it should _probably_ be a positional-only argument)

    2. added
      stdlibStandard Library Python modules in the Lib/ directory
      type-bugAn unexpected behavior, bug, or error
      on Jul 9, 2020
    3. pganssle commented on Jul 9, 2020

      @pganssle
      Member

      I think a positional-only argument would be the best option if we could do it, but it would be a backwards-incompatible change and it's probably not worth the hassle.

      If anyone is using the keyword argument, they're probably using format= rather than fmt=, since it's pretty rare for anyone to use the pure python version of datetime. PyPy uses it, but I think they tend to aim for consistency with the C API of CPython, and it seems like they already patch s/fmt/format/ themselves: https://foss.heptapod.net/pypy/pypy/-/blob/branch/default/lib_pypy/datetime.py#L781

      If anyone wants to make a PR I think we can fix this for 3.10, though unfortunately because it is an API change it can't be backported. I think in typeshed they can safely change from fmt to format even today (which would almost certainly be more accurate to end user use cases).

    4. asottile commented on Jul 9, 2020

      asottilemannequin
      MannequinAuthor

      awesome, I'm going to work through this with someone in my discord as a demo / mentorship opportunity -- hope that's ok!

    5. pganssle commented on Nov 16, 2021

      @pganssle
      Member

      Updating this issue to cover the problem in date, time and datetime.

    6. changed the title [-]datetime: strftime method takes different keyword argument: fmt (pure) or format (C)[/-] [+]datetime, date and time: strftime method takes different keyword argument: fmt (pure) or format (C)[/+] on Nov 16, 2021
    7. changed the title [-]datetime: strftime method takes different keyword argument: fmt (pure) or format (C)[/-] [+]datetime, date and time: strftime method takes different keyword argument: fmt (pure) or format (C)[/+] on Nov 16, 2021
    8. srittau commented on Nov 16, 2021

      srittaumannequin
      Mannequin

      Ref python/typeshed#6317 for a discussion about this in typeshed.

    9. AlexWaygood commented on Nov 16, 2021

      @AlexWaygood
      Member

      In addition to date.strftime and time.strftime, there is also a discrepancy in datetime.fromtimestamp. In the C implementation, the first parameter is called "timestamp"; in the pure-Python implementation, the first parameter is called "t".

    10. transferred this issue fromon Apr 10, 2022
    11. added 2 commits that reference this issue on Dec 4, 2022
    12. added a commit that references this issue on Dec 22, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.10 (EOL)end of life3.11only security fixes3.9 (EOL)end of lifeextension-modulesC modules in the Modules dirstdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

      Projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions