diff --git a/admin/create_secrets_files.py b/admin/create_secrets_files.py
index 5582a4616..13d2310d0 100644
--- a/admin/create_secrets_files.py
+++ b/admin/create_secrets_files.py
@@ -19,6 +19,11 @@
from vws_web_tools import DatabaseDict, VuMarkDatabaseDict
+VUMARK_TEMPLATE_SVG_FILE_PATH = Path(__file__).with_name(
+ name="vumark_template.svg",
+)
+
+
def _create_and_get_database_details(
driver: "WebDriver",
email_address: str,
@@ -73,6 +78,7 @@ def _generate_secrets_file_content(
database_details: "DatabaseDict",
vumark_details: "VuMarkDatabaseDict",
inactive_database_details: "DatabaseDict",
+ vumark_target_id: str,
) -> str:
"""Generate the content of a secrets file."""
return textwrap.dedent(
@@ -90,12 +96,46 @@ def _generate_secrets_file_content(
INACTIVE_VUFORIA_CLIENT_SECRET_KEY={inactive_database_details["client_secret_key"]}
VUMARK_VUFORIA_TARGET_MANAGER_DATABASE_NAME={vumark_details["database_name"]}
+ VUMARK_VUFORIA_TARGET_ID={vumark_target_id}
VUMARK_VUFORIA_SERVER_ACCESS_KEY={vumark_details["server_access_key"]}
VUMARK_VUFORIA_SERVER_SECRET_KEY={vumark_details["server_secret_key"]}
""",
)
+def _create_and_get_vumark_target_id(
+ driver: "WebDriver",
+ vumark_database_name: str,
+ vumark_template_name: str,
+) -> str:
+ """Upload a VuMark template and get its target ID."""
+ vws_web_tools.upload_vumark_template(
+ driver=driver,
+ database_name=vumark_database_name,
+ svg_file_path=VUMARK_TEMPLATE_SVG_FILE_PATH,
+ template_name=vumark_template_name,
+ width=100.0,
+ )
+ return vws_web_tools.get_vumark_target_id(
+ driver=driver,
+ database_name=vumark_database_name,
+ target_name=vumark_template_name,
+ )
+
+
+def _create_vuforia_resource_names() -> tuple[str, str, str, str]:
+ """Create names for Vuforia resources."""
+ time = datetime.datetime.now(tz=datetime.UTC).strftime(
+ format="%Y-%m-%d-%H-%M-%S",
+ )
+ return (
+ f"my-license-{time}",
+ f"my-database-{time}",
+ f"my-vumark-database-{time}",
+ f"my-vumark-template-{time}",
+ )
+
+
def main() -> None:
"""Create secrets files."""
email_address = os.environ["VWS_EMAIL_ADDRESS"]
@@ -132,12 +172,12 @@ def main() -> None:
driver = vws_web_tools.create_chrome_driver()
file = files_to_create[-1]
sys.stdout.write(f"Creating database {file.name}\n")
- time = datetime.datetime.now(tz=datetime.UTC).strftime(
- format="%Y-%m-%d-%H-%M-%S",
- )
- license_name = f"my-license-{time}"
- database_name = f"my-database-{time}"
- vumark_database_name = f"my-vumark-database-{time}"
+ (
+ license_name,
+ database_name,
+ vumark_database_name,
+ vumark_template_name,
+ ) = _create_vuforia_resource_names()
try:
database_details = _create_and_get_database_details(
@@ -168,6 +208,20 @@ def main() -> None:
driver = None
continue
+ try:
+ vumark_target_id = _create_and_get_vumark_target_id(
+ driver=driver,
+ vumark_database_name=vumark_database_name,
+ vumark_template_name=vumark_template_name,
+ )
+ except TimeoutException:
+ sys.stderr.write(
+ "Timed out waiting for VuMark template upload after retries\n"
+ )
+ driver.quit()
+ driver = None
+ continue
+
driver.quit()
driver = None
@@ -175,6 +229,7 @@ def main() -> None:
database_details=database_details,
vumark_details=vumark_details,
inactive_database_details=inactive_database_details,
+ vumark_target_id=vumark_target_id,
)
file.write_text(data=file_contents)
sys.stdout.write(f"Created database {file.name}\n")
diff --git a/admin/vumark_template.svg b/admin/vumark_template.svg
new file mode 100644
index 000000000..3d3c3d89e
--- /dev/null
+++ b/admin/vumark_template.svg
@@ -0,0 +1,4 @@
+
diff --git a/pyproject.toml b/pyproject.toml
index d0c04be1a..83b732734 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -104,7 +104,7 @@ optional-dependencies.dev = [
"vulture==2.14",
"vws-python==2026.2.15",
"vws-test-fixtures==2023.3.5",
- "vws-web-tools==2026.2.17",
+ "vws-web-tools==2026.2.17.1",
"yamlfix==1.19.1",
"zizmor==1.22.0",
]
diff --git a/vuforia_secrets.env.example b/vuforia_secrets.env.example
index 5e843a117..ea7273354 100644
--- a/vuforia_secrets.env.example
+++ b/vuforia_secrets.env.example
@@ -15,6 +15,7 @@ INACTIVE_VUFORIA_CLIENT_ACCESS_KEY=
INACTIVE_VUFORIA_CLIENT_SECRET_KEY=
VUMARK_VUFORIA_TARGET_MANAGER_DATABASE_NAME=
+VUMARK_VUFORIA_TARGET_ID=
VUMARK_VUFORIA_SERVER_ACCESS_KEY=
VUMARK_VUFORIA_SERVER_SECRET_KEY=