@@ -295,52 +295,7 @@ def get_users_projects(request, username: str):
295295 return ProjectList (projects = projects )
296296
297297
298- @api .get (
299- "/projects/{username}/{projectname}/thumbnail" ,
300- description = "returns a base64 encoded image string" ,
301- )
302- def get_project_thumbnail (request , username : str , projectname : str ):
303- """
304- Get a project's thumbnail.
305- """
306- project = Project .objects .get (user__username = username , name = projectname )
307- if (
308- request .user .is_authenticated and request .user .username == username
309- ) or project .is_public :
310- with open (f"{ settings .MEDIA_ROOT } /{ project .thumbnail } " , "rb" ) as image_file :
311- encoded_thumbnail = base64 .b64encode (image_file .read ()).decode ("utf-8" )
312- return HttpResponse (
313- f"data:image/png;base64,{ encoded_thumbnail } " , content_type = "text/html"
314- )
315- else :
316- raise HttpError (401 , "Unauthorized. Note that this project is not public." )
317-
318-
319- @api .get (
320- "/projects/{username}/{projectname}" ,
321- description = "returns XML project file" ,
322- )
323- def get_project (request , username : str , projectname : str , updatingnotes : bool = True ):
324- """
325- Load a project.
326- """
327- project = Project .objects .get (user__username = username , name = projectname )
328- if (
329- request .user .is_authenticated and request .user .username == username
330- ) or project .is_public :
331- project .views = project .views + 1
332- project .save (no_timestamp = True )
333- with open (f"{ settings .MEDIA_ROOT } /{ project .project_file } " , "r" ) as project_file :
334- contents = project_file .read ()
335- return HttpResponse (
336- f'<snapdata>{ contents } <media name="{ project .name } " app="Snap! 4.2, http://snap.berkeley.edu" version="1"/></snapdata>' ,
337- content_type = "text/xml" ,
338- )
339- else :
340- raise HttpError (401 , "Unauthorized. Note that this project is not public." )
341-
342-
343- @api .get ("/projects/{username}/{projectname}/versions" )
298+ @api .get ("/projects/{username}/{path:projectname}/versions" )
344299def get_project_versions (request , username : str , projectname : str ):
345300 """
346301 Get a Project's Versions (returns and empty array for now)
@@ -350,7 +305,7 @@ def get_project_versions(request, username: str, projectname: str):
350305
351306
352307@api .post (
353- "/projects/{username}/{projectname}" ,
308+ "/projects/{username}/{path: projectname}" ,
354309 description = "saves a project" ,
355310)
356311def save_project (request , username : str , projectname : str ):
@@ -431,7 +386,7 @@ def save_project(request, username: str, projectname: str):
431386 return Message (message = f"project { projectname } saved" )
432387
433388
434- @api .post ("/projects/{username}/{projectname}/metadata" )
389+ @api .post ("/projects/{username}/{path: projectname}/metadata" )
435390def set_project_visibility (
436391 request ,
437392 username : str ,
@@ -463,7 +418,28 @@ def set_project_visibility(
463418 raise HttpError (401 , "Unauthorized. Note that this project is not public." )
464419
465420
466- @api .delete ("/projects/{username}/{projectname}" )
421+ @api .get (
422+ "/projects/{username}/{path:projectname}/thumbnail" ,
423+ description = "returns a base64 encoded image string" ,
424+ )
425+ def get_project_thumbnail (request , username : str , projectname : str ):
426+ """
427+ Get a project's thumbnail.
428+ """
429+ project = Project .objects .get (user__username = username , name = projectname )
430+ if (
431+ request .user .is_authenticated and request .user .username == username
432+ ) or project .is_public :
433+ with open (f"{ settings .MEDIA_ROOT } /{ project .thumbnail } " , "rb" ) as image_file :
434+ encoded_thumbnail = base64 .b64encode (image_file .read ()).decode ("utf-8" )
435+ return HttpResponse (
436+ f"data:image/png;base64,{ encoded_thumbnail } " , content_type = "text/html"
437+ )
438+ else :
439+ raise HttpError (401 , "Unauthorized. Note that this project is not public." )
440+
441+
442+ @api .delete ("/projects/{username}/{path:projectname}" )
467443def delete_project (request , username : str , projectname : str ):
468444 """
469445 Delete a Project
@@ -478,3 +454,28 @@ def delete_project(request, username: str, projectname: str):
478454 }
479455 else :
480456 raise HttpError (401 , "Unauthorized. Note that this project is not public." )
457+
458+
459+ @api .get (
460+ "/projects/{username}/{path:projectname}" ,
461+ description = "returns XML project file" ,
462+ )
463+ def get_project (request , username : str , projectname : str , updatingnotes : bool = True ):
464+ """
465+ Load a project.
466+ """
467+ project = Project .objects .get (user__username = username , name = projectname )
468+ if (
469+ request .user .is_authenticated and request .user .username == username
470+ ) or project .is_public :
471+ project .views = project .views + 1
472+ project .save (no_timestamp = True )
473+ with open (f"{ settings .MEDIA_ROOT } /{ project .project_file } " , "r" ) as project_file :
474+ contents = project_file .read ()
475+ return HttpResponse (
476+ f'<snapdata>{ contents } <media name="{ project .name } " app="Snap! 4.2, http://snap.berkeley.edu" version="1"/></snapdata>' ,
477+ content_type = "text/xml" ,
478+ )
479+ else :
480+ raise HttpError (401 , "Unauthorized. Note that this project is not public." )
481+
0 commit comments