1. 11 Sep, 2019 14 commits
    • Ezio Melotti's avatar
      2d8d597b
    • Benjamin Peterson's avatar
      bpo-35066: Make trailing percent test more portable. (GH-15907) · f2173ae3
      Benjamin Peterson authored
      Different libc implementations have different behavior when presented with trailing % in strftime strings. To make test_strftime_trailing_percent more portable, compare the output of datetime.strftime directly to that of time.strftime rather than hardcoding.
      f2173ae3
    • Gregory P. Smith's avatar
    • smokephil's avatar
    • Ben Lewis's avatar
      bpo-37409: fix relative import with no parent (#14956) · 92420b3e
      Ben Lewis authored
      Relative imports use resolve_name to get the absolute target name,
      which first seeks the current module's absolute package name from the globals:
      If __package__ (and __spec__.parent) are missing then
      import uses __name__, truncating the last segment if
      the module is a submodule rather than a package __init__.py
      (which it guesses from whether __path__ is defined).
      
      The __name__ attempt should fail if there is no parent package (top level modules),
      if __name__ is '__main__' (-m entry points), or both (scripts).
      That is, if both __name__ has no subcomponents and the module does not seem
      to be a package __init__ module then import should fail.
      92420b3e
    • Kyle Stanley's avatar
    • Anjali's avatar
    • Steve Dower's avatar
      92521fea
    • Greg Price's avatar
      bpo-37936: Systematically distinguish rooted vs. unrooted in .gitignore (GH-15823) · 455122a0
      Greg Price authored
      A root cause of bpo-37936 is that it's easy to write a .gitignore
      rule that's intended to apply to a specific file (e.g., the
      `pyconfig.h` generated by `./configure`) but actually applies to all
      similarly-named files in the tree (e.g., `PC/pyconfig.h`.)
      
      Specifically, any rule with no non-trailing slashes is applied in an
      "unrooted" way, to files anywhere in the tree.  This means that if we
      write the rules in the most obvious-looking way, then
      
       * for specific files we want to ignore that happen to be in
         subdirectories (like `Modules/config.c`), the rule will work
         as intended, staying "rooted" to the top of the tree; but
      
       * when a specific file we want to ignore happens to be at the root of
         the repo (like `platform`), then the obvious rule (`platform`) will
         apply much more broadly than intended: if someone tries to add a
         file or directory named `platform` somewhere else in the tree, it
         will unexpectedly get ignored.
      
      That's surprising behavior that can make the .gitignore file's
      behavior feel finicky and unpredictable.
      
      To avoid it, we can simply always give a rule "rooted" behavior when
      that's what's intended, by systematically using leading slashes.
      
      Further, to help make the pattern obvious when looking at the file and
      minimize any need for thinking about the syntax when adding new rules:
      separate the rules into one group for each type, with brief comments
      identifying them.
      
      For most of these rules it's clear whether they're meant to be rooted
      or unrooted, but in a handful of cases I've only guessed.  In that
      case the safer default (the choice that won't hide information) is the
      narrower, rooted meaning, with a leading slash.  If for some of these
      the unrooted meaning is desired after all, it'll be easy to move them
      to the unrooted section at the top.
      455122a0
    • Gregory P. Smith's avatar
      bpo-37424: Avoid a hang in subprocess.run timeout output capture (GH-14490) · 580d2782
      Gregory P. Smith authored
      Fixes a possible hang when using a timeout on subprocess.run() while
      capturing output. If the child process spawned its own children or otherwise
      connected its stdout or stderr handles with another process, we could hang
      after the timeout was reached and our child was killed when attempting to read
      final output from the pipes.
      580d2782
    • Brad's avatar
      Overhaul datetime documentation (GH-13410) · 3fb1363f
      Brad authored
      This is a restructuring of the datetime documentation to hopefully make
      them more user-friendly and approachable to new users without losing any
      of the detail.
      
      Changes include:
       - Creating dedicated subsections for some concepts such as:
          - "Constants"
          - "Naive vs Aware"
          - "Determining if an Object is Aware"
       - Give 'naive vs aware' its own subsection
       - Give 'constants' their own subsection
       - Overhauling the strftime-strptime section by:
          - Breaking it into logical, linkable, and digestable parts
          - Adding a high-level comparison table
          - Moving the technical detail to bottom: readers come to this
            section primarily to remind themselves to things:
            - How do I write the format code for X?
            - strptime/strftime: which one is which again?
       - Touching up fromisoformat + isoformat sections by:
          - Revising fromisoformat + isoformat for date, time, and
            datetime
          - Adding basic examples
          - Enforcing consistency about putting formats (i.e. ``HH:MM``)
            in double backticks.  This was previously done in some places
            but not all
          - Putting long 'supported formats', on their own line to improve
            readability
       - Moving the 'seealso' section to the top and add a link to dateutil
          Rationale: This doesn't really belong nested under the
          'constants' section.  Let readers know right away that
          datetime is one of several related tools.
       - Moving common features of several types into one place:
          Previously, each type went out of its way to note separately
          that it was hashable and picklable.  These can be brought
          into one single place that is more prominent.
       - Reducing some verbose explanations to improve readability
       - Breaking up long paragraphs into digestable chunks
       - Displaying longer "equivalent to" examples, as short code blocks
       - Using the dot notation for datetime/time classes:
          Use :class:`.time` and :class:`.datetime` rather than :class:`time` and
          :class:`datetime`; otherwise, the generated links will route to the
          respective modules, not classes.
       - Rewording the tzinfo class description
          The top paragraph should get straight to the point of telling the reader
          what subclasses of tzinfo _do_.  Previously, that was hidden in a later
          paragraph.
       - Adding a note on .today() versus .now()
       - Rearranging and expanding example blocks, including:
          - Moved long, multiline inline examples to standalone examples
          - Simplified the example block for timedelta arithmetic:
              - Broke the example into two logical sections:
                1. normalization/parameter 'merging'
                2. timedelta arithmetic
              - Reduced the complexity of the some of the examples.  Show
                reasonable, real-world uses cases that are easy to follow
                along with and progres in difficult slightly.
          - Broke up the example sections for date and datetime sections by putting
            the easy examples first, progressing to more esoteric situations and
            breaking it up into logical sections based on what the methods are
            doing at a high level.
          - Simplified the KabulTz example:
              - Put the class definition itself into a non-REPL block since there is
                no interactive output involved there
              - Briefly explained what's happening before launching into the code
              - Broke the example section into visually separate chunks
       - Various whitespace, formatting, style and grammar fixes including:
          - Consistently using backctics for 'date_string' formats
          - Consistently using one space after periods.
          - Consistently using bold for vocab terms
          - Consistently using italics when referring to params:
            See https://devguide.python.org/documenting/#id4
          - Using '::' to lead into code blocks
              Per https://devguide.python.org/documenting/#source-code, this will
              let the reader use the 'expand/collapse' top-right button for REPL
              blocks to hide or show the prompt.
          - Using consistent captialization schemes
          - Removing use of the default role
          - Put 'example' blocks in Markdown subsections
      
      This is a combination of 66 commits.
      
      See bpo-36960: https://bugs.python.org/issue36960
      3fb1363f
    • Eddie Elizondo's avatar
      bpo-37879: Suppress subtype_dealloc decref when base type is a C heap type (GH-15323) · ff023ed3
      Eddie Elizondo authored
      The instance destructor for a type is responsible for preparing
      an instance for deallocation by decrementing the reference counts
      of its referents.
      
      If an instance belongs to a heap type, the type object of an instance
      has its reference count decremented while for static types, which
      are permanently allocated, the type object is unaffected by the
      instance destructor.
      
      Previously, the default instance destructor searched the class
      hierarchy for an inherited instance destructor and, if present,
      would invoke it.
      
      Then, if the instance type is a heap type, it would decrement the
      reference count of that heap type.  However, this could result in the
      premature destruction of a type because the inherited instance
      destructor should have already decremented the reference count
      of the type object.
      
      This change avoids the premature destruction of the type object
      by suppressing the decrement of its reference count when an
      inherited, non-default instance destructor has been invoked.
      
      Finally, an assertion on the Py_SIZE of a type was deleted.  Heap
      types have a non zero size, making this into an incorrect assertion.
      
      https://github.com/python/cpython/pull/15323
      ff023ed3
    • Andrew Svetlov's avatar
    • wwuck's avatar
      efd5741a
  2. 10 Sep, 2019 26 commits