From dave_mayo at harvard.edu Wed May 25 20:47:32 2022 From: dave_mayo at harvard.edu (Mayo, Dave) Date: Thu, 26 May 2022 00:47:32 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Message-ID: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Hi Corey! Sorry for taking so long to get back to you! The reason you?ve had no success is that, frankly, this aspect of the app?s functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. Here?s a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [?[?test?, ?1234?, ?abcd?, ?!@#$?]?]}) Or less hatefully? Maybe? import json find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [json.dumps([?test?, ?1234?, ?abcd?, ?!@#$?])]}) In any event, it?s a weird way to do business and I don?t care for it. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: on behalf of Corey Schmidt Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Date: Wednesday, March 23, 2022 at 4:23 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the find_by_id resource endpoint, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager 706-542-8151 | Corey.Schmidt at uga.edu [University of Georgia] -------------- next part -------------- An HTML attachment was scrubbed... URL: From Corey.Schmidt at uga.edu Thu May 26 10:43:35 2022 From: Corey.Schmidt at uga.edu (Corey Schmidt) Date: Thu, 26 May 2022 14:43:35 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help In-Reply-To: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> References: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Message-ID: Hey Dave, That?s alright, I spoke with Tommy Keswick at Caltech and we got something working, but it?s a cumbersome workaround using urllib.parse.quote and lots of extra lines of code. That explains a lot why this was so frustrating! I?ve tried your examples and they work perfectly, thank you so so much! I wonder if I couldn?t pick your brain for helping me write the SHELL examples for this? So far, I?ve got something like so: $ export IDENTIFIER=['["test","1234","abcd","5678"]'] $ curl -H -g "X-ArchivesSpace-Session: $SESSION" "http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]=$IDENTIFIER" The above gets a response from ASpace, but doesn?t return any results like in the python example. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17 100 17 0 0 482 0 --:--:-- --:--:-- --:--:-- 500{"resources":[]} Can you spot anything wrong with how I?m making the call? I changed the fourth ID from !@#$ to 5678 since it was difficult for SHELL to accept those characters Corey From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Wednesday, May 25, 2022 8:48 PM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Hi Corey! Sorry for taking so long to get back to you! The reason you?ve had no success is that, frankly, this aspect of the app?s functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. Here?s a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [?[?test?, ?1234?, ?abcd?, ?!@#$?]?]}) Or less hatefully? Maybe? import json find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [json.dumps([?test?, ?1234?, ?abcd?, ?!@#$?])]}) In any event, it?s a weird way to do business and I don?t care for it. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: > on behalf of Corey Schmidt > Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Date: Wednesday, March 23, 2022 at 4:23 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the find_by_id resource endpoint, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager 706-542-8151 | Corey.Schmidt at uga.edu [University of Georgia] -------------- next part -------------- An HTML attachment was scrubbed... URL: From dave_mayo at harvard.edu Thu May 26 11:47:43 2022 From: dave_mayo at harvard.edu (Mayo, Dave) Date: Thu, 26 May 2022 15:47:43 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help In-Reply-To: References: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Message-ID: One thing is that you probably want to do "${IDENTIFIER}" to avoid escaping issues. But the big thing is that requests actually does some negotiation around "array params" that you have to manually handle in shell - so instead of passing in identifier as one array of json arrays, you'd actually want to pass each identifier directly as one array. Basically, you would pass each serialized (and URL encoded) json array of components to a separate "identifier[]=" param and repeat as necessary. Get Outlook for Android ________________________________ From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Corey Schmidt Sent: Thursday, May 26, 2022 10:43:35 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Hey Dave, That?s alright, I spoke with Tommy Keswick at Caltech and we got something working, but it?s a cumbersome workaround using urllib.parse.quote and lots of extra lines of code. That explains a lot why this was so frustrating! I?ve tried your examples and they work perfectly, thank you so so much! I wonder if I couldn?t pick your brain for helping me write the SHELL examples for this? So far, I?ve got something like so: $ export IDENTIFIER=['["test","1234","abcd","5678"]'] $ curl -H -g "X-ArchivesSpace-Session: $SESSION" "http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]=$IDENTIFIER" The above gets a response from ASpace, but doesn?t return any results like in the python example. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17 100 17 0 0 482 0 --:--:-- --:--:-- --:--:-- 500{"resources":[]} Can you spot anything wrong with how I?m making the call? I changed the fourth ID from !@#$ to 5678 since it was difficult for SHELL to accept those characters Corey From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Wednesday, May 25, 2022 8:48 PM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Hi Corey! Sorry for taking so long to get back to you! The reason you?ve had no success is that, frankly, this aspect of the app?s functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. Here?s a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [?[?test?, ?1234?, ?abcd?, ?!@#$?]?]}) Or less hatefully? Maybe? import json find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [json.dumps([?test?, ?1234?, ?abcd?, ?!@#$?])]}) In any event, it?s a weird way to do business and I don?t care for it. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: > on behalf of Corey Schmidt > Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Date: Wednesday, March 23, 2022 at 4:23 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the find_by_id resource endpoint, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager 706-542-8151 | Corey.Schmidt at uga.edu [University of Georgia] -------------- next part -------------- An HTML attachment was scrubbed... URL: From dave_mayo at harvard.edu Thu May 26 11:49:11 2022 From: dave_mayo at harvard.edu (Mayo, Dave) Date: Thu, 26 May 2022 15:49:11 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help In-Reply-To: References: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Message-ID: Since we're using curl you probably don't want/need to manually construct the URL and urlencode, there's I believe an option for passing params? I'd have to look at the man page or Google examples. Get Outlook for Android ________________________________ From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Mayo, Dave Sent: Thursday, May 26, 2022 11:47:43 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help One thing is that you probably want to do "${IDENTIFIER}" to avoid escaping issues. But the big thing is that requests actually does some negotiation around "array params" that you have to manually handle in shell - so instead of passing in identifier as one array of json arrays, you'd actually want to pass each identifier directly as one array. Basically, you would pass each serialized (and URL encoded) json array of components to a separate "identifier[]=" param and repeat as necessary. Get Outlook for Android ________________________________ From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Corey Schmidt Sent: Thursday, May 26, 2022 10:43:35 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Hey Dave, That?s alright, I spoke with Tommy Keswick at Caltech and we got something working, but it?s a cumbersome workaround using urllib.parse.quote and lots of extra lines of code. That explains a lot why this was so frustrating! I?ve tried your examples and they work perfectly, thank you so so much! I wonder if I couldn?t pick your brain for helping me write the SHELL examples for this? So far, I?ve got something like so: $ export IDENTIFIER=['["test","1234","abcd","5678"]'] $ curl -H -g "X-ArchivesSpace-Session: $SESSION" "http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]=$IDENTIFIER" The above gets a response from ASpace, but doesn?t return any results like in the python example. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17 100 17 0 0 482 0 --:--:-- --:--:-- --:--:-- 500{"resources":[]} Can you spot anything wrong with how I?m making the call? I changed the fourth ID from !@#$ to 5678 since it was difficult for SHELL to accept those characters Corey From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Wednesday, May 25, 2022 8:48 PM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Hi Corey! Sorry for taking so long to get back to you! The reason you?ve had no success is that, frankly, this aspect of the app?s functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. Here?s a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [?[?test?, ?1234?, ?abcd?, ?!@#$?]?]}) Or less hatefully? Maybe? import json find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [json.dumps([?test?, ?1234?, ?abcd?, ?!@#$?])]}) In any event, it?s a weird way to do business and I don?t care for it. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: > on behalf of Corey Schmidt > Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Date: Wednesday, March 23, 2022 at 4:23 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the find_by_id resource endpoint, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager 706-542-8151 | Corey.Schmidt at uga.edu [University of Georgia] -------------- next part -------------- An HTML attachment was scrubbed... URL: From Corey.Schmidt at uga.edu Thu May 26 16:05:33 2022 From: Corey.Schmidt at uga.edu (Corey Schmidt) Date: Thu, 26 May 2022 20:05:33 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help In-Reply-To: References: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Message-ID: Dave, I think I get what you're pointing out, but having trouble composing something. Would it be something like for each ID component as its own SHELL variable? Like: $ export ID1=["test"] $ export ID2=["1234"] $ export ID3=["abcd"] $ export ID4=["5678"] I tried doing it like the above, but I don't think I know enough about how to encode each json array. $ curl -H "X-ArchivesSpace-Session: $SESSION" -g http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]={[$ID1,$ID2,$ID3,$ID4]} From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Thursday, May 26, 2022 11:49 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Since we're using curl you probably don't want/need to manually construct the URL and urlencode, there's I believe an option for passing params? I'd have to look at the man page or Google examples. Get Outlook for Android ________________________________ From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org > on behalf of Mayo, Dave > Sent: Thursday, May 26, 2022 11:47:43 AM To: ArchivesSpace API Ad Hoc Working Group > Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help One thing is that you probably want to do "${IDENTIFIER}" to avoid escaping issues. But the big thing is that requests actually does some negotiation around "array params" that you have to manually handle in shell - so instead of passing in identifier as one array of json arrays, you'd actually want to pass each identifier directly as one array. Basically, you would pass each serialized (and URL encoded) json array of components to a separate "identifier[]=" param and repeat as necessary. Get Outlook for Android ________________________________ From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org > on behalf of Corey Schmidt > Sent: Thursday, May 26, 2022 10:43:35 AM To: ArchivesSpace API Ad Hoc Working Group > Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Hey Dave, That's alright, I spoke with Tommy Keswick at Caltech and we got something working, but it's a cumbersome workaround using urllib.parse.quote and lots of extra lines of code. That explains a lot why this was so frustrating! I've tried your examples and they work perfectly, thank you so so much! I wonder if I couldn't pick your brain for helping me write the SHELL examples for this? So far, I've got something like so: $ export IDENTIFIER=['["test","1234","abcd","5678"]'] $ curl -H -g "X-ArchivesSpace-Session: $SESSION" "http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]=$IDENTIFIER" The above gets a response from ASpace, but doesn't return any results like in the python example. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17 100 17 0 0 482 0 --:--:-- --:--:-- --:--:-- 500{"resources":[]} Can you spot anything wrong with how I'm making the call? I changed the fourth ID from !@#$ to 5678 since it was difficult for SHELL to accept those characters Corey From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org > On Behalf Of Mayo, Dave Sent: Wednesday, May 25, 2022 8:48 PM To: ArchivesSpace API Ad Hoc Working Group > Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Hi Corey! Sorry for taking so long to get back to you! The reason you've had no success is that, frankly, this aspect of the app's functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. Here's a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier': ['["test", "1234", "abcd", "!@#$"]']}) Or less hatefully? Maybe? import json find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier': [json.dumps(['test', '1234', 'abcd', '!@#$'])]}) In any event, it's a weird way to do business and I don't care for it. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: > on behalf of Corey Schmidt > Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Date: Wednesday, March 23, 2022 at 4:23 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" > Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the find_by_id resource endpoint, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager 706-542-8151 | Corey.Schmidt at uga.edu [University of Georgia] -------------- next part -------------- An HTML attachment was scrubbed... URL: From dave_mayo at harvard.edu Thu May 26 16:31:54 2022 From: dave_mayo at harvard.edu (Mayo, Dave) Date: Thu, 26 May 2022 20:31:54 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help In-Reply-To: References: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Message-ID: It?d be each id as its own key:value pair in the parameters ? like, if you?re passing one identifier, you?d serialize the json array but wouldn?t put an extra array around it? Really, I think you?d want to do the following: curl -H "X-ArchivesSpace-Session: $SESSION" -G http://our_aspace_api_url/repositories/2/find_by_id/resources --data-urlencode "identifier[]=${IDENTIFIER}" where -G switches the request to GET, and makes following ?data* options stick things in the query string rather than formdata. Since you?re not putting the [] in the url anymore you can dispense with -g For multiple ids, you?d repeat the ?data-urlencode with the same key and the other values. So for example: $ curl -H "X-ArchivesSpace-Session: $SESSION" -G http://our_aspace_api_url/repositories/2/find_by_id/resources --data-urlencode 'identifier[]=["test","1234","abcd","5678"]' --data-urlencode 'identifier[]=["my","other","identifier","value"]' should search for those two records. -- Dave Mayo?(he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: on behalf of Corey Schmidt Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Date: Thursday, May 26, 2022 at 4:05 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dave, I think I get what you?re pointing out, but having trouble composing something. Would it be something like for each ID component as its own SHELL variable? Like: $ export ID1=["test"] $ export ID2=["1234"] $ export ID3=["abcd"] $ export ID4=["5678"] I tried doing it like the above, but I don?t think I know enough about how to encode each json array. $ curl -H "X-ArchivesSpace-Session: $SESSION" -g http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]={[$ID1,$ID2,$ID3,$ID4]} From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Thursday, May 26, 2022 11:49 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Since we're using curl you probably don't want/need to manually construct the URL and urlencode, there's I believe an option for passing params? I'd have to look at the man page or Google examples.? Get https://urldefense.proofpoint.com/v2/url?u=https-3A__aka.ms_AAb9ysg&d=DwMFAg&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=WH5tOOw5lVrKhS8lmA2jPmMQ5hrGa5QlYeA71SIrfKmLMmzMOusTbjxMUh73VUe3&s=o5pHGNC3cCFzaowpX6ytMCOIWzjzIIHnmKBmDuQ5-K4&e= From: mailto:archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Mayo, Dave Sent: Thursday, May 26, 2022 11:47:43 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help ? One thing is that you probably want to do "${IDENTIFIER}" to avoid escaping issues. But the big thing is that requests actually does some negotiation around "array params" that you have to manually handle in shell - so instead of passing in identifier as one array of json arrays, you'd actually want to pass each identifier directly as one array. Basically, you would pass each serialized (and URL encoded) json array of components to a separate "identifier[]=" param and repeat as necessary.? Get https://urldefense.proofpoint.com/v2/url?u=https-3A__aka.ms_AAb9ysg&d=DwMF-g&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=JIWO7CnuIiNwxYkmDENr4-SsSBh4Og97Lukp8TXQl62aMjIYADti2QlkkILGdFGh&s=4Zcs12VNqP-zCxmrNV9uJywdheuJIowa5yHp3_c2efU&e= From: mailto:archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Corey Schmidt Sent: Thursday, May 26, 2022 10:43:35 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help ? Hey Dave, That?s alright, I spoke with Tommy Keswick at Caltech and we got something working, but it?s a cumbersome workaround using urllib.parse.quote and lots of extra lines of code. That explains a lot why this was so frustrating! I?ve tried your examples and they work perfectly, thank you so so much! I wonder if I couldn?t pick your brain for helping me write the SHELL examples for this? So far, I?ve got something like so: $ export IDENTIFIER=['["test","1234","abcd","5678"]'] $ curl -H -g "X-ArchivesSpace-Session: $SESSION" "https://urldefense.proofpoint.com/v2/url?u=http-3A__our-5Faspace-5Fapi-5Furl_repositories_2_find-5Fby-5Fid_resources-3Fidentifier-255b-255d-3D-24IDENTIFIER&d=DwMFAg&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=WH5tOOw5lVrKhS8lmA2jPmMQ5hrGa5QlYeA71SIrfKmLMmzMOusTbjxMUh73VUe3&s=1lhEnst_t4dNFrpIMglmWfNT_3jK6TyNfLOTsu3qs3o&e=" The above gets a response from ASpace, but doesn?t return any results like in the python example. ??% Total??? % Received % Xferd? Average Speed?? Time??? Time???? Time? Current ??????????????????????????? ?????Dload? Upload?? Total?? Spent??? Left? Speed 100??? 17? 100??? 17??? 0???? 0??? 482????? 0 --:--:-- --:--:-- --:--:--?? 500{"resources":[]} Can you spot anything wrong with how I?m making the call? I changed the fourth ID from !@#$ to 5678 since it was difficult for SHELL to accept those characters Corey ? From: mailto:archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Wednesday, May 25, 2022 8:48 PM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help ? [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Hi Corey! ? Sorry for taking so long to get back to you! ? The reason you?ve had no success is that, frankly, this aspect of the app?s functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. ? What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. ? Here?s a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, ? {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [?[?test?, ?1234?, ?abcd?, ?!@#$?]?]}) Or less hatefully? Maybe? import json find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [json.dumps([?test?, ?1234?, ?abcd?, ?!@#$?])]}) In any event, it?s a weird way to do business and I don?t care for it. -- Dave Mayo?(he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS ? From: on behalf of Corey Schmidt Reply-To: "mailto:archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Date: Wednesday, March 23, 2022 at 4:23 PM To: "mailto:archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help ? Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the https://urldefense.proofpoint.com/v2/url?u=https-3A__archivesspace.github.io_archivesspace_api_-3Fshell-23find-2Dresources-2Dby-2Dtheir-2Didentifiers&d=DwMFAw&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=C2RTpp6a036fpnD59EANxOYTWgp62F2fxW6SOcn7HPqjzSghIQN4KWW5_v9UYUJR&s=jI_tQ6Z_E7reBBJrWf2gLSIXIMZoFQN7jLH3NgzihxQ&e=, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) ? Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey ? Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager ? tel:7065428151 | mailto:Corey.Schmidt at uga.edu ? From Corey.Schmidt at uga.edu Fri May 27 10:05:15 2022 From: Corey.Schmidt at uga.edu (Corey Schmidt) Date: Fri, 27 May 2022 14:05:15 +0000 Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help In-Reply-To: References: <65EA5BDF-29CE-42B8-B586-3EBD8B9889A6@harvard.edu> Message-ID: Dave, You're the best!! This works perfectly and makes sense. I have so much more to learn about curl, so I'm keeping the --data-urlencode and -G tricks up my sleeve for next time. I'll make sure to include these examples in the API documentation and update the existing python examples. Btw, I'm also looking for help writing an example of finding a resource via ARK ID. If anyone here on the working group uses ARKs and has some time to collaborate to help make a python/SHELL example for documentation, I would greatly appreciate it! Thanks again Dave! Corey ________________________________ From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Mayo, Dave Sent: Thursday, May 26, 2022 4:31 PM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] It?d be each id as its own key:value pair in the parameters ? like, if you?re passing one identifier, you?d serialize the json array but wouldn?t put an extra array around it? Really, I think you?d want to do the following: curl -H "X-ArchivesSpace-Session: $SESSION" -G http://our_aspace_api_url/repositories/2/find_by_id/resources --data-urlencode "identifier[]=${IDENTIFIER}" where -G switches the request to GET, and makes following ?data* options stick things in the query string rather than formdata. Since you?re not putting the [] in the url anymore you can dispense with -g For multiple ids, you?d repeat the ?data-urlencode with the same key and the other values. So for example: $ curl -H "X-ArchivesSpace-Session: $SESSION" -G http://our_aspace_api_url/repositories/2/find_by_id/resources --data-urlencode 'identifier[]=["test","1234","abcd","5678"]' --data-urlencode 'identifier[]=["my","other","identifier","value"]' should search for those two records. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: on behalf of Corey Schmidt Reply-To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Date: Thursday, May 26, 2022 at 4:05 PM To: "archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dave, I think I get what you?re pointing out, but having trouble composing something. Would it be something like for each ID component as its own SHELL variable? Like: $ export ID1=["test"] $ export ID2=["1234"] $ export ID3=["abcd"] $ export ID4=["5678"] I tried doing it like the above, but I don?t think I know enough about how to encode each json array. $ curl -H "X-ArchivesSpace-Session: $SESSION" -g http://our_aspace_api_url/repositories/2/find_by_id/resources?identifier[]={[$ID1,$ID2,$ID3,$ID4]} From: archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Thursday, May 26, 2022 11:49 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Since we're using curl you probably don't want/need to manually construct the URL and urlencode, there's I believe an option for passing params? I'd have to look at the man page or Google examples. Get https://urldefense.proofpoint.com/v2/url?u=https-3A__aka.ms_AAb9ysg&d=DwMFAg&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=WH5tOOw5lVrKhS8lmA2jPmMQ5hrGa5QlYeA71SIrfKmLMmzMOusTbjxMUh73VUe3&s=o5pHGNC3cCFzaowpX6ytMCOIWzjzIIHnmKBmDuQ5-K4&e= From: mailto:archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Mayo, Dave Sent: Thursday, May 26, 2022 11:47:43 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help One thing is that you probably want to do "${IDENTIFIER}" to avoid escaping issues. But the big thing is that requests actually does some negotiation around "array params" that you have to manually handle in shell - so instead of passing in identifier as one array of json arrays, you'd actually want to pass each identifier directly as one array. Basically, you would pass each serialized (and URL encoded) json array of components to a separate "identifier[]=" param and repeat as necessary. Get https://urldefense.proofpoint.com/v2/url?u=https-3A__aka.ms_AAb9ysg&d=DwMF-g&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=JIWO7CnuIiNwxYkmDENr4-SsSBh4Og97Lukp8TXQl62aMjIYADti2QlkkILGdFGh&s=4Zcs12VNqP-zCxmrNV9uJywdheuJIowa5yHp3_c2efU&e= From: mailto:archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org on behalf of Corey Schmidt Sent: Thursday, May 26, 2022 10:43:35 AM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Hey Dave, That?s alright, I spoke with Tommy Keswick at Caltech and we got something working, but it?s a cumbersome workaround using urllib.parse.quote and lots of extra lines of code. That explains a lot why this was so frustrating! I?ve tried your examples and they work perfectly, thank you so so much! I wonder if I couldn?t pick your brain for helping me write the SHELL examples for this? So far, I?ve got something like so: $ export IDENTIFIER=['["test","1234","abcd","5678"]'] $ curl -H -g "X-ArchivesSpace-Session: $SESSION" "https://urldefense.proofpoint.com/v2/url?u=http-3A__our-5Faspace-5Fapi-5Furl_repositories_2_find-5Fby-5Fid_resources-3Fidentifier-255b-255d-3D-24IDENTIFIER&d=DwMFAg&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=WH5tOOw5lVrKhS8lmA2jPmMQ5hrGa5QlYeA71SIrfKmLMmzMOusTbjxMUh73VUe3&s=1lhEnst_t4dNFrpIMglmWfNT_3jK6TyNfLOTsu3qs3o&e=" The above gets a response from ASpace, but doesn?t return any results like in the python example. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17 100 17 0 0 482 0 --:--:-- --:--:-- --:--:-- 500{"resources":[]} Can you spot anything wrong with how I?m making the call? I changed the fourth ID from !@#$ to 5678 since it was difficult for SHELL to accept those characters Corey From: mailto:archivesspace_api_doc_adhoc-bounces at lyralists.lyrasis.org On Behalf Of Mayo, Dave Sent: Wednesday, May 25, 2022 8:48 PM To: ArchivesSpace API Ad Hoc Working Group Subject: Re: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help [EXTERNAL SENDER - PROCEED CAUTIOUSLY] Hi Corey! Sorry for taking so long to get back to you! The reason you?ve had no success is that, frankly, this aspect of the app?s functionality is bad? Bad, it is poorly implemented in a way that makes it basically impossible to suss out without reading the code. What this function actually expects is: an array of strings with serialized JSON, each of which contains a JSON array of a four part id, null trailing components of which can be omitted. Here?s a working example for two records from Harvard: x.client.get('repositories/3/find_by_id/resources', params={'identifier[]': ['["ecb00051",null,null,null]', '["bf-test"]']}).json() This returns: {'resources': [{'ref': '/repositories/3/resources/7303'}, {'ref': '/repositories/3/resources/9611'}]} So, a working version of your query would be: find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [?[?test?, ?1234?, ?abcd?, ?!@#$?]?]}) Or less hatefully? Maybe? import json find_res_id = client.get(?repositories/2/find_by_id/resources?, params={?identifier?: [json.dumps([?test?, ?1234?, ?abcd?, ?!@#$?])]}) In any event, it?s a weird way to do business and I don?t care for it. -- Dave Mayo (he/him) Senior Digital Library Software Engineer Harvard University > HUIT > LTS From: on behalf of Corey Schmidt Reply-To: "mailto:archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Date: Wednesday, March 23, 2022 at 4:23 PM To: "mailto:archivesspace_api_doc_adhoc at lyralists.lyrasis.org" Subject: [Archivesspace_api_doc_adhoc] find_by_id Endpoint Help Dear all, Hello, this is Corey Schmidt from the University of Georgia. I hope everyone is well and enjoying the slow warmup to Spring. I've been hitting some roadblocks trying to write documentation for API endpoints and I wanted to askfor your help. For the https://urldefense.proofpoint.com/v2/url?u=https-3A__archivesspace.github.io_archivesspace_api_-3Fshell-23find-2Dresources-2Dby-2Dtheir-2Didentifiers&d=DwMFAw&c=WO-RGvefibhHBZq3fL85hQ&r=_Mv1dY22K7jvT5MD7xjbvGVzRDOUMhx4WYcnPSIzYnE&m=C2RTpp6a036fpnD59EANxOYTWgp62F2fxW6SOcn7HPqjzSghIQN4KWW5_v9UYUJR&s=jI_tQ6Z_E7reBBJrWf2gLSIXIMZoFQN7jLH3NgzihxQ&e=, I'm trying to find a resource with a four-part ID, but when I call the endpoint, it keeps giving me an error I can't pin down. Here's what I'm calling: from asnake.client import ASnakeClient import asnake.logging as loggin client = ASnakeClient(baseurl=as_api, username=as_un, password=as_pw) client.authorize() find_res_id = client.get('repositories/2/find_by_id/resources', params={'identifier[]': ['test', '1234', 'abcd', '!@#$']}) print(find_res_id.json(), find_res_id) Here's the error message: {'error': "Had some trouble parsing your request: unexpected token at 'test'"} It may be an issue with the requests package, but I'm not sure. I tested both ASnake and requests, and they gave the same error. Any help/advice would be appreciated, thanks! Corey Corey Schmidt Special Collections Libraries | ArchivesSpace Project Manager tel:7065428151 | mailto:Corey.Schmidt at uga.edu _______________________________________________ Archivesspace_api_doc_adhoc mailing list Archivesspace_api_doc_adhoc at lyralists.lyrasis.org http://lyralists.lyrasis.org/mailman/listinfo/archivesspace_api_doc_adhoc -------------- next part -------------- An HTML attachment was scrubbed... URL: