To query Aleph, just create one of the Queries - ISBNQuery for example and put it into SearchRequest wrapper and send the message to the Aleph’s exchange:
isbnq = ISBNQuery("80-251-0225-4")
request = SearchRequest(isbnq)
amqp.send(
message = serialize(request),
properties = "..",
exchange = "ALEPH'S_EXCHANGE"
)
and you will get back AMQP message with SearchResult.
Note
You don’t have to import all structures from datastructures, they should be automatically imported and made global in __init__.py.
If you want to just get count of how many items is there in Aleph, just wrap the ISBNQuery with CountRequest:
isbnq = ISBNQuery("80-251-0225-4")
request = CountRequest(isbnq)
# rest is same..
and you will get back CountResult.
Note
You should always use CountRequest instead of just calling len() to SearchResult.records - it doesn’t put that much load to Aleph. Also Aleph is restricted to 150 requests per second.
Here is ASCII flow diagram for you:
ISBNQuery ----. ,--> CountResult
AuthorQuery ----| | `- num_of_records
PublisherQuery ----| |
TitleQuery ----| ExportRequest |
GenericQuery ----| ISBNValidationRequest |--> SearchResult
| | | `- AlephRecord
V | |
Count/Search/ExportRequest | |--> ISBNValidationResult
| | | - ISBN
V | |
| | |--> ExportResult
V | |
serialize()<----------' deserialize()
| ^
V Client |
AMQPMessage ------> AMQP -------> AMQPMessage
| ^
V |
| ^
V |
| ^
V |
AMQPMessage <------ AMQP <-------- AMQPMessage
| Service ^
| |
V |
reactToAMQPMessage() ............... magic_happens()
Neat, isn’t it?
Note
AQMP is handled by edeposit.amqp module, edeposit.aqmp.aleph provides just datastructures and reactToAMQPMessage().
Bases: edeposit.amqp.aleph.GenericQuery, edeposit.amqp.aleph._QueryTemplate
Used for generic queries to Aleph.
Parameters: |
|
---|
For details of base/phrase/.. parameters, see aleph.searchInAleph(). All parameters also serves as properties.
This is used mainly if you want to search by your own parameters and don’t want to use prepared wrappers (AuthorQuery/ISBNQuery/..).
Bases: edeposit.amqp.aleph.ISBNQuery, edeposit.amqp.aleph._QueryTemplate
Used to query Aleph to get books by ISBN.
Parameters: |
|
---|
Note
ISBN is not unique, so you can get back lot of books with same ISBN. Some books also have two or more ISBNs.
Bases: edeposit.amqp.aleph.AuthorQuery, edeposit.amqp.aleph._QueryTemplate
Used to query Aleph to get books by Author.
Parameters: |
|
---|
Bases: edeposit.amqp.aleph.PublisherQuery, edeposit.amqp.aleph._QueryTemplate
Used to query Aleph to get books by Publisher.
Parameters: |
|
---|
Bases: edeposit.amqp.aleph._QueryTemplate, edeposit.amqp.aleph.TitleQuery
Used to query Aleph to get books by book’s title/name.
Parameters: |
|
---|
React to given (AMQP) message.
This function is used by edeposit.amqp.alephdaemon. It works as highlevel wrapper for whole module.
Example
>>> import aleph
>>> request = aleph.SearchRequest(
... aleph.ISBNQuery("80-251-0225-4")
... )
>>> request
SearchRequest(query=ISBNQuery(ISBN='80-251-0225-4', base='nkc'))
>>> response = aleph.reactToAMQPMessage(request, "UUID")
>>> response # formated by hand for purposes of example
SearchResult(
records=[
AlephRecord(
base='nkc',
library='NKC01',
docNumber=1492461,
xml='HERE IS WHOLE MARC XML RECORD',
epublication=EPublication(
ISBN=['80-251-0225-4'],
nazev='Umění programování v UNIXu /',
podnazev='',
vazba='(brož.) :',
cena='Kč 590,00',
castDil='',
nazevCasti='',
nakladatelVydavatel='Computer Press,',
datumVydani='2004',
poradiVydani='1. vyd.',
zpracovatelZaznamu='BOA001',
format='23 cm',
url='',
mistoVydani='Brno :',
ISBNSouboruPublikaci=[],
autori=[
Author(
firstName='Eric S.',
lastName='Raymond',
title=''
)
],
originaly=[
'Art of UNIX programming'
],
internal_url=''
)
)
]
)
Parameters: |
|
---|---|
Returns: | Result class – Result of search in Aleph. See results submodule. |
Raises: | ValueError – If bad type of req structure is given. |