initial commit
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import os
|
||||
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.utils.text import get_valid_filename
|
||||
|
||||
|
||||
class ReleaseFileStorage(FileSystemStorage):
|
||||
def get_available_name(self, name, max_length=None):
|
||||
return name
|
||||
|
||||
|
||||
release_file_storage = ReleaseFileStorage()
|
||||
|
||||
RELEASE_FILE_BY_URL_FIELD = {
|
||||
"windows_download_url": "windows_download_file",
|
||||
"macos_download_url": "macos_download_file",
|
||||
"linux_download_url": "linux_download_file",
|
||||
"source_code_url": "source_code_file",
|
||||
}
|
||||
|
||||
RELEASE_ASSET_KEY_BY_URL_FIELD = {
|
||||
"windows_download_url": "windows",
|
||||
"macos_download_url": "macos",
|
||||
"linux_download_url": "linux",
|
||||
"source_code_url": "source",
|
||||
}
|
||||
|
||||
URL_FIELD_BY_ASSET_KEY = {
|
||||
v: k for k, v in RELEASE_ASSET_KEY_BY_URL_FIELD.items()
|
||||
}
|
||||
|
||||
FILE_FIELD_BY_ASSET_KEY = {
|
||||
asset: RELEASE_FILE_BY_URL_FIELD[url_field]
|
||||
for url_field, asset in RELEASE_ASSET_KEY_BY_URL_FIELD.items()
|
||||
}
|
||||
|
||||
RELEASE_ASSET_KEYS = frozenset(FILE_FIELD_BY_ASSET_KEY.keys())
|
||||
|
||||
RELEASE_FILE_HELP_TEXT = (
|
||||
"Optional. Served from this site when the matching URL above is empty. "
|
||||
"To remove an uploaded file, check Clear, then Save — the file is deleted from the server. "
|
||||
"Any file type and size are allowed; large uploads may require web server limits."
|
||||
)
|
||||
|
||||
RELEASE_ORIGINAL_FILENAME_FIELDS = {
|
||||
"windows_download_file": "windows_download_filename",
|
||||
"macos_download_file": "macos_download_filename",
|
||||
"linux_download_file": "linux_download_filename",
|
||||
"source_code_file": "source_code_filename",
|
||||
}
|
||||
|
||||
RELEASE_ORIGINAL_FILENAME_BY_ASSET = {
|
||||
RELEASE_ASSET_KEY_BY_URL_FIELD[url_field]: RELEASE_ORIGINAL_FILENAME_FIELDS[file_field]
|
||||
for url_field, file_field in RELEASE_FILE_BY_URL_FIELD.items()
|
||||
}
|
||||
|
||||
|
||||
def _release_file_path(instance, filename, platform):
|
||||
if instance.sub_product_id:
|
||||
base = f"{instance.sub_product.main_product.slug}/{instance.sub_product.slug}"
|
||||
else:
|
||||
base = instance.main_product.slug
|
||||
version_part = (instance.version or "release").replace("/", "-")
|
||||
safe_name = get_valid_filename(os.path.basename(filename))
|
||||
return f"releases/{base}/{version_part}/{platform}/{safe_name}"
|
||||
|
||||
|
||||
def release_windows_file_upload_to(instance, filename):
|
||||
return _release_file_path(instance, filename, "windows")
|
||||
|
||||
|
||||
def release_macos_file_upload_to(instance, filename):
|
||||
return _release_file_path(instance, filename, "macos")
|
||||
|
||||
|
||||
def release_linux_file_upload_to(instance, filename):
|
||||
return _release_file_path(instance, filename, "linux")
|
||||
|
||||
|
||||
def release_source_file_upload_to(instance, filename):
|
||||
return _release_file_path(instance, filename, "source")
|
||||
|
||||
|
||||
release_file_upload_to = release_windows_file_upload_to
|
||||
Reference in New Issue
Block a user