Skip to content

Commit

Permalink
Add pyupgrade hook (#759)
Browse files Browse the repository at this point in the history
* update hooks and add pyupgrade

* updates by pyupgrade

* remove unused typing imports

* add `from __future__ import annotations` across the codebase

* add `from __future__ import annotations` in examples
  • Loading branch information
johnnv1 committed Jun 16, 2022
1 parent 25c7db2 commit 662df64
Show file tree
Hide file tree
Showing 267 changed files with 625 additions and 104 deletions.
10 changes: 8 additions & 2 deletions .pre-commit-config.yaml
Expand Up @@ -3,7 +3,7 @@ default_language_version:
python: python3
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.2.0
rev: v4.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
Expand All @@ -16,6 +16,12 @@ repos:
rev: v3.1.0
hooks:
- id: reorder-python-imports
args: [--py37-plus, --add-import, 'from __future__ import annotations']
- repo: https://github.com/asottile/pyupgrade
rev: v2.34.0
hooks:
- id: pyupgrade
args: [--py38-plus]
- repo: https://github.com/ambv/black
rev: 22.3.0
hooks:
Expand All @@ -26,7 +32,7 @@ repos:
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.960
rev: v0.961
hooks:
- id: mypy
files: ^dynaconf/
2 changes: 2 additions & 0 deletions dynaconf/__init__.py
@@ -1,3 +1,5 @@
from __future__ import annotations

from dynaconf.base import LazySettings # noqa
from dynaconf.constants import DEFAULT_SETTINGS_FILES
from dynaconf.contrib import DjangoDynaconf # noqa
Expand Down
12 changes: 7 additions & 5 deletions dynaconf/base.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import copy
import glob
import importlib
Expand Down Expand Up @@ -66,7 +68,7 @@ def __init__(self, wrapped=None, **kwargs):
self.__resolve_config_aliases(kwargs)
compat_kwargs(kwargs)
self._kwargs = kwargs
super(LazySettings, self).__init__()
super().__init__()

if wrapped:
if self._django_override:
Expand Down Expand Up @@ -267,15 +269,15 @@ def __setattr__(self, name, value):
"""Allow `settings.FOO = 'value'` while keeping internal attrs."""

if name in RESERVED_ATTRS:
super(Settings, self).__setattr__(name, value)
super().__setattr__(name, value)
else:
self.set(name, value)

def __delattr__(self, name):
"""stores reference in `_deleted` for proper error management"""
self._deleted.add(name)
if hasattr(self, name):
super(Settings, self).__delattr__(name)
super().__delattr__(name)

def __contains__(self, item):
"""Respond to `item in settings`"""
Expand Down Expand Up @@ -902,7 +904,7 @@ def set(

self.store[key] = value
self._deleted.discard(key)
super(Settings, self).__setattr__(key, value)
super().__setattr__(key, value)

# set loader identifiers so cleaners know which keys to clean
if loader_identifier and loader_identifier in self.loaded_by_loaders:
Expand Down Expand Up @@ -1215,7 +1217,7 @@ def dynaconf(self):
internal methods and attrs.
"""

class AttrProxy(object):
class AttrProxy:
def __init__(self, obj):
self.obj = obj

Expand Down
9 changes: 5 additions & 4 deletions dynaconf/cli.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import importlib
import io
import os
Expand Down Expand Up @@ -366,15 +368,14 @@ def init(ctx, fileformat, path, env, _vars, _secrets, wg, y, django):
ignore_line = ".secrets.*"
comment = "\n# Ignore dynaconf secret files\n"
if not gitignore_path.exists():
with io.open(str(gitignore_path), "w", encoding=ENC) as f:
with open(str(gitignore_path), "w", encoding=ENC) as f:
f.writelines([comment, ignore_line, "\n"])
else:
existing = (
ignore_line
in io.open(str(gitignore_path), encoding=ENC).read()
ignore_line in open(str(gitignore_path), encoding=ENC).read()
)
if not existing: # pragma: no cover
with io.open(str(gitignore_path), "a+", encoding=ENC) as f:
with open(str(gitignore_path), "a+", encoding=ENC) as f:
f.writelines([comment, ignore_line, "\n"])

click.echo(
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/constants.py
@@ -1,4 +1,6 @@
# pragma: no cover
from __future__ import annotations

INI_EXTENSIONS = (".ini", ".conf", ".properties")
TOML_EXTENSIONS = (".toml", ".tml")
YAML_EXTENSIONS = (".yaml", ".yml")
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/contrib/__init__.py
@@ -1,3 +1,5 @@
from __future__ import annotations

from dynaconf.contrib.django_dynaconf_v2 import DjangoDynaconf # noqa
from dynaconf.contrib.flask_dynaconf import DynaconfConfig # noqa
from dynaconf.contrib.flask_dynaconf import FlaskDynaconf # noqa
2 changes: 2 additions & 0 deletions dynaconf/contrib/django_dynaconf_v2.py
Expand Up @@ -20,6 +20,8 @@
DJANGO_ALLOWED_HOSTS='["localhost"]' \
python manage.py runserver
"""
from __future__ import annotations

import inspect
import os
import sys
Expand Down
4 changes: 3 additions & 1 deletion dynaconf/contrib/flask_dynaconf.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import warnings
from collections import ChainMap
from contextlib import suppress
Expand Down Expand Up @@ -142,7 +144,7 @@ class DynaconfConfig(Config):

def __init__(self, _settings, _app, *args, **kwargs):
"""perform the initial load"""
super(DynaconfConfig, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)

# Bring Dynaconf instance value to Flask Config
Config.update(self, _settings.store)
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/default_settings.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import importlib
import os
import sys
Expand Down
4 changes: 3 additions & 1 deletion dynaconf/loaders/__init__.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import importlib
import os

Expand Down Expand Up @@ -266,7 +268,7 @@ def write(filename, data, env=None):
loader_name = f"{filename.rpartition('.')[-1]}_loader"
loader = globals().get(loader_name)
if not loader:
raise IOError(f"{loader_name} cannot be found.")
raise OSError(f"{loader_name} cannot be found.")

data = DynaBox(data, box_settings={}).to_dict()
if loader is not py_loader and env and env not in data:
Expand Down
6 changes: 4 additions & 2 deletions dynaconf/loaders/base.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import io
import warnings

Expand Down Expand Up @@ -75,7 +77,7 @@ def get_source_data(self, files):
for source_file in files:
if source_file.endswith(self.extensions):
try:
with io.open(
with open(
source_file,
encoding=self.obj.get(
"ENCODING_FOR_DYNACONF", "utf-8"
Expand All @@ -85,7 +87,7 @@ def get_source_data(self, files):
self.obj._loaded_files.append(source_file)
if content:
data[source_file] = content
except IOError as e:
except OSError as e:
if ".local." not in source_file:
warnings.warn(
f"{self.identifier}_loader: {source_file} "
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/loaders/env_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

from os import environ

from dynaconf.utils import missing
Expand Down
4 changes: 3 additions & 1 deletion dynaconf/loaders/ini_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import io
from pathlib import Path

Expand Down Expand Up @@ -51,7 +53,7 @@ def write(settings_path, settings_data, merge=True):
"""
settings_path = Path(settings_path)
if settings_path.exists() and merge: # pragma: no cover
with io.open(
with open(
str(settings_path), encoding=default_settings.ENCODING_FOR_DYNACONF
) as open_file:
object_merge(ConfigObj(open_file).dict(), settings_data)
Expand Down
6 changes: 4 additions & 2 deletions dynaconf/loaders/json_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import io
import json
from pathlib import Path
Expand Down Expand Up @@ -58,12 +60,12 @@ def write(settings_path, settings_data, merge=True):
"""
settings_path = Path(settings_path)
if settings_path.exists() and merge: # pragma: no cover
with io.open(
with open(
str(settings_path), encoding=default_settings.ENCODING_FOR_DYNACONF
) as open_file:
object_merge(json.load(open_file), settings_data)

with io.open(
with open(
str(settings_path),
"w",
encoding=default_settings.ENCODING_FOR_DYNACONF,
Expand Down
8 changes: 5 additions & 3 deletions dynaconf/loaders/py_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import errno
import importlib
import inspect
Expand Down Expand Up @@ -108,12 +110,12 @@ def import_from_filename(obj, filename, silent=False): # pragma: no cover
mod._is_error = False
mod._error = None
try:
with io.open(
with open(
_find_file(filename),
encoding=default_settings.ENCODING_FOR_DYNACONF,
) as config_file:
exec(compile(config_file.read(), filename, "exec"), mod.__dict__)
except IOError as e:
except OSError as e:
e.strerror = (
f"py_loader: error loading file " f"({e.strerror} {filename})\n"
)
Expand All @@ -136,7 +138,7 @@ def write(settings_path, settings_data, merge=True):
existing = DynaconfDict()
load(existing, str(settings_path))
object_merge(existing, settings_data)
with io.open(
with open(
str(settings_path),
"w",
encoding=default_settings.ENCODING_FOR_DYNACONF,
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/loaders/redis_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

from dynaconf.utils import build_env_list
from dynaconf.utils import upperfy
from dynaconf.utils.parse_conf import parse_conf_data
Expand Down
6 changes: 4 additions & 2 deletions dynaconf/loaders/toml_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import io
from pathlib import Path

Expand Down Expand Up @@ -44,12 +46,12 @@ def write(settings_path, settings_data, merge=True):
"""
settings_path = Path(settings_path)
if settings_path.exists() and merge: # pragma: no cover
with io.open(
with open(
str(settings_path), encoding=default_settings.ENCODING_FOR_DYNACONF
) as open_file:
object_merge(toml.load(open_file), settings_data)

with io.open(
with open(
str(settings_path),
"w",
encoding=default_settings.ENCODING_FOR_DYNACONF,
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/loaders/vault_loader.py
@@ -1,5 +1,7 @@
# docker run -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' -p 8200:8200 vault
# pip install hvac
from __future__ import annotations

from dynaconf.utils import build_env_list
from dynaconf.utils.parse_conf import parse_conf_data

Expand Down
6 changes: 4 additions & 2 deletions dynaconf/loaders/yaml_loader.py
@@ -1,3 +1,5 @@
from __future__ import annotations

import io
from pathlib import Path
from warnings import warn
Expand Down Expand Up @@ -65,12 +67,12 @@ def write(settings_path, settings_data, merge=True):
"""
settings_path = Path(settings_path)
if settings_path.exists() and merge: # pragma: no cover
with io.open(
with open(
str(settings_path), encoding=default_settings.ENCODING_FOR_DYNACONF
) as open_file:
object_merge(yaml.safe_load(open_file), settings_data)

with io.open(
with open(
str(settings_path),
"w",
encoding=default_settings.ENCODING_FOR_DYNACONF,
Expand Down
4 changes: 3 additions & 1 deletion dynaconf/strategies/filtering.py
@@ -1,11 +1,13 @@
from __future__ import annotations

from dynaconf.utils import upperfy


class PrefixFilter:
def __init__(self, prefix):
if not isinstance(prefix, str):
raise TypeError("`SETTINGS_FILE_PREFIX` must be str")
self.prefix = "{}_".format(upperfy(prefix))
self.prefix = f"{upperfy(prefix)}_"

def __call__(self, data):
"""Filter incoming data by prefix"""
Expand Down
2 changes: 2 additions & 0 deletions dynaconf/test_settings.py
@@ -1,4 +1,6 @@
# pragma: no cover
from __future__ import annotations

TESTING = True
LOADERS_FOR_DYNACONF = [
"dynaconf.loaders.env_loader",
Expand Down

0 comments on commit 662df64

Please sign in to comment.