Added support for mounting shared storage in server mode. #5014

This commit is contained in:
Nikhil Mohite
2023-03-06 17:03:47 +05:30
committed by GitHub
parent c35d449d7e
commit 9da8a188fa
19 changed files with 307 additions and 66 deletions

View File

@@ -120,3 +120,6 @@ DATABASE_LAST_SYSTEM_OID = 16383
# Drivers
PSYCOPG2 = 'psycopg2'
PSYCOPG3 = 'psycopg3'
# Shared storage
MY_STORAGE = 'my_storage'

View File

@@ -14,21 +14,32 @@ import os
from flask import current_app, url_for
from flask_security import current_user
from werkzeug.exceptions import InternalServerError
from pgadmin.utils.constants import MY_STORAGE
def get_storage_directory(user=current_user):
def get_storage_directory(user=current_user, shared_storage=''):
import config
if config.SERVER_MODE is not True:
return None
storage_dir = getattr(
config, 'STORAGE_DIR',
os.path.join(
os.path.realpath(
os.path.expanduser('~/.pgadmin/')
), 'storage'
is_shared_storage = False
if shared_storage != MY_STORAGE and shared_storage:
is_shared_storage = True
selectedDir = [sdir for sdir in config.SHARED_STORAGE if
sdir['name'] == shared_storage]
storage_dir = None
if len(selectedDir) > 0:
the_dir = selectedDir[0]['path']
storage_dir = the_dir
else:
storage_dir = getattr(
config, 'STORAGE_DIR',
os.path.join(
os.path.realpath(
os.path.expanduser('~/.pgadmin/')
), 'storage'
)
)
)
if storage_dir is None:
return None
@@ -55,12 +66,19 @@ def get_storage_directory(user=current_user):
username = _preprocess_username(user.username)
# Figure out the new style storage directory name
storage_dir = os.path.join(
storage_dir.decode('utf-8') if hasattr(storage_dir, 'decode')
else storage_dir,
username
)
if is_shared_storage:
# Figure out the new style storage directory name
storage_dir = os.path.join(
storage_dir.decode('utf-8') if hasattr(storage_dir, 'decode')
else storage_dir
)
else:
# Figure out the new style storage directory name
storage_dir = os.path.join(
storage_dir.decode('utf-8') if hasattr(storage_dir, 'decode')
else storage_dir,
username
)
# Rename an old-style storage directory, if the new style doesn't exist
if os.path.exists(old_storage_dir) and not os.path.exists(storage_dir):

View File

@@ -72,6 +72,7 @@ class _Preference():
self.options = kwargs.get('options', None)
self.select = kwargs.get('select', None)
self.fields = kwargs.get('fields', None)
self.hidden = kwargs.get('hidden', None)
self.allow_blanks = kwargs.get('allow_blanks', None)
self.disabled = kwargs.get('disabled', False)
self.dependents = kwargs.get('dependents', None)
@@ -262,6 +263,7 @@ class _Preference():
'select': self.select,
'value': self.get(),
'fields': self.fields,
'hidden': self.hidden,
'disabled': self.disabled,
'dependents': self.dependents
}
@@ -436,6 +438,7 @@ class Preferences():
category_label = kwargs.get('category_label', None)
select = kwargs.get('select', None)
fields = kwargs.get('fields', None)
hidden = kwargs.get('hidden', None)
allow_blanks = kwargs.get('allow_blanks', None)
disabled = kwargs.get('disabled', False)
dependents = kwargs.get('dependents', None)
@@ -457,7 +460,7 @@ class Preferences():
min_val=min_val, max_val=max_val, options=options,
select=select, fields=fields, allow_blanks=allow_blanks,
disabled=disabled, dependents=dependents,
control_props=control_props
control_props=control_props, hidden=hidden
)
return res