66import datetime
77import os
88import sys
9+ import tempfile
910import textwrap
1011from pathlib import Path
1112from typing import TYPE_CHECKING
3233 reraise = True ,
3334)
3435
36+ VUMARK_TEMPLATE_SVG = textwrap .dedent (
37+ text = """\
38+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512">
39+ <rect x="0" y="0" width="512" height="512" fill="#ffffff" />
40+ <circle cx="256" cy="256" r="144" fill="#000000" />
41+ </svg>
42+ """ ,
43+ )
44+
3545
3646def _create_and_get_database_details (
3747 driver : "WebDriver" ,
@@ -87,6 +97,7 @@ def _generate_secrets_file_content(
8797 database_details : "DatabaseDict" ,
8898 vumark_details : "VuMarkDatabaseDict" ,
8999 inactive_database_details : "DatabaseDict" ,
100+ vumark_target_id : str ,
90101) -> str :
91102 """Generate the content of a secrets file."""
92103 return textwrap .dedent (
@@ -104,12 +115,65 @@ def _generate_secrets_file_content(
104115 INACTIVE_VUFORIA_CLIENT_SECRET_KEY={ inactive_database_details ["client_secret_key" ]}
105116
106117 VUMARK_VUFORIA_TARGET_MANAGER_DATABASE_NAME={ vumark_details ["database_name" ]}
118+ VUMARK_VUFORIA_TARGET_ID={ vumark_target_id }
107119 VUMARK_VUFORIA_SERVER_ACCESS_KEY={ vumark_details ["server_access_key" ]}
108120 VUMARK_VUFORIA_SERVER_SECRET_KEY={ vumark_details ["server_secret_key" ]}
109121 """ ,
110122 )
111123
112124
125+ def _create_and_get_vumark_target_id (
126+ driver : "WebDriver" ,
127+ vumark_database_name : str ,
128+ vumark_template_name : str ,
129+ ) -> str :
130+ """Upload a VuMark template and get its target ID."""
131+ with tempfile .TemporaryDirectory () as temporary_directory :
132+ svg_file_path = Path (temporary_directory ) / "template.svg"
133+ svg_file_path .write_text (
134+ data = VUMARK_TEMPLATE_SVG ,
135+ encoding = "utf-8" ,
136+ )
137+ upload_result = RETRY_ON_TIMEOUT (vws_web_tools .upload_vumark_template )(
138+ driver = driver ,
139+ database_name = vumark_database_name ,
140+ svg_file_path = svg_file_path ,
141+ template_name = vumark_template_name ,
142+ width = 100.0 ,
143+ )
144+
145+ if isinstance (upload_result , str ):
146+ return upload_result
147+
148+ if isinstance (upload_result , dict ):
149+ target_id = upload_result .get ("target_id" )
150+ if isinstance (target_id , str ):
151+ return target_id
152+
153+ target_id = getattr (upload_result , "target_id" , None )
154+ if isinstance (target_id , str ):
155+ return target_id
156+
157+ msg = (
158+ "Expected `upload_vumark_template` to return a target ID. "
159+ "Upgrade `vws-web-tools` to a version that returns one."
160+ )
161+ raise RuntimeError (msg )
162+
163+
164+ def _create_vuforia_resource_names () -> tuple [str , str , str , str ]:
165+ """Create names for Vuforia resources."""
166+ time = datetime .datetime .now (tz = datetime .UTC ).strftime (
167+ format = "%Y-%m-%d-%H-%M-%S" ,
168+ )
169+ return (
170+ f"my-license-{ time } " ,
171+ f"my-database-{ time } " ,
172+ f"my-vumark-database-{ time } " ,
173+ f"my-vumark-template-{ time } " ,
174+ )
175+
176+
113177def main () -> None :
114178 """Create secrets files."""
115179 email_address = os .environ ["VWS_EMAIL_ADDRESS" ]
@@ -146,12 +210,12 @@ def main() -> None:
146210 driver = vws_web_tools .create_chrome_driver ()
147211 file = files_to_create [- 1 ]
148212 sys .stdout .write (f"Creating database { file .name } \n " )
149- time = datetime . datetime . now ( tz = datetime . UTC ). strftime (
150- format = "%Y-%m-%d-%H-%M-%S" ,
151- )
152- license_name = f"my-license- { time } "
153- database_name = f"my-database- { time } "
154- vumark_database_name = f"my-vumark-database- { time } "
213+ (
214+ license_name ,
215+ database_name ,
216+ vumark_database_name ,
217+ vumark_template_name ,
218+ ) = _create_vuforia_resource_names ()
155219
156220 try :
157221 database_details = _create_and_get_database_details (
@@ -182,13 +246,28 @@ def main() -> None:
182246 driver = None
183247 continue
184248
249+ try :
250+ vumark_target_id = _create_and_get_vumark_target_id (
251+ driver = driver ,
252+ vumark_database_name = vumark_database_name ,
253+ vumark_template_name = vumark_template_name ,
254+ )
255+ except TimeoutException :
256+ sys .stderr .write (
257+ "Timed out waiting for VuMark template upload after retries\n "
258+ )
259+ driver .quit ()
260+ driver = None
261+ continue
262+
185263 driver .quit ()
186264 driver = None
187265
188266 file_contents = _generate_secrets_file_content (
189267 database_details = database_details ,
190268 vumark_details = vumark_details ,
191269 inactive_database_details = inactive_database_details ,
270+ vumark_target_id = vumark_target_id ,
192271 )
193272 file .write_text (data = file_contents )
194273 sys .stdout .write (f"Created database { file .name } \n " )
0 commit comments