Compare commits

...

27 Commits

Author SHA1 Message Date
Sam 37a0d504f8
Merge 59803e6f18 into 9cabbbd193 2024-04-11 12:06:47 +05:30
Manu 9cabbbd193 Input to change macOS version for building 2024-04-08 16:24:31 +01:00
Aryaman Sharma 3268bf1599
Notify after post_backup_tasks. By @TheLazron (#1940) 2024-04-07 18:05:04 +01:00
Manu 7642002573 Fix stalebot config 2024-04-07 08:40:45 +01:00
Sam 58137f004d
Add new exclusion presets (#1970) 2024-04-06 22:35:31 +01:00
Sam 59803e6f18 chore: minor refactor 2024-04-01 23:10:58 +05:30
Sam ba695dd4d5
Merge branch 'borgbase:master' into issue1870 2024-04-01 22:21:35 +05:30
yfprojects 8d4ed3b19d
Merge branch 'master' into issue1870 2024-04-01 14:26:21 +00:00
Sam 73e7d966b0 chore: minor refactor 2024-02-23 15:10:18 +05:30
Sam bef54e1985
Merge branch 'borgbase:master' into issue1870 2024-02-22 18:20:36 +05:30
Sam 65fa36b69a minor refactor in src/vorta/store/connection.py 2023-12-27 12:55:34 +05:30
Sam eee0b42def conflict resolved 2023-12-25 15:26:05 +05:30
Sam 0c3829ce73 conflict resolved 2023-12-25 15:24:20 +05:30
Sam 5f5b4e3739 made store/ typesafe 2023-12-25 15:22:31 +05:30
Sam f0f33c7e0e made store/ typesafe 2023-12-22 02:20:09 +05:30
Sam 77f5c33b5a add peewee 2023-12-13 14:45:27 +05:30
Sam 2f40b7c405
Merge branch 'borgbase:master' into master 2023-12-08 16:31:03 +05:30
Sam a5c6729064
Merge branch 'borgbase:master' into master 2023-11-17 18:38:16 +05:30
Sam 1d76358404
Merge branch 'borgbase:master' into master 2023-11-08 15:34:47 +05:30
Sam 767dcc126a
Merge branch 'borgbase:master' into master 2023-10-05 05:29:49 +00:00
Sam 4f03af6675
Merge branch 'borgbase:master' into master 2023-09-29 21:16:15 +05:30
Sam d21316b920
Merge branch 'borgbase:master' into master 2023-09-23 22:45:41 +05:30
Sam 4b299f9a4c
Merge branch 'borgbase:master' into master 2023-09-18 16:05:20 +05:30
Sam b4f2e64662
Merge branch 'borgbase:master' into master 2023-09-09 14:26:04 +05:30
Sam 5f07abd8d0
Merge branch 'borgbase:master' into master 2023-09-06 19:48:42 +05:30
Sam 7b800661c2 removed peewee from requirements: not necessary 2023-09-06 11:57:06 +05:30
Sam 6abd0f5862 added peewee to requirements.d/dev.txt 2023-09-01 23:13:17 +05:30
7 changed files with 79 additions and 22 deletions

View File

@ -3,17 +3,21 @@ on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to use for building macOS release'
description: 'Branch to use for building release'
required: true
default: 'master'
borg_version:
description: 'Borg version to package'
required: true
default: '1.2.1'
default: '1.2.8'
macos_version:
description: 'macOS version for building'
required: true
default: 'macos-11'
jobs:
build:
runs-on: macos-11
runs-on: ${{ github.event.inputs.macos_version }}
steps:
- name: Check out selected branch

View File

@ -6,10 +6,13 @@ on:
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v8
with:
days-before-issue-stale: 60
days-before-issue-stale: 90
days-before-pr-stale: -1
days-before-issue-close: 7
# days-before-pr-close: 10

View File

@ -56,5 +56,44 @@
],
"tags": ["type:dev", "editor:android-studio", "os:linux"],
"author": "shivansh02"
},
{
"name": "Jetbrains IDEs cache, config, path and logs",
"slug": "jetbrains",
"patterns": [
"fm:*/.config/JetBrains",
"fm:*/.cache/JetBrains",
"fm:*/.local/share/JetBrains"
],
"tags": ["type:dev", "editor:jetbrains", "os:linux"],
"author": "SAMAD101"
},
{
"name": "AWS artefacts",
"slug": "aws-artefacts",
"patterns": [
"fm:*/.aws"
],
"tags": ["type:dev", "cloud:aws", "os:linux", "os:darwin"],
"author": "SAMAD101"
},
{
"name": "Spotify cache and config files",
"slug": "spotify",
"patterns": [
"fm:*/.cache/spotify",
"fm:*/.config/spotify"
],
"tags": ["type:media", "media:spotify", "os:linux"],
"author": "SAMAD101"
},
{
"name": "Docker artefacts",
"slug": "docker-artefacts",
"patterns": [
"fm:*/.docker"
],
"tags": ["type:dev", "cloud:docker", "os:linux", "os:darwin"],
"author": "SAMAD101"
}
]

View File

@ -459,6 +459,7 @@ class VortaScheduler(QtCore.QObject):
Pruning and checking after successful backup.
"""
profile = BackupProfileModel.get(id=profile_id)
notifier = VortaNotifications.pick()
logger.info('Doing post-backup jobs for %s', profile.name)
if profile.prune_on:
msg = BorgPruneJob.prepare(profile)
@ -489,6 +490,11 @@ class VortaScheduler(QtCore.QObject):
self.app.jobs_manager.add_job(job)
logger.info('Finished background task for profile %s', profile.name)
notifier.deliver(
self.tr('Vorta Backup'),
self.tr('Post Backup Tasks successful for %s' % profile.name),
level='info',
)
def remove_job(self, profile_id):
if profile_id in self.timers:

View File

@ -1,8 +1,9 @@
import os
import shutil
from datetime import datetime, timedelta
from typing import Any, Optional
from peewee import Tuple, fn
from peewee import SqliteDatabase, Tuple, fn
from playhouse import signals
from vorta import config
@ -28,18 +29,18 @@ SCHEMA_VERSION = 22
@signals.post_save(sender=SettingsModel)
def setup_autostart(model_class, instance, created):
def setup_autostart(model_class, instance, created) -> None:
if instance.key == 'autostart':
open_app_at_startup(instance.value)
def cleanup_db():
def cleanup_db() -> None:
# Clean up database
DB.execute_sql("VACUUM")
DB.close()
def init_db(con=None):
def init_db(con: Optional[SqliteDatabase] = None) -> None:
if con is not None:
os.umask(0o0077)
DB.initialize(con)
@ -62,12 +63,12 @@ def init_db(con=None):
# Delete old log entries after 6 months.
# The last `create` command of each profile must not be deleted
# since the scheduler uses it to determine the last backup time.
last_backups_per_profile = (
last_backups_per_profile = Tuple(
EventLogModel.select(EventLogModel.profile, fn.MAX(EventLogModel.start_time))
.where(EventLogModel.subcommand == 'create')
.group_by(EventLogModel.profile)
)
last_scheduled_backups_per_profile = (
last_scheduled_backups_per_profile = Tuple(
EventLogModel.select(EventLogModel.profile, fn.MAX(EventLogModel.start_time))
.where(EventLogModel.subcommand == 'create', EventLogModel.category == 'scheduled')
.group_by(EventLogModel.profile)
@ -105,7 +106,7 @@ def init_db(con=None):
s.save()
def backup_current_db(schema_version):
def backup_current_db(schema_version: Any) -> None:
"""
Creates a backup copy of settings.db
"""

View File

@ -1,6 +1,8 @@
from datetime import datetime
from typing import Any
import peewee as pw
from peewee import SqliteDatabase
from playhouse.migrate import SqliteMigrator, migrate
from .models import (
@ -9,13 +11,14 @@ from .models import (
BackupProfileModel,
EventLogModel,
RepoModel,
SchemaVersion,
SettingsModel,
SourceFileModel,
WifiSettingModel,
)
def run_migrations(current_schema, db_connection):
def run_migrations(current_schema: SchemaVersion, db_connection: SqliteDatabase):
"""
Apply new schema versions to database.
@ -251,7 +254,7 @@ def run_migrations(current_schema, db_connection):
)
def _apply_schema_update(current_schema, version_after, *operations):
def _apply_schema_update(current_schema: Any, version_after: int, *operations) -> None:
with DB.atomic():
migrate(*operations)
current_schema.version = version_after

View File

@ -8,6 +8,7 @@ import json
import logging
from datetime import datetime
from enum import Enum
from typing import Any, Dict, Optional
import peewee as pw
from playhouse import signals
@ -26,11 +27,11 @@ class JSONField(pw.TextField):
From: https://gist.github.com/rosscdh/f4f26758b0228f475b132c688f15af2b
"""
def db_value(self, value):
def db_value(self, value) -> Optional[str]:
"""Convert the python value for storage in the database."""
return value if value is None else json.dumps(value)
def python_value(self, value):
def python_value(self, value) -> Optional[str]:
"""Convert the database value to a pythonic value."""
return value if value is None else json.loads(value)
@ -53,7 +54,7 @@ class RepoModel(BaseModel):
create_backup_cmd = pw.CharField(default='')
extra_borg_arguments = pw.CharField(default='')
def is_remote_repo(self):
def is_remote_repo(self) -> bool:
return not self.url.startswith('/')
class Meta:
@ -103,14 +104,14 @@ class BackupProfileModel(BaseModel):
post_backup_cmd = pw.CharField(default='')
dont_run_on_metered_networks = pw.BooleanField(default=True)
def refresh(self):
def refresh(self) -> None:
return type(self).get(self._pk_expr())
def slug(self):
def slug(self) -> str:
return slugify(self.name)
def get_combined_exclusion_string(self):
allPresets = get_exclusion_presets()
def get_combined_exclusion_string(self) -> str:
allPresets: Dict[str, Dict[str, Any]] = get_exclusion_presets()
excludes = ""
if (
@ -202,7 +203,7 @@ class ArchiveModel(BaseModel):
size = pw.IntegerField(null=True)
trigger = pw.CharField(null=True)
def formatted_time(self):
def formatted_time(self) -> None:
return
class Meta:
@ -266,5 +267,5 @@ class SettingsModel(BaseModel):
class BackupProfileMixin:
"""Extend to support multiple profiles later."""
def profile(self):
def profile(self) -> BackupProfileModel:
return BackupProfileModel.get(id=self.window().current_profile.id)