aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-06-23 16:55:19 +0200
committerEgor Tensin <egor@tensin.name>2026-06-23 16:59:28 +0200
commitfd0587ba6c790a2440b67ce2becd11ef88713475 (patch)
treebecf0e7e41021f64a113d04914057673e7109ac1
parentworkflows/ci: allow linting to fail on non-master branches (diff)
downloadvk-scripts-fd0587ba6c790a2440b67ce2becd11ef88713475.tar.gz
vk-scripts-fd0587ba6c790a2440b67ce2becd11ef88713475.zip
use format strings
-rw-r--r--README.md2
-rw-r--r--pyproject.toml2
-rw-r--r--vk/mutuals.py4
-rw-r--r--vk/platform.py3
-rw-r--r--vk/tracking/db/backend/log.py30
-rw-r--r--vk/tracking/db/format.py2
-rw-r--r--vk/tracking/db/timestamp.py2
-rw-r--r--vk/tracking/sessions.py25
-rw-r--r--vk/tracking/status.py6
9 files changed, 37 insertions, 39 deletions
diff --git a/README.md b/README.md
index ca4f256..31281bb 100644
--- a/README.md
+++ b/README.md
@@ -10,8 +10,6 @@ Installation
pip install vk-scripts
-
-Python 3.4 or higher is required.
`vk-sessions` uses [matplotlib].
[matplotlib]: http://matplotlib.org/
diff --git a/pyproject.toml b/pyproject.toml
index d855f6f..32b223c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -12,7 +12,7 @@ license-files = ["LICENSE.txt"]
dynamic = ["version"]
authors = [{name = "Egor Tensin", email = "egor@tensin.name"}]
readme = "README.md"
-requires-python = ">=3.4"
+requires-python = ">=3.6"
dependencies = [
'importlib-metadata ~= 4.0 ; python_version < "3.8"',
diff --git a/vk/mutuals.py b/vk/mutuals.py
index 1400ac5..062d07c 100644
--- a/vk/mutuals.py
+++ b/vk/mutuals.py
@@ -67,14 +67,14 @@ class OutputFormat(Enum):
return OutputSinkCSV(fd)
if self is OutputFormat.JSON:
return OutputSinkJSON(fd)
- raise NotImplementedError('unsupported output format: ' + str(self))
+ raise NotImplementedError(f'unsupported output format: {self}')
def _parse_output_format(s):
try:
return OutputFormat(s)
except ValueError:
- raise argparse.ArgumentTypeError('invalid output format: ' + s)
+ raise argparse.ArgumentTypeError(f'invalid output format: {s}')
def _parse_args(args=None):
diff --git a/vk/platform.py b/vk/platform.py
index fccaa17..e7ca38a 100644
--- a/vk/platform.py
+++ b/vk/platform.py
@@ -35,8 +35,7 @@ class Platform(Enum):
return self._capitalize_first_letter(_PLATFORM_DESCRIPTIONS[self])
def get_descr_text(self):
- s = _PLATFORM_DESCRIPTIONS[self]
- return 'the ' + s
+ return f'the {_PLATFORM_DESCRIPTIONS[self]}'
def get_descr_text_capitalized(self):
return self._capitalize_first_letter(self.get_descr_text())
diff --git a/vk/tracking/db/backend/log.py b/vk/tracking/db/backend/log.py
index dc13a92..0cc8a63 100644
--- a/vk/tracking/db/backend/log.py
+++ b/vk/tracking/db/backend/log.py
@@ -72,36 +72,36 @@ class Writer(meta.Writer):
@staticmethod
def _format_user(user):
if user.has_last_name():
- return '{} {}'.format(user.get_first_name(), user.get_last_name())
- return '{}'.format(user.get_first_name())
+ return f'{user.get_first_name()} {user.get_last_name()}'
+ return f'{user.get_first_name()}'
@staticmethod
def _format_user_is_online(user):
- return '{} is ONLINE.'.format(Writer._format_user(user))
+ user = Writer._format_user(user)
+ return f'{user} is ONLINE.'
@staticmethod
def _format_user_is_offline(user):
- return '{} is OFFLINE.'.format(Writer._format_user(user))
+ user = Writer._format_user(user)
+ return f'{user} is OFFLINE.'
@staticmethod
def _format_user_last_seen(user):
- return '{} was last seen at {} using {}.'.format(
- Writer._format_user(user),
- user.get_last_seen_time_local(),
- user.get_last_seen_platform().get_descr_text(),
- )
+ last_seen = user.get_last_seen_time_local()
+ platform = user.get_last_seen_platform().get_descr_text()
+ user = Writer._format_user(user)
+ return f'{user} was last seen at {last_seen} using {platform}.'
@staticmethod
def _format_user_went_online(user):
- return '{} went ONLINE.'.format(Writer._format_user(user))
+ user = Writer._format_user(user)
+ return f'{user} went ONLINE.'
@staticmethod
def _format_user_went_offline(user):
- return '{} went OFFLINE.'.format(Writer._format_user(user))
+ user = Writer._format_user(user)
+ return f'{user} went OFFLINE.'
@staticmethod
def _format_another_connection_error(e):
- return (
- 'Encountered a connection error which looks like the previous one: '
- + str(e)
- )
+ return f'Encountered a connection error which looks like the previous one: {e}'
diff --git a/vk/tracking/db/format.py b/vk/tracking/db/format.py
index 53762b3..5c88cb7 100644
--- a/vk/tracking/db/format.py
+++ b/vk/tracking/db/format.py
@@ -26,7 +26,7 @@ class Format(Enum):
return backend.log.Writer(fd)
if self is Format.NULL:
return backend.null.Writer()
- raise NotImplementedError('unsupported database format: ' + str(self))
+ raise NotImplementedError(f'unsupported database format: {self}')
def open_output_file(self, path=None):
if self is Format.CSV:
diff --git a/vk/tracking/db/timestamp.py b/vk/tracking/db/timestamp.py
index 2f26445..4a3892f 100644
--- a/vk/tracking/db/timestamp.py
+++ b/vk/tracking/db/timestamp.py
@@ -33,4 +33,4 @@ class Timestamp:
return Timestamp(datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ'))
def __str__(self):
- return self.dt.isoformat() + 'Z'
+ return f'{self.dt.isoformat()}Z'
diff --git a/vk/tracking/sessions.py b/vk/tracking/sessions.py
index deb0be5..3386c7f 100644
--- a/vk/tracking/sessions.py
+++ b/vk/tracking/sessions.py
@@ -164,7 +164,7 @@ class GroupBy(Enum):
return online_streaks.group_by_weekday(db_reader)
if self is GroupBy.HOUR:
return online_streaks.group_by_hour(db_reader)
- raise NotImplementedError('unsupported grouping: ' + str(self))
+ raise NotImplementedError(f'unsupported grouping: {self}')
_OUTPUT_USER_FIELDS = (
@@ -213,7 +213,7 @@ class OutputSinkCSV(OutputSinkOnlineSessions):
@staticmethod
def _key_to_row(group_by, key):
if group_by not in OutputSinkCSV._CONVERT_KEY:
- raise NotImplementedError('unsupported grouping: ' + str(group_by))
+ raise NotImplementedError(f'unsupported grouping: {group_by}')
return OutputSinkCSV._CONVERT_KEY[group_by](key)
def process_database(self, group_by, db_reader, time_from=None, time_to=None):
@@ -276,7 +276,7 @@ class OutputSinkJSON(OutputSinkOnlineSessions):
@staticmethod
def _key_to_object(group_by, key):
if group_by not in OutputSinkJSON._CONVERT_KEY:
- raise NotImplementedError('unsupported grouping: ' + str(group_by))
+ raise NotImplementedError(f'unsupported grouping: {group_by}')
return OutputSinkJSON._CONVERT_KEY[group_by](key)
def process_database(self, group_by, db_reader, time_from=None, time_to=None):
@@ -291,7 +291,7 @@ class OutputSinkJSON(OutputSinkOnlineSessions):
class OutputConverterPlot:
@staticmethod
def convert_user(user):
- return '{}\n{}'.format(user.get_first_name(), user.get_last_name())
+ return f'{user.get_first_name()}\n{user.get_last_name()}'
@staticmethod
def convert_date(date):
@@ -303,7 +303,7 @@ class OutputConverterPlot:
@staticmethod
def convert_hour(hour):
- return '{}:00'.format(hour)
+ return f'{hour}:00'
class OutputSinkPlot(OutputSinkOnlineSessions):
@@ -322,7 +322,7 @@ class OutputSinkPlot(OutputSinkOnlineSessions):
@staticmethod
def _format_key(group_by, key):
if group_by not in OutputSinkPlot._FORMAT_KEY:
- raise NotImplementedError('unsupported grouping: ' + str(group_by))
+ raise NotImplementedError(f'unsupported grouping: {group_by}')
return OutputSinkPlot._FORMAT_KEY[group_by](key)
@staticmethod
@@ -390,7 +390,7 @@ class OutputFormat(Enum):
return OutputSinkJSON(fd)
if self is OutputFormat.PLOT:
return OutputSinkPlot(fd)
- raise NotImplementedError('unsupported output format: ' + str(self))
+ raise NotImplementedError(f'unsupported output format: {self}')
def open_file(self, path=None):
if self is OutputFormat.PLOT:
@@ -402,21 +402,21 @@ def _parse_group_by(s):
try:
return GroupBy(s)
except ValueError:
- raise argparse.ArgumentTypeError('invalid "group by" value: ' + s)
+ raise argparse.ArgumentTypeError(f'invalid "group by" value: {s}')
def _parse_database_format(s):
try:
return DatabaseFormat(s)
except ValueError:
- raise argparse.ArgumentTypeError('invalid database format: ' + s)
+ raise argparse.ArgumentTypeError(f'invalid database format: {s}')
def _parse_output_format(s):
try:
return OutputFormat(s)
except ValueError:
- raise argparse.ArgumentTypeError('invalid output format: ' + s)
+ raise argparse.ArgumentTypeError(f'invalid output format: {s}')
_DATE_RANGE_LIMIT_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
@@ -427,8 +427,9 @@ def _parse_date_range_limit(s):
dt = datetime.strptime(s, _DATE_RANGE_LIMIT_FORMAT)
return dt.replace(tzinfo=timezone.utc)
except ValueError:
- msg = 'invalid date range limit (must be in the \'{}\' format): {}'
- raise argparse.ArgumentTypeError(msg.format(_DATE_RANGE_LIMIT_FORMAT, s))
+ raise argparse.ArgumentTypeError(
+ f"invalid date range limit (must be in the '{_DATE_RANGE_LIMIT_FORMAT}' format): {s}"
+ )
def _parse_args(args=None):
diff --git a/vk/tracking/status.py b/vk/tracking/status.py
index 8902003..7ef8e7c 100644
--- a/vk/tracking/status.py
+++ b/vk/tracking/status.py
@@ -155,9 +155,9 @@ def _parse_positive_integer(s):
try:
n = int(s)
except ValueError:
- raise argparse.ArgumentTypeError('must be a positive integer: ' + s)
+ raise argparse.ArgumentTypeError(f'must be a positive integer: {s}')
if n < 1:
- raise argparse.ArgumentTypeError('must be a positive integer: ' + s)
+ raise argparse.ArgumentTypeError(f'must be a positive integer: {s}')
return n
@@ -165,7 +165,7 @@ def _parse_database_format(s):
try:
return DatabaseFormat(s)
except ValueError:
- raise argparse.ArgumentTypeError('invalid database format: ' + s)
+ raise argparse.ArgumentTypeError(f'invalid database format: {s}')
def _parse_args(args=None):