<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;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@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"><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="http://archivesspace.github.io/archivesspace/api/#create-a-new-job-and-post-input-files">
here</a>. I’m trying to use this endpoint to import EAD XML file(s) into a repository. I can use the
<a href="http://archivesspace.github.io/archivesspace/api/#create-a-new-job">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@01D697E8.761A4BD0"><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"">  "http://localhost:8089/repositories/2/jobs_with_files?job={"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>
</body>
</html>