Skip to content

Commit

Permalink
Merge branch 'release_24.1' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
nsoranzo committed Jul 8, 2024
2 parents 0beacf5 + 49f820d commit 3216bc0
Show file tree
Hide file tree
Showing 12 changed files with 59 additions and 44 deletions.
42 changes: 22 additions & 20 deletions lib/galaxy/datatypes/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -484,16 +484,17 @@ def _serve_file_download(self, headers, data, trans, to_ext, file_size, **kwd):

def _serve_binary_file_contents_as_text(self, trans, data, headers, file_size, max_peek_size):
headers["content-type"] = "text/html"
return (
trans.fill_template_mako(
"/dataset/binary_file.mako",
data=data,
file_contents=open(data.get_file_name(), "rb").read(max_peek_size),
file_size=util.nice_size(file_size),
truncated=file_size > max_peek_size,
),
headers,
)
with open(data.get_file_name(), "rb") as fh:
return (
trans.fill_template_mako(
"/dataset/binary_file.mako",
data=data,
file_contents=fh.read(max_peek_size),
file_size=util.nice_size(file_size),
truncated=file_size > max_peek_size,
),
headers,
)

def _serve_file_contents(self, trans, data, headers, preview, file_size, max_peek_size):
from galaxy.datatypes import images
Expand All @@ -502,16 +503,17 @@ def _serve_file_contents(self, trans, data, headers, preview, file_size, max_pee
if not preview or isinstance(data.datatype, images.Image) or file_size < max_peek_size:
return self._yield_user_file_content(trans, data, data.get_file_name(), headers), headers

# preview large text file
headers["content-type"] = "text/html"
return (
trans.fill_template_mako(
"/dataset/large_file.mako",
truncated_data=open(data.get_file_name(), "rb").read(max_peek_size),
data=data,
),
headers,
)
with compression_utils.get_fileobj(data.get_file_name(), "rb") as fh:
# preview large text file
headers["content-type"] = "text/html"
return (
trans.fill_template_mako(
"/dataset/large_file.mako",
truncated_data=fh.read(max_peek_size),
data=data,
),
headers,
)

def display_data(
self,
Expand Down
17 changes: 9 additions & 8 deletions lib/galaxy/datatypes/tabular.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,15 @@ def display_data(
return open(dataset.get_file_name(), mode="rb"), headers
else:
headers["content-type"] = "text/html"
return (
trans.fill_template_mako(
"/dataset/large_file.mako",
truncated_data=open(dataset.get_file_name()).read(max_peek_size),
data=dataset,
),
headers,
)
with compression_utils.get_fileobj(dataset.get_file_name(), "rb") as fh:
return (
trans.fill_template_mako(
"/dataset/large_file.mako",
truncated_data=fh.read(max_peek_size),
data=dataset,
),
headers,
)
else:
column_names = "null"
if dataset.metadata.column_names:
Expand Down
5 changes: 4 additions & 1 deletion lib/galaxy/managers/hdas.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,10 @@ def text_data(self, hda, preview=True):

truncated = preview and os.stat(file_path).st_size > MAX_PEEK_SIZE
with get_fileobj(file_path) as fh:
hda_data = fh.read(MAX_PEEK_SIZE)
try:
hda_data = fh.read(MAX_PEEK_SIZE)
except UnicodeDecodeError:
raise exceptions.RequestParameterInvalidException("Cannot generate text preview for dataset.")
return truncated, hda_data

# .... annotatable
Expand Down
5 changes: 3 additions & 2 deletions lib/galaxy/managers/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -611,8 +611,9 @@ def send_reset_email(self, trans, payload, **kwd):
except Exception as e:
log.debug(body)
return f"Failed to submit email. Please contact the administrator: {util.unicodify(e)}"
else:
return "Failed to produce password reset token. User not found."
if not reset_user:
log.warning(f"Failed to produce password reset token. User with email '{email}' not found.")
return None

def get_reset_token(self, trans, email):
reset_user = get_user_by_email(trans.sa_session, email, self.app.model.User)
Expand Down
11 changes: 6 additions & 5 deletions lib/galaxy/tool_util/biotools/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,13 @@ def __init__(self, cache=None):

def _raw_get_metadata(self, biotools_reference) -> Optional[str]:
api_url = f"https://bio.tools/api/tool/{biotools_reference}?format=json"
req = requests.get(api_url, timeout=DEFAULT_SOCKET_TIMEOUT)
req.encoding = req.apparent_encoding
if req.status_code == 404:
return None
else:
try:
req = requests.get(api_url, timeout=DEFAULT_SOCKET_TIMEOUT)
req.raise_for_status()
req.encoding = req.apparent_encoding
return req.text
except Exception:
return None

def get_biotools_metadata(self, biotools_reference: str) -> Optional[BiotoolsEntry]:
createfunc = functools.partial(self._raw_get_metadata, biotools_reference)
Expand Down
3 changes: 2 additions & 1 deletion lib/galaxy/tools/parameters/basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -2053,7 +2053,8 @@ def src_id_to_item(
item = sa_session.get(src_to_class[value["src"]], decoded_id)
except KeyError:
raise ValueError(f"Unknown input source {value['src']} passed to job submission API.")
assert item
if not item:
raise ValueError("Invalid input id passed to job submission API.")
item.extra_params = {k: v for k, v in value.items() if k not in ("src", "id")}
return item

Expand Down
9 changes: 7 additions & 2 deletions lib/galaxy/web/framework/middleware/statsd.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,13 @@ def __call__(self, environ, start_response):
start_time = time.time()
req = self.application(environ, start_response)
dt = int((time.time() - start_time) * 1000)
page = environ.get("controller_action_key", None) or environ.get("PATH_INFO", "NOPATH").strip("/").replace(
"/", "."
page = (
environ.get("controller_action_key", None)
or environ.get("PATH_INFO", "NOPATH")
.strip("/")
.replace("/", ".")
.encode("ascii", errors="replace")
.decode()
)
self.galaxy_stasd_client.timing(page, dt)
try:
Expand Down
2 changes: 1 addition & 1 deletion lib/galaxy/webapps/galaxy/controllers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ def reset_password(self, trans, payload=None, **kwd):
payload = payload or {}
if message := self.user_manager.send_reset_email(trans, payload):
return self.message_exception(trans, message)
return {"message": "Reset link has been sent to your email."}
return {"message": "If an account exists for this email address a confirmation email will be dispatched."}

def __get_redirect_url(self, redirect):
if not redirect or redirect == "None":
Expand Down
3 changes: 2 additions & 1 deletion lib/galaxy/workflow/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,8 @@ def get_all_outputs(self, data_only=False):
# This can happen when importing workflows with missing tools.
# We can't raise an exception here, as that would prevent loading
# the workflow.
log.error(
# This is also listed when opening such a workflow in the workflow editor.
log.warning(
f"Workflow output '{workflow_output['output_name']}' defined, but not listed among data outputs"
)
continue
Expand Down
2 changes: 1 addition & 1 deletion test/integration/objectstore/_purged_handling.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def purge_while_job_running(dataset_populator: DatasetPopulator, extra_sleep=0):
response = dataset_populator.run_tool(
"all_output_types",
inputs={
"sleep_param": 5,
"sleep_param": 5 + extra_sleep,
},
history_id=history_id,
)
Expand Down
2 changes: 1 addition & 1 deletion test/integration/test_extended_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def test_fetch_data_library(self):
def test_purge_while_job_running(self):
# pass extra_sleep, since templating the command line will fail if the output
# is deleted before remote_tool_eval runs.
purge_while_job_running(self.dataset_populator, extra_sleep=4)
purge_while_job_running(self.dataset_populator, extra_sleep=10)


class TestExtendedMetadataDeferredIntegration(integration_util.IntegrationTestCase):
Expand Down
2 changes: 1 addition & 1 deletion test/unit/app/managers/test_UserManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ def test_reset_email_user_deleted(self):
self.user_manager.delete(user)
assert user.deleted is True
message = self.user_manager.send_reset_email(self.trans, {"email": user_email})
assert message == "Failed to produce password reset token. User not found."
assert message is None

def test_get_user_by_identity(self):
# return None if username/email not found
Expand Down

0 comments on commit 3216bc0

Please sign in to comment.