summaryrefslogtreecommitdiff
path: root/src/virtualenv/app_data
diff options
context:
space:
mode:
authorBernát Gábor <gaborjbernat@gmail.com>2022-07-25 00:33:42 -0700
committerGitHub <noreply@github.com>2022-07-25 00:33:42 -0700
commitb85542c31ca8afcff317e618da434f59fa06d122 (patch)
tree450066fe494d366c03da70b0de10899d5738d425 /src/virtualenv/app_data
parent3c57468470c292b235a67b27cec9468cc913f268 (diff)
downloadvirtualenv-b85542c31ca8afcff317e618da434f59fa06d122.tar.gz
Drop support of running under Python 2.7 (#2382)
Diffstat (limited to 'src/virtualenv/app_data')
-rw-r--r--src/virtualenv/app_data/__init__.py7
-rw-r--r--src/virtualenv/app_data/base.py15
-rw-r--r--src/virtualenv/app_data/na.py16
-rw-r--r--src/virtualenv/app_data/read_only.py13
-rw-r--r--src/virtualenv/app_data/via_disk_folder.py37
-rw-r--r--src/virtualenv/app_data/via_tempdir.py9
6 files changed, 54 insertions, 43 deletions
diff --git a/src/virtualenv/app_data/__init__.py b/src/virtualenv/app_data/__init__.py
index e56e63d..262ac07 100644
--- a/src/virtualenv/app_data/__init__.py
+++ b/src/virtualenv/app_data/__init__.py
@@ -1,7 +1,6 @@
"""
Application data stored by virtualenv.
"""
-from __future__ import absolute_import, unicode_literals
import logging
import os
@@ -15,7 +14,7 @@ from .via_tempdir import TempAppData
def _default_app_data_dir(env):
- key = str("VIRTUALENV_OVERRIDE_APP_DATA")
+ key = "VIRTUALENV_OVERRIDE_APP_DATA"
if key in env:
return env[key]
else:
@@ -23,7 +22,7 @@ def _default_app_data_dir(env):
def make_app_data(folder, **kwargs):
- read_only = kwargs.pop("read_only")
+ is_read_only = kwargs.pop("read_only")
env = kwargs.pop("env")
if kwargs: # py3+ kwonly
raise TypeError("unexpected keywords: {}")
@@ -32,7 +31,7 @@ def make_app_data(folder, **kwargs):
folder = _default_app_data_dir(env)
folder = os.path.abspath(folder)
- if read_only:
+ if is_read_only:
return ReadOnlyAppData(folder)
if not os.path.isdir(folder):
diff --git a/src/virtualenv/app_data/base.py b/src/virtualenv/app_data/base.py
index 4ea54d9..bc28b23 100644
--- a/src/virtualenv/app_data/base.py
+++ b/src/virtualenv/app_data/base.py
@@ -1,18 +1,14 @@
"""
Application data stored by virtualenv.
"""
-from __future__ import absolute_import, unicode_literals
from abc import ABCMeta, abstractmethod
from contextlib import contextmanager
-import six
-
from virtualenv.info import IS_ZIPAPP
-@six.add_metaclass(ABCMeta)
-class AppData(object):
+class AppData(metaclass=ABCMeta):
"""Abstract storage interface for the virtualenv application"""
@abstractmethod
@@ -71,8 +67,7 @@ class AppData(object):
raise NotImplementedError
-@six.add_metaclass(ABCMeta)
-class ContentStore(object):
+class ContentStore(metaclass=ABCMeta):
@abstractmethod
def exists(self):
raise NotImplementedError
@@ -93,3 +88,9 @@ class ContentStore(object):
@contextmanager
def locked(self):
pass
+
+
+__all__ = [
+ "ContentStore",
+ "AppData",
+]
diff --git a/src/virtualenv/app_data/na.py b/src/virtualenv/app_data/na.py
index d589787..da45f58 100644
--- a/src/virtualenv/app_data/na.py
+++ b/src/virtualenv/app_data/na.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, unicode_literals
-
from contextlib import contextmanager
from .base import AppData, ContentStore
@@ -44,7 +42,7 @@ class AppDataDisabled(AppData):
raise self.error
def py_info_clear(self):
- """ """
+ """nothing to clear"""
class ContentStoreNA(ContentStore):
@@ -52,15 +50,21 @@ class ContentStoreNA(ContentStore):
return False
def read(self):
- """ """
+ """nothing to read"""
return None
def write(self, content):
- """ """
+ """nothing to write"""
def remove(self):
- """ """
+ """nothing to remove"""
@contextmanager
def locked(self):
yield
+
+
+__all__ = [
+ "AppDataDisabled",
+ "ContentStoreNA",
+]
diff --git a/src/virtualenv/app_data/read_only.py b/src/virtualenv/app_data/read_only.py
index 858978c..2663731 100644
--- a/src/virtualenv/app_data/read_only.py
+++ b/src/virtualenv/app_data/read_only.py
@@ -8,15 +8,16 @@ from .via_disk_folder import AppDataDiskFolder, PyInfoStoreDisk
class ReadOnlyAppData(AppDataDiskFolder):
can_update = False
- def __init__(self, folder): # type: (str) -> None
+ def __init__(self, folder: str) -> None:
if not os.path.isdir(folder):
- raise RuntimeError("read-only app data directory {} does not exist".format(folder))
+ raise RuntimeError(f"read-only app data directory {folder} does not exist")
+ super().__init__(folder)
self.lock = NoOpFileLock(folder)
- def reset(self): # type: () -> None
+ def reset(self) -> None:
raise RuntimeError("read-only app data does not support reset")
- def py_info_clear(self): # type: () -> None
+ def py_info_clear(self) -> None:
raise NotImplementedError
def py_info(self, path):
@@ -31,4 +32,6 @@ class _PyInfoStoreDiskReadOnly(PyInfoStoreDisk):
raise RuntimeError("read-only app data python info cannot be updated")
-__all__ = ("ReadOnlyAppData",)
+__all__ = [
+ "ReadOnlyAppData",
+]
diff --git a/src/virtualenv/app_data/via_disk_folder.py b/src/virtualenv/app_data/via_disk_folder.py
index 3f6afd5..94c4def 100644
--- a/src/virtualenv/app_data/via_disk_folder.py
+++ b/src/virtualenv/app_data/via_disk_folder.py
@@ -1,12 +1,11 @@
-# -*- coding: utf-8 -*-
"""
A rough layout of the current storage goes as:
virtualenv-app-data
├── py - <version> <cache information about python interpreters>
-│   └── *.json/lock
+│ └── *.json/lock
├── wheel <cache wheels used for seeding>
-│   ├── house
+│ ├── house
│ │ └── *.whl <wheels downloaded go here>
│ └── <python major.minor> -> 3.9
│ ├── img-<version>
@@ -22,7 +21,6 @@ virtualenv-app-data
├── debug.py
└── _virtualenv.py
"""
-from __future__ import absolute_import, unicode_literals
import json
import logging
@@ -30,11 +28,8 @@ from abc import ABCMeta
from contextlib import contextmanager
from hashlib import sha256
-import six
-
from virtualenv.util.lock import ReentrantFileLock
from virtualenv.util.path import safe_delete
-from virtualenv.util.six import ensure_text
from virtualenv.util.zipapp import extract
from virtualenv.version import __version__
@@ -53,7 +48,7 @@ class AppDataDiskFolder(AppData):
self.lock = ReentrantFileLock(folder)
def __repr__(self):
- return "{}({})".format(type(self).__name__, self.lock.path)
+ return f"{type(self).__name__}({self.lock.path})"
def __str__(self):
return str(self.lock.path)
@@ -113,8 +108,7 @@ class AppDataDiskFolder(AppData):
return self.lock.path / "wheel" / for_py_version / "image" / "1" / name
-@six.add_metaclass(ABCMeta)
-class JSONStoreDisk(ContentStore):
+class JSONStoreDisk(ContentStore, metaclass=ABCMeta):
def __init__(self, in_folder, key, msg, msg_args):
self.in_folder = in_folder
self.key = key
@@ -123,7 +117,7 @@ class JSONStoreDisk(ContentStore):
@property
def file(self):
- return self.in_folder.path / "{}.json".format(self.key)
+ return self.in_folder.path / f"{self.key}.json"
def exists(self):
return self.file.exists()
@@ -132,7 +126,7 @@ class JSONStoreDisk(ContentStore):
data, bad_format = None, False
try:
data = json.loads(self.file.read_text())
- logging.debug("got {} from %s".format(self.msg), *self.msg_args)
+ logging.debug(f"got {self.msg} from %s", *self.msg_args)
return data
except ValueError:
bad_format = True
@@ -147,7 +141,7 @@ class JSONStoreDisk(ContentStore):
def remove(self):
self.file.unlink()
- logging.debug("removed {} at %s".format(self.msg), *self.msg_args)
+ logging.debug(f"removed {self.msg} at %s", *self.msg_args)
@contextmanager
def locked(self):
@@ -157,21 +151,28 @@ class JSONStoreDisk(ContentStore):
def write(self, content):
folder = self.file.parent
folder.mkdir(parents=True, exist_ok=True)
- self.file.write_text(ensure_text(json.dumps(content, sort_keys=True, indent=2)))
- logging.debug("wrote {} at %s".format(self.msg), *self.msg_args)
+ self.file.write_text(json.dumps(content, sort_keys=True, indent=2))
+ logging.debug(f"wrote {self.msg} at %s", *self.msg_args)
class PyInfoStoreDisk(JSONStoreDisk):
def __init__(self, in_folder, path):
- key = sha256(str(path).encode("utf-8") if six.PY3 else str(path)).hexdigest()
- super(PyInfoStoreDisk, self).__init__(in_folder, key, "python info of %s", (path,))
+ key = sha256(str(path).encode("utf-8")).hexdigest()
+ super().__init__(in_folder, key, "python info of %s", (path,))
class EmbedDistributionUpdateStoreDisk(JSONStoreDisk):
def __init__(self, in_folder, distribution):
- super(EmbedDistributionUpdateStoreDisk, self).__init__(
+ super().__init__(
in_folder,
distribution,
"embed update of distribution %s",
(distribution,),
)
+
+
+__all__ = [
+ "AppDataDiskFolder",
+ "JSONStoreDisk",
+ "PyInfoStoreDisk",
+]
diff --git a/src/virtualenv/app_data/via_tempdir.py b/src/virtualenv/app_data/via_tempdir.py
index 112a3fe..c15741a 100644
--- a/src/virtualenv/app_data/via_tempdir.py
+++ b/src/virtualenv/app_data/via_tempdir.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, unicode_literals
-
import logging
from tempfile import mkdtemp
@@ -13,7 +11,7 @@ class TempAppData(AppDataDiskFolder):
can_update = False
def __init__(self):
- super(TempAppData, self).__init__(folder=mkdtemp())
+ super().__init__(folder=mkdtemp())
logging.debug("created temporary app data folder %s", self.lock.path)
def reset(self):
@@ -25,3 +23,8 @@ class TempAppData(AppDataDiskFolder):
def embed_update_log(self, distribution, for_py_version):
raise NotImplementedError
+
+
+__all__ = [
+ "TempAppData",
+]