<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.s2
        {mso-style-name:s2;}
span.EmailStyle26
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Thanks Mark!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This looks exactly like what I need. I’ll try it out and let you know.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks again!<o:p></o:p></p>
<p class="MsoNormal">Bennett<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> archivesspace_users_group-bounces@lyralists.lyrasis.org <archivesspace_users_group-bounces@lyralists.lyrasis.org>
<b>On Behalf Of </b>Custer, Mark<br>
<b>Sent:</b> Thursday, October 1, 2020 12:01 PM<br>
<b>To:</b> Archivesspace Users Group <archivesspace_users_group@lyralists.lyrasis.org><br>
<b>Subject:</b> Re: [Archivesspace_Users_Group] Trouble With API Endpoint ‘create a new job and post input files’<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="line-height:12.0pt;background:#FF6666"><b><span style="font-size:10.0pt;color:white">  [EXTERNAL]</span><o:p></o:p></b></p>
<div>
<p class="MsoNormal">Bennet,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Not spammed out, so no worries!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In case it helps, a couple years ago I was able to get a hokey script set up (with help from others – thanks again, Dallas and Dave!) to download MARCXML files from OCLC and post those to ArchivesSpace using that endpoint.  Here’s a snippet
 that shows how you need to format the payload (though the filenames don’t matter, I don’t think): 
<a href="https://github.com/archivesspace/api-training/blob/master/getMARCfromOCLCandPOSTtoASpace.py#L42-L56">
https://github.com/archivesspace/api-training/blob/master/getMARCfromOCLCandPOSTtoASpace.py#L42-L56</a>  (the important part is adding the files to the “files” parameter as an
<b>array</b> of file locations, even if you’re just posting one file, so you’ll need to change how your file variable is assigned, I think)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Mark<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> <a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org">
archivesspace_users_group-bounces@lyralists.lyrasis.org</a> [<a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org">mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org</a>]
<b>On Behalf Of </b>Bennett G Poulin<br>
<b>Sent:</b> Thursday, 01 October, 2020 1:46 PM<br>
<b>To:</b> <a href="mailto:archivesspace_users_group@lyralists.lyrasis.org">archivesspace_users_group@lyralists.lyrasis.org</a><br>
<b>Subject:</b> [Archivesspace_Users_Group] Trouble With API Endpoint ‘create a new job and post input files’<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#C00000">(My apologies if this has been spammed to you. I have been having trouble with the listserv as I am new.)<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hello all,<o:p></o:p></p>
<p class="MsoNormal">We are new to the community and started playing around with the API in Python to help familiarize ourselves with it. I can connect and authenticate just fine, even call several of the endpoints without issue, but there is one that I cannot
 seem to figure out myself. The endpoint I’m trying to connect to is ‘<i>create a new job and post input files’</i> and is documented
<a href="https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Farchivesspace.github.io%2Farchivesspace%2Fapi%2F%23create-a-new-job-and-post-input-files&data=02%7C01%7Cmark.custer%40yale.edu%7C79d78b55fd0b42ff014408d86631e8f2%7Cdd8cbebb21394df8b4114e3e87abeb5c%7C0%7C1%7C637371711847926193&sdata=CF2JOyNHVb3YNZXrRym7B%2FfnLvPr0mI3LTS2TjUq0z4%3D&reserved=0">
here</a>. I’m trying to use this endpoint to import EAD XML file(s) into a repository. I can use the
<a href="https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Farchivesspace.github.io%2Farchivesspace%2Fapi%2F%23create-a-new-job&data=02%7C01%7Cmark.custer%40yale.edu%7C79d78b55fd0b42ff014408d86631e8f2%7Cdd8cbebb21394df8b4114e3e87abeb5c%7C0%7C1%7C637371711847926193&sdata=PgP%2Fc%2FyUdVOOI4XZ81i5IjEIMBFUlkySJ1ybiEwmymU%3D&reserved=0">
create jobs</a> endpoint without error, but there are no files, just filenames. I have tried looking through the previous threads here, but it is entirely possible that I missed something.<o:p></o:p></p>
<p class="MsoNormal"><strong><span style="font-family:"Calibri",sans-serif">The Problem:<o:p></o:p></span></strong></p>
<p class="MsoNormal">The problem that I am having is with the encoding for the file(s) that I send along with the post request. I’m bouncing between two errors ‘(RangeError) exceeded available parameter key space’ when I encode with Base64, and ‘(InvalidParameterError)
 invalid %-encoding’ when I do not. Base64 will bloat the data by 33%, but I’m only trying to send one file at the moment. Is there another encoding that’s preferred, or another way to get the files to the post request?<o:p></o:p></p>
<p class="MsoNormal"><strong><span style="font-family:"Calibri",sans-serif">My Current Execution:<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#C586C0">with</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#DCDCAA">open</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">(os.path.join(repoDir, </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"filename.xml"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">), </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"r"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">) </span><span style="font-size:10.5pt;font-family:Consolas;color:#C586C0">as</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4"> f1:<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    f1_data = f1.read()<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    f1_serialized = base64.b64encode(f1_data.encode())<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">jobs = json.dumps({<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"jsonmodel_type"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">:</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"job"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">, <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"status"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">:</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"queued"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">, <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"job"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">: {<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">        </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"jsonmodel_type"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">:</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"import_job"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">,<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">        </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"import_type"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">:</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"ead_xml"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    },<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"files"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">: { </span><span style="font-size:10.5pt;font-family:Consolas;color:#6A9955">#Omit files for jobs URI</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">        </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"filename.xml"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">: f1_serialized.decode(</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">'utf-8'</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">)<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">})<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">createJobs = client.post(</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">'/repositories/4/jobs_with_files'</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">, jobs)<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><strong><span style="font-family:"Calibri",sans-serif">What I’ve tried:<o:p></o:p></span></strong></p>
<p class="MsoNormal">I’ve tried changing the file open to “rb” and playing with the types of Base64 encoding methods.<o:p></o:p></p>
<p class="MsoNormal">I’ve tried adding the files as the third parameter as I’ve seen in other python API requests.<o:p></o:p></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#9CDCFE">file</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4"> = {</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"nmu-lmssking.xml"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">: </span><span style="font-size:10.5pt;font-family:Consolas;color:#DCDCAA">open</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">(os.path.join(repoDir, </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"filename.xml"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">), </span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">"rb"</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">)}<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1E1E1E"><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">createJobs = client.post(</span><span style="font-size:10.5pt;font-family:Consolas;color:#CE9178">'/repositories/4/jobs_with_files'</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">, </span><span style="font-size:10.5pt;font-family:Consolas;color:#9CDCFE">json</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">=jobs, </span><span style="font-size:10.5pt;font-family:Consolas;color:#9CDCFE">files</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">=</span><span style="font-size:10.5pt;font-family:Consolas;color:#9CDCFE">file</span><span style="font-size:10.5pt;font-family:Consolas;color:#D4D4D4">)<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have tried not encoding the file, but then I get the second error message mentioned above.
<o:p></o:p></p>
<p class="MsoNormal">I have tried playing with the various file states of read, byte, and encoded data.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><strong><span style="font-family:"Calibri",sans-serif">Other Relevant Information:<o:p></o:p></span></strong></p>
<p class="MsoNormal">I’m using ArchivesSpace v2.7.1.<o:p></o:p></p>
<p class="MsoNormal"><strong><span style="font-family:"Calibri",sans-serif">AS Documentation Image:<o:p></o:p></span></strong></p>
<p class="MsoNormal"><img border="0" width="624" height="53" style="width:6.5in;height:.552in" id="Picture_x0020_1" src="cid:image001.png@01D697EB.0923D3E0"><o:p></o:p></p>
<p class="MsoNormal"><strong><span style="font-family:"Calibri",sans-serif">AS Documentation Text:<o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">curl -H "X-ArchivesSpace-Session: $SESSION" \<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">  -d 'Example Missing' \<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">  "<a href="http://localhost:8089/repositories/2/jobs_with_files?job=%7b">http://localhost:8089/repositories/2/jobs_with_files?job={</a>"jsonmodel_type"=>"job", "status"=>"queued",
 "job"=>{"jsonmodel_type"=>"import_job", "filenames"=>["QJEOU", "PUDYO", "GD44820703", "UK255111B"], "import_type"=>"eac_xml"}}&files=UploadFile"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><b><span style="font-size:8.0pt;font-family:"Times New Roman",serif">Endpoint</span></b><span style="font-size:8.0pt;font-family:"Times New Roman",serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:6.0pt;font-family:"Courier New"">[:POST] /repositories/:repo_id/jobs_with_files</span><span style="font-size:8.0pt;font-family:"Times New Roman",serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><b><span style="font-size:8.0pt;font-family:"Times New Roman",serif">Description</span></b><span style="font-size:8.0pt;font-family:"Times New Roman",serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:8.0pt;font-family:"Times New Roman",serif">Create a new job and post input files<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><b><span style="font-size:8.0pt;font-family:"Times New Roman",serif">Parameters</span></b><span style="font-size:8.0pt;font-family:"Times New Roman",serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:8.0pt;font-family:"Times New Roman",serif">JSONModel(:job) job –
<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:8.0pt;font-family:"Times New Roman",serif">[RESTHelpers::UploadFile] files –
<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:8.0pt;font-family:"Times New Roman",serif">Integer repo_id – The Repository ID – The Repository must exist<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><b><span style="font-size:8.0pt;font-family:"Times New Roman",serif">Returns</span></b><span style="font-size:8.0pt;font-family:"Times New Roman",serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:8.0pt;font-family:"Times New Roman",serif">200 – {:status => “Updated”, :id => (id of updated object)}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:6.0pt"><span style="font-size:8.0pt;font-family:"Times New Roman",serif"><o:p> </o:p></span></p>
<p class="MsoNormal">AS Ruby JSON Ruby Schema Files for Job and Import Job attached:<o:p></o:p></p>
<p class="MsoNormal" style="margin-top:6.0pt"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>