https://github.com/asottile/pyupgrade
> A tool to automatically upgrade syntax for newer versions of the
> language.
- Drop u str prefix
- Drop base object inheritance
- Drop args to super()
- Use set literals
- Use dict comprehension
- Use set comprehension
https://github.com/asottile/pyupgrade
> A tool to automatically upgrade syntax for newer versions of the
> language.
- Drop u str prefix
- Drop base object inheritance
- Drop args to super()
- Use set literals
- Use dict comprehension
- Use set comprehension
The fallback 'import Image' was added in commit
99621d7a01 for the PIL package. However,
the PIL package is no longer maintained and does not support Python 3.
Development has moved to the Pillow package which always installs to the
PIL namespace.
Pillow repo: https://github.com/python-pillow/Pillow
Old PIL website: http://www.pythonware.com/products/pil/
Both `self.srcdir` and `rel_fn` are defined as type str. Calling
os.path.join() on two str values will always return a str value without
the need to decode it. Therefore, the except block is never executed.
The attributes were used only for the string representation, but that is
also the default behavior of the Exception class. Observe:
>>> str(Exception('foo'))
'foo'
>>> print(Exception('foo'))
foo
In Python 3, the default encoding of source files is utf-8. The encoding
cookie is now unnecessary and redundant so remove it. For more details,
see the docs:
https://docs.python.org/3/howto/unicode.html#the-string-type
> The default encoding for Python source code is UTF-8, so you can
> simply include a Unicode character in a string literal ...
Includes a fix for the flake8 header checks to stop expecting an
encoding cookie.
With only a single text type across supported Python versions, the
string_classes is no longer necessary.
Internally, all uses were converted to the value `[str]`. For
.add_config_value() uses that also supply a default string, the type is
inferred.
When an object is passed to a string format placeholder '%s', Python
will implicitly call str() on the object. This applies to print() and
logging as well.
The error is more specific and self documenting.
This removes the last use of sphinx.util.osutil.ENOENT, so it is now
deprecated for removal. sphinx.util.osutil.EEXIST was already unused so
that is deprecated as well.
The open() function opens files in read-only text mode by default. Drop
the mode argument to be slightly simpler and more idiomatic.
https://docs.python.org/3/library/functions.html#open
> The default mode is 'r' (open for reading text, synonym of 'rt').
The warning in the comment:
> replace function from UserString; it instantiates a self.__class__ for
> the encoding result
Doesn't apply to these methods as they return non text types. Mostly
bool. By removing these methods, there is less to maintain, annotate,
etc.
- Simplify ensuredir() to equivalent os.makedir(name, exist_ok=True)
- Do not check if a directory exists before calling
ensuredir() (ensuredir() already handles it)
- Add exist_ok argument to path.makedirs() to follow same pattern
- Drop unnecessary .exists() check immediately before .isdir()
- Add tests for ensuredir
- Reuse jsload() in all tests to reduce duplication.
- Fix -2 index to -1, to include the entire JSON string. Was previously
chopping off the final '}'.
- Assert the serialized string ends with a closing parenthesis
Code should not arbitrarily mix bytes & str values. The values should be
understood and deliberate. When Python is run with the -b option, this
change fixes warnings of the form:
BytesWarning: str() on a bytes instance
In the Python 3 only code base, this function is no longer necessary.
The type of values is well understood and deliberate. Code should avoid
arbitrary mixing of bytes & str.
By removing force_decode() calls from docstring values, can deprecate
the now unused 'encoding' arguments to various autodoc methods.
https://tox.readthedocs.io/en/latest/config.html#conf-extras
> extras(MULTI-LINE-LIST)
>
> New in version 2.4.
>
> A list of “extras” to be installed with the sdist or develop install.
> For example, extras = testing is equivalent to [testing] in a pip
> install command.
easy_install is deprecated and its use is discouraged by PyPA:
https://setuptools.readthedocs.io/en/latest/easy_install.html
> Warning: Easy Install is deprecated. Do not use it. Instead use pip.
Follow upstream advice and only recommended supported tools.
In Python3, the functions io.open() is an alias of the builtin open()
and codecs.open() is functionally equivalent. To reduce indirection,
number of imports, and number of patterns, always prefer the builtin.
https://docs.python.org/3/library/io.html#high-level-module-interface
> io.open()
>
> This is an alias for the builtin open() function.
In Python 3, the attribute BaseException.message doesn't exist.
$ python3
>>> from sphinx.errors import ExtensionError
>>> e = ExtensionError('foo')
>>> repr(e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sphinx/sphinx/errors.py", line 65, in __repr__
return '%s(%r)' % (self.__class__.__name__, self.message)
AttributeError: 'ExtensionError' object has no attribute 'message'
os.getcwdu() is Python 2 only. It was removed from Python 3. As Sphinx
is now Python 3 only, can remove the workaround.
$ python2 -c 'import os; print(os.getcwdu)'
<built-in function getcwdu>
$ python3 -c 'import os; print(os.getcwdu)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: module 'os' has no attribute 'getcwdu'
sphinx.util.osutil.getcwd() is now deprecated for removal.
Read the Docs moved hosting to readthedocs.io instead of
readthedocs.org. Fix all links in the project.
For additional details, see:
https://blog.readthedocs.com/securing-subdomains/
> Starting today, Read the Docs will start hosting projects from subdomains on
> the domain readthedocs.io, instead of on readthedocs.org. This change
> addresses some security concerns around site cookies while hosting user
> generated data on the same domain as our dashboard.