This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git
The following commit(s) were added to refs/heads/main by this push:
new 4b87321 Remove the redundant form to create a directory
4b87321 is described below
commit 4b8732175f1b63fb19cf2f8381635449a04d4fea
Author: Sean B. Palmer <[email protected]>
AuthorDate: Tue May 27 20:16:15 2025 +0100
Remove the redundant form to create a directory
---
atr/routes/finish.py | 94 +-------------------------------------
atr/templates/finish-selected.html | 15 ------
2 files changed, 1 insertion(+), 108 deletions(-)
diff --git a/atr/routes/finish.py b/atr/routes/finish.py
index 6475ff8..02da3fa 100644
--- a/atr/routes/finish.py
+++ b/atr/routes/finish.py
@@ -40,23 +40,6 @@ SPECIAL_SUFFIXES: Final[frozenset[str]] = frozenset({".asc",
".sha256", ".sha512
_LOGGER: Final = logging.getLogger(__name__)
-class CreateDirectoryForm(util.QuartFormTyped):
- """Form for creating a new directory within a preview revision."""
-
- new_directory_name = wtforms.StringField(
- "New directory name",
- validators=[
- wtforms.validators.InputRequired(),
- wtforms.validators.Regexp(
-
r"^(?!.*\.\.)(?!^\.$)(?!^/)(?!.*/$)[a-zA-Z0-9_-]+(?:/[a-zA-Z0-9_-]+)*$",
- message="Invalid characters or structure. Use a-z, 0-9, _, -."
- " No leading or trailing slashes, and no dots. No '..'
segments.",
- ),
- ],
- )
- submit = wtforms.SubmitField("Create directory")
-
-
class MoveFileForm(util.QuartFormTyped):
"""Form for moving one or more files within a preview revision."""
@@ -113,9 +96,6 @@ async def selected(
move_form = await MoveFileForm.create_form(
data=formdata if (formdata and formdata.get("form_action") !=
"create_dir") else None
)
- create_dir_form = await CreateDirectoryForm.create_form(
- data=formdata if (formdata and formdata.get("form_action") ==
"create_dir") else None
- )
# Populate choices dynamically for both GET and POST
move_form.source_files.choices = sorted([(str(p), str(p)) for p in
source_files_rel])
@@ -123,9 +103,7 @@ async def selected(
can_move = (len(target_dirs) > 1) and (len(source_files_rel) > 0)
if formdata:
- result = await _process_formdata(
- formdata, session, project_name, version_name, create_dir_form,
move_form, can_move
- )
+ result = await _process_formdata(formdata, session, project_name,
version_name, move_form, can_move)
if result is not None:
return result
@@ -141,75 +119,17 @@ async def selected(
release=release,
source_files=sorted(source_files_rel),
form=move_form,
- create_dir_form=create_dir_form,
can_move=can_move,
user_ssh_keys=user_ssh_keys,
target_dirs=sorted(list(target_dirs)),
)
-async def _create_directory_in_revision(
- new_dir_rel: pathlib.Path,
- session: routes.CommitterSession,
- project_name: str,
- version_name: str,
- wants_json: bool,
-) -> tuple[quart_response.Response, int] | response.Response:
- try:
- description = "Directory creation through web interface"
- async with revision.create_and_manage(
- project_name, version_name, session.uid, description=description
- ) as creating:
- target_path = creating.interim_path / new_dir_rel
- # Path traversal check
- try:
- resolved_target_path = target_path.resolve()
-
resolved_target_path.relative_to(creating.interim_path.resolve())
- await aiofiles.os.makedirs(target_path, exist_ok=False)
- except ValueError:
- creating.failed = True
- # Path traversal attempt detected
- return await _respond(
- session, project_name, version_name, wants_json, False,
"Invalid directory path.", 400
- )
- except FileExistsError:
- creating.failed = True
- return await _respond(
- session,
- project_name,
- version_name,
- wants_json,
- False,
- f"Directory or file '{new_dir_rel}' already exists.",
- 400,
- )
- return await _respond(
- session,
- project_name,
- version_name,
- wants_json,
- True,
- f"Created directory '{new_dir_rel}'.",
- 201 if wants_json else 200,
- )
- except OSError as e:
- _LOGGER.exception("Error creating directory in new revision")
- return await _respond(
- session, project_name, version_name, wants_json, False, f"Error
creating directory: {e}", 500
- )
- except Exception as e:
- _LOGGER.exception("Unexpected error during directory creation")
- return await _respond(
- session, project_name, version_name, wants_json, False, f"An
unexpected error occurred: {e!s}", 500
- )
-
-
async def _process_formdata(
formdata: datastructures.MultiDict,
session: routes.CommitterSession,
project_name: str,
version_name: str,
- create_dir_form: CreateDirectoryForm,
move_form: MoveFileForm,
can_move: bool,
) -> tuple[quart_response.Response, int] | response.Response | str | None:
@@ -247,18 +167,6 @@ async def _process_formdata(
source_files_rel, target_dir_rel, session, project_name,
version_name, wants_json
)
- elif form_action == "create_dir":
- if await create_dir_form.validate_on_submit():
- new_dir_name = create_dir_form.new_directory_name.data
- if new_dir_name:
- return await _create_directory_in_revision(
- pathlib.Path(new_dir_name),
- session,
- project_name,
- version_name,
-
quart.request.accept_mimetypes.best_match(["application/json", "text/html"]) ==
"application/json",
- )
-
elif ((form_action != "create_dir") or (form_action is None)) and can_move:
return await _move_file(move_form, session, project_name, version_name)
return None
diff --git a/atr/templates/finish-selected.html
b/atr/templates/finish-selected.html
index c330b29..5a56731 100644
--- a/atr/templates/finish-selected.html
+++ b/atr/templates/finish-selected.html
@@ -176,21 +176,6 @@
File moving is disabled as all files are currently in the same directory
or the revision is empty.
</div>
{% endif %}
-
- <h2>Manage directories</h2>
- <h3>Create a new directory</h3>
- <form method="post">
- {{ create_dir_form.hidden_tag() }}
- <div class="d-flex">
- {{ create_dir_form.new_directory_name(class="form-control",
placeholder="New directory name") }}
- <button type="submit"
- class="btn btn-primary ms-2 text-nowrap"
- name="form_action"
- value="create_dir">Create directory</button>
- </div>
- {{ forms.errors(create_dir_form.new_directory_name, classes="text-danger
small mt-1") }}
- </form>
-
<!--
TODO: Add a form to delete a directory.
<h3>Delete a directory</h3>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]