aleph package

Query workflow

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.

Example

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().

API

class edeposit.amqp.aleph.GenericQuery[source]

Bases: edeposit.amqp.aleph.GenericQuery, edeposit.amqp.aleph._QueryTemplate

Used for generic queries to Aleph.

Parameters:
  • base (str) – Which base in Aleph will be queried. This depends on settings of your server. See aleph.getListOfBases() for details.
  • phrase (str) – What are you looking for.
  • considerSimilar (bool) – Don’t use this, it usually doesn’t work.
  • field (str) – Which field you want to use for search. See aleph.VALID_ALEPH_FIELDS for list of valid bases.

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/..).

class edeposit.amqp.aleph.ISBNQuery[source]

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.

class edeposit.amqp.aleph.AuthorQuery[source]

Bases: edeposit.amqp.aleph.AuthorQuery, edeposit.amqp.aleph._QueryTemplate

Used to query Aleph to get books by Author.

Parameters:
class edeposit.amqp.aleph.PublisherQuery[source]

Bases: edeposit.amqp.aleph.PublisherQuery, edeposit.amqp.aleph._QueryTemplate

Used to query Aleph to get books by Publisher.

Parameters:
class edeposit.amqp.aleph.TitleQuery[source]

Bases: edeposit.amqp.aleph._QueryTemplate, edeposit.amqp.aleph.TitleQuery

Used to query Aleph to get books by book’s title/name.

Parameters:
edeposit.amqp.aleph.reactToAMQPMessage(req, UUID)[source]

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:
  • req (Request class) – any of the Request class from requests.
  • UUID (str) – unique ID of received message
Returns:

Result class – Result of search in Aleph. See results submodule.

Raises:

ValueError – If bad type of req structure is given.

Table Of Contents

Previous topic

Modul pro AMQP komunikaci se systémem Aleph

Next topic

Aleph lowlevel API

This Page