kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
46 wiersze
1.4 KiB
Python
46 wiersze
1.4 KiB
Python
from urllib.parse import urlencode, parse_qs, urlsplit, urlunsplit
|
|
import os
|
|
import shutil
|
|
|
|
from django.db import transaction
|
|
|
|
|
|
def rename_file(instance, field_name, new_name, allow_missing_file=False):
|
|
field = getattr(instance, field_name)
|
|
current_name, extension = os.path.splitext(field.name)
|
|
|
|
new_name_with_extension = '{}{}'.format(new_name, extension)
|
|
try:
|
|
shutil.move(field.path, new_name_with_extension)
|
|
except FileNotFoundError:
|
|
if not allow_missing_file:
|
|
raise
|
|
print('Skipped missing file', field.path)
|
|
initial_path = os.path.dirname(field.name)
|
|
field.name = os.path.join(initial_path, new_name_with_extension)
|
|
instance.save()
|
|
return new_name_with_extension
|
|
|
|
|
|
def on_commit(f, *args, **kwargs):
|
|
return transaction.on_commit(
|
|
lambda: f(*args, **kwargs)
|
|
)
|
|
|
|
|
|
def set_query_parameter(url, **kwargs):
|
|
"""Given a URL, set or replace a query parameter and return the
|
|
modified URL.
|
|
|
|
>>> set_query_parameter('http://example.com?foo=bar&biz=baz', 'foo', 'stuff')
|
|
'http://example.com?foo=stuff&biz=baz'
|
|
"""
|
|
scheme, netloc, path, query_string, fragment = urlsplit(url)
|
|
query_params = parse_qs(query_string)
|
|
|
|
for param_name, param_value in kwargs.items():
|
|
query_params[param_name] = [param_value]
|
|
new_query_string = urlencode(query_params, doseq=True)
|
|
|
|
return urlunsplit((scheme, netloc, path, new_query_string, fragment))
|