Create location model to keep track of filesystem paths
This commit is contained in:
parent
c024300507
commit
eca02882da
67
borgweb/borg/models/location.py
Normal file
67
borgweb/borg/models/location.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
from django.db import models
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
ACCESS_DENIED = -2
|
||||
INVALID_PATH = -1
|
||||
NON_EXISTENT = 0
|
||||
FILE = 1
|
||||
DIRECTORY = 2
|
||||
SYMLINK = 3
|
||||
MOUNT_POINT = 4
|
||||
|
||||
DESCRIPTION = {
|
||||
INVALID_PATH: "path",
|
||||
NON_EXISTENT: "path",
|
||||
FILE: "file",
|
||||
DIRECTORY: "directory",
|
||||
SYMLINK: "symbolic link",
|
||||
MOUNT_POINT: "mount point",
|
||||
ACCESS_DENIED: "access denied",
|
||||
}
|
||||
|
||||
|
||||
class Location(models.Model):
|
||||
label = models.TextField(unique=True)
|
||||
path = models.TextField()
|
||||
last_checked = models.DateTimeField()
|
||||
|
||||
def __path_type(self):
|
||||
try:
|
||||
path = Path(self.path)
|
||||
path.exists()
|
||||
except OSError:
|
||||
return INVALID_PATH
|
||||
except ValueError:
|
||||
return INVALID_PATH
|
||||
try:
|
||||
if not path.exists():
|
||||
return NON_EXISTENT
|
||||
elif path.is_symlink():
|
||||
return SYMLINK
|
||||
elif path.is_mount():
|
||||
return MOUNT_POINT
|
||||
elif path.is_dir():
|
||||
return DIRECTORY
|
||||
elif path.is_file():
|
||||
return FILE
|
||||
except PermissionError:
|
||||
return ACCESS_DENIED
|
||||
|
||||
def exists(self):
|
||||
path_type = self.__path_type()
|
||||
|
||||
if self.invalid():
|
||||
return False
|
||||
elif path_type in [FILE, DIRECTORY, SYMLINK, MOUNT_POINT]:
|
||||
self.last_checked = datetime.utcnow()
|
||||
return True
|
||||
|
||||
def type_description(self):
|
||||
return DESCRIPTION[self.__path_type()]
|
||||
|
||||
def invalid(self):
|
||||
return self.__path_type() in [INVALID_PATH, NON_EXISTENT, ACCESS_DENIED]
|
||||
|
||||
def have_permission(self):
|
||||
return self.__path_type() != ACCESS_DENIED
|
Loading…
Reference in New Issue
Block a user