mirror of
https://github.com/clearml/clearml
synced 2025-03-03 10:42:00 +00:00
Fix HTTP link quoting in stored links
This commit is contained in:
parent
98c9a95338
commit
30cf6b4834
@ -11,6 +11,7 @@ from six.moves.urllib.parse import urlparse, urlunparse
|
||||
|
||||
from ...backend_api.services import events
|
||||
from ...config import config
|
||||
from ...storage.util import quote_url
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
@ -294,7 +295,7 @@ class UploadEvent(MetricsEventAdapter):
|
||||
delete_local_file=local_file if self._delete_after_upload else None,
|
||||
)
|
||||
|
||||
def get_target_full_upload_uri(self, storage_uri, storage_key_prefix=None):
|
||||
def get_target_full_upload_uri(self, storage_uri, storage_key_prefix=None, quote_uri=True):
|
||||
e_storage_uri = self._upload_uri or storage_uri
|
||||
# if we have an entry (with or without a stream), we'll generate the URL and store it in the event
|
||||
filename = self._upload_filename
|
||||
@ -306,6 +307,10 @@ class UploadEvent(MetricsEventAdapter):
|
||||
# make sure we preserve local path root
|
||||
if e_storage_uri.startswith('/'):
|
||||
url = '/'+url
|
||||
|
||||
if quote_uri:
|
||||
url = quote_url(url)
|
||||
|
||||
return key, url
|
||||
|
||||
|
||||
@ -319,16 +324,7 @@ class ImageEvent(UploadEvent):
|
||||
|
||||
def get_api_event(self):
|
||||
return events.MetricsImageEvent(
|
||||
# Hack: replace single '%' with quoted value '%25',
|
||||
# allowing the link to be properly unquoted during http serving
|
||||
url=self._url
|
||||
if (
|
||||
not self._url
|
||||
or self._url.startswith("file://")
|
||||
or self._url.startswith("/")
|
||||
or self._url.startswith("\\")
|
||||
)
|
||||
else self._url.replace("%", "%25"),
|
||||
url=self._url,
|
||||
key=self._key,
|
||||
**self._get_base_dict()
|
||||
)
|
||||
|
@ -119,7 +119,7 @@ class Metrics(InterfaceBase):
|
||||
entry = ev.get_file_entry()
|
||||
kwargs = {}
|
||||
if entry:
|
||||
key, url = ev.get_target_full_upload_uri(storage_uri, self.storage_key_prefix)
|
||||
key, url = ev.get_target_full_upload_uri(storage_uri, self.storage_key_prefix, quote_uri=False)
|
||||
kwargs[entry.key_prop] = key
|
||||
kwargs[entry.url_prop] = url
|
||||
if not entry.stream:
|
||||
|
@ -552,11 +552,6 @@ class Reporter(InterfaceBase, AbstractContextManager, SetupUploadMixin, AsyncMan
|
||||
return self.report_image_and_upload(title=title, series=series, iter=iter, path=path, image=matrix,
|
||||
upload_uri=upload_uri, max_image_history=max_image_history)
|
||||
|
||||
# Hack: replace single '%' with quoted value '%25',
|
||||
# allowing the link to be properly unquoted during http serving
|
||||
if url:
|
||||
url = url.replace('%', '%25')
|
||||
|
||||
self._report(ev)
|
||||
plotly_dict = create_image_plot(
|
||||
image_src=url,
|
||||
|
@ -30,6 +30,7 @@ from six.moves.queue import Queue, Empty
|
||||
from six.moves.urllib.parse import urlparse
|
||||
from six.moves.urllib.request import url2pathname
|
||||
|
||||
from .util import quote_url
|
||||
from ..backend_api.utils import get_http_session_with_retry
|
||||
from ..backend_config.bucket_config import S3BucketConfigurations, GSBucketConfigurations, AzureContainerConfigurations
|
||||
from ..config import config
|
||||
@ -547,6 +548,10 @@ class StorageHelper(object):
|
||||
if last_ex:
|
||||
raise last_ex
|
||||
|
||||
if self.scheme in _HttpDriver.schemes:
|
||||
# qoute link
|
||||
dest_path = quote_url(dest_path)
|
||||
|
||||
return dest_path
|
||||
|
||||
def upload(self, src_path, dest_path=None, extra=None, async_enable=False, cb=None, retries=1):
|
||||
|
@ -1,3 +1,4 @@
|
||||
from six.moves.urllib.parse import quote, urlparse, urlunparse
|
||||
import six
|
||||
import fnmatch
|
||||
|
||||
@ -16,3 +17,11 @@ def get_config_object_matcher(**patterns):
|
||||
if pat and fnmatch.fnmatch(value, pat):
|
||||
return True
|
||||
return _matcher
|
||||
|
||||
|
||||
def quote_url(url):
|
||||
parsed = urlparse(url)
|
||||
if parsed.scheme not in ('http', 'https'):
|
||||
return url
|
||||
parsed = parsed._replace(path=quote(parsed.path))
|
||||
return urlunparse(parsed)
|
||||
|
Loading…
Reference in New Issue
Block a user