I swear to the LMS gods that the following Python requests code was working just yesterday:
<SPAN class="keyword token">import</SPAN> requests<BR /><BR /><SPAN class="comment token"># Step 1: Tell Canvas you're going to upload a file</SPAN><BR /><BR />filename <SPAN class="operator token">=</SPAN> <SPAN class="string token">'test.svg'</SPAN><BR />folderPath <SPAN class="operator token">=</SPAN> <SPAN class="string token">'/myFolder/test'</SPAN><BR /><BR />size <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>getsize<SPAN class="punctuation token">(</SPAN>filename<SPAN class="punctuation token">)</SPAN><BR />data <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN> <SPAN class="string token">'name'</SPAN> <SPAN class="punctuation token">:</SPAN> filename<SPAN class="punctuation token">,</SPAN><BR /> <SPAN class="string token">'size'</SPAN> <SPAN class="punctuation token">:</SPAN> str<SPAN class="punctuation token">(</SPAN>size<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><BR /> <SPAN class="string token">'content_type'</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'image/svg+xml'</SPAN><SPAN class="punctuation token">,</SPAN><BR /> <SPAN class="string token">'parent_folder_path'</SPAN> <SPAN class="punctuation token">:</SPAN> folderPath <SPAN class="punctuation token">}</SPAN><BR /><BR />response <SPAN class="operator token">=</SPAN> requests<SPAN class="punctuation token">.</SPAN>post<SPAN class="punctuation token">(</SPAN>filesURL<SPAN class="punctuation token">,</SPAN> json<SPAN class="operator token">=</SPAN>data<SPAN class="punctuation token">,</SPAN> headers<SPAN class="operator token">=</SPAN>headers<SPAN class="punctuation token">)</SPAN><BR />response<SPAN class="punctuation token">.</SPAN>raise_for_status<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><BR />response <SPAN class="operator token">=</SPAN> response<SPAN class="punctuation token">.</SPAN>json<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><BR /><BR /><BR /><SPAN class="comment token"># Step 2: Upload the file</SPAN><BR /><BR />files <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>response<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'upload_params'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>items<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># Get all upload params</SPAN><BR />file_content <SPAN class="operator token">=</SPAN> open<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'svg/'</SPAN><SPAN class="operator token">+</SPAN>filename<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'rb'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>read<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># Read in file data </SPAN><BR />files<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>u<SPAN class="string token">'file'</SPAN><SPAN class="punctuation token">,</SPAN> file_content<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># Add file data to payload</SPAN><BR />response <SPAN class="operator token">=</SPAN> requests<SPAN class="punctuation token">.</SPAN>post<SPAN class="punctuation token">(</SPAN>response<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'upload_url'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> files<SPAN class="operator token">=</SPAN>files<SPAN class="punctuation token">)</SPAN><BR />response<SPAN class="punctuation token">.</SPAN>raise_for_status<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><BR />id <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">(</SPAN>response<SPAN class="punctuation token">.</SPAN>json<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'id'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>However, in step 1, when I get the first response, it looks nothing like it used to or what's in the documentation:
<SPAN class="punctuation token">{</SPAN><BR /> <SPAN class="string token">'file_param'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'file'</SPAN><SPAN class="punctuation token">,</SPAN> <BR /> <SPAN class="string token">'progress'</SPAN><SPAN class="punctuation token">:</SPAN> None<SPAN class="punctuation token">,</SPAN> <BR /> <SPAN class="string token">'upload_url'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'https://inst-fs-iad-prod.inscloudgate.net/files?token=<crazy long token>'</SPAN><SPAN class="punctuation token">,</SPAN> <BR /> <SPAN class="string token">'upload_params'</SPAN><SPAN class="punctuation token">:</SPAN> <BR /> <SPAN class="punctuation token">{</SPAN><BR /> <SPAN class="string token">'filename'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'c02s04n02a.svg'</SPAN><SPAN class="punctuation token">,</SPAN> <BR /> <SPAN class="string token">'content_type'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'image/svg+xml'</SPAN><BR /> <SPAN class="punctuation token">}</SPAN><BR /><SPAN class="punctuation token">}</SPAN><BR /><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>The code produces the following error:
500 Server Error: Internal Server Error for url: <A href="https://inst-fs-iad-prod.inscloudgate.net/files?token=<blah" target="test_blank" rel="nofollow noopener noreferrer">https://inst-fs-iad-prod.inscloudgate.net/files?token=<blah</A> etc.><SPAN class="line-numbers-rows"><SPAN></SPAN></SPAN>
Am I missing something? Has a change of file repository occurred from AWS?
Would appreciate some help!
Thanks