mijnbib


Namemijnbib JSON
Version 0.7.0 PyPI version JSON
download
home_pageNone
SummaryPython API voor de website mijn.bibliotheek.be
upload_time2025-01-25 19:20:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT License Copyright (c) 2023 Ward Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords mijn bibliotheek bibliotheek
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # mijnbib

Python API voor bibliotheek.be (voorheen mijn.bibliotheek.be)

Met deze Python library kan je jouw ontleende items, reservaties en
accountinfo opvragen indien je een account hebt op <https://bibliotheek.be>.

## Installatie

Installeer via:

    pip install mijnbib

Of, om een ugrade af te dwingen:

    pip install --upgrade mijnbib

## Gebruik

Bijvoorbeeld, het opvragen van je ontleende items kan als volgt (na installatie):

    from mijnbib import MijnBibliotheek

    username = "johndoe"
    password = "12345678"
    account_id = "123"  # zie het getal in de URL, of via mb.get_accounts()

    mb = MijnBibliotheek(username, password)
    loans = mb.get_loans(account_id)
    print(loans)

Voor een meer leesbare versie, gebruik `pprint()`:

    import pprint
    pprint.pprint([l for l in loans])

    [Loan(title='Erebus',
      loan_from=datetime.date(2023, 11, 25),
      loan_till=datetime.date(2023, 12, 23),
      author='Palin, Michael',
      type='Boek',
      extendable=True,
      extend_url='https://gent.bibliotheek.be/mijn-bibliotheek/lidmaatschappen/123/uitleningen/verlengen?loan-ids=789',
      extend_id='789',
      branchname='Gent Hoofdbibliotheek',
      id='456789',
      url='https://gent.bibliotheek.be/resolver.ashx?extid=%7Cwise-oostvlaanderen%7C456789',
      cover_url='https://webservices.bibliotheek.be/index.php?func=cover&ISBN=9789000359325&VLACCnr=10157217&CDR=&EAN=&ISMN=&EBS=&coversize=medium',
      account_id='123'
      )]

Voor meer voorbeelden, zie de code in de folder `examples`.
Daarin wordt ook `asdict` gebruikt voor conversie naar een dictionary.

Tenslotte, via de commandline kan je de module ook als volgt aanroepen:

    python -m mijnbib loans
    python -m mijnbib --help        # om alle opties te zien.

of ook

    mijnbib loans

## Opmerkingen

- **Authenticatie**. Inloggen bij de bibliotheek.be website gebeurt standaard
  via een webformulier. Het is ook mogelijk om de `oauth` manier te gebruiken;
  maar dit is nog experimenteel.

        mb = MijnBibliotheek(username, password, login_by="oauth")
        accounts = mb.get_accounts()

- **Foutafhandeling**. Afhankelijk van de toepassing, kan het aangeraden zijn om
  foutafhandeling te voorzien. Het bestand `errors.py` bevat de lijst van
  Mijnbib-specifieke exceptions. De docstrings van de publieke methods bevatten
  de errors die kunnen optreden. Bijvoorbeeld:

        from mijnbib import AuthenticationError, MijnbibError, MijnBibliotheek

        mb = MijnBibliotheek(username, password)
        try:
            accounts = mb.get_accounts()
        except AuthenticationError as e:
            print(e)  # wrong credentials
        except MijnbibError as e:
            print(e)  # any other custom mijnbib error

- **Compatibiliteit met bibliotheek.be** - Deze Python API haalt zijn gegevens
  via webscraping van de bibliotheek.be website.
  Daardoor is ze afhankelijk van de structuur van de website. Bij een wijziging aan
  de structuur van de website is het dus heel waarschijnlijk dat alle of bepaalde
  functionaliteit plots niet meer werkt.  
  In dat geval is het wachten tot deze Python library geupdate is om met de nieuwe
  structuur om te gaan.  
  Voorzie een try/except wrapper, waarbij je ofwel `MijnbibError` opvangt, of de
  meer specifieke `IncompatibleSourceError`.

## Alternatieven

De Home Assistant plugin <https://github.com/myTselection/bibliotheek_be> scraped
op een gelijkaardige manier de bibliotheek.be website.

## Development

To install all dependencies for development, install (in a virtualenv) via:

    python3 -m venv venv3x
    . venv3x/bin/activate
    pip install -e .[dev]      # 'dev' is defined in pyproject.toml

You need `make` as well. For installation on Windows, see the options at
<https://stackoverflow.com/a/32127632/50899>

Running the tests and applying code formatting can be done via:

    make test
    make format

To work around the challenge of testing a web scraper, the following *snapshot
testing* approach can be used to get some confidence when applying refactoring:

1. Create a file `mijnbib.ini` in the project root folder, and make it contain
   a section `[DEFAULT]` holding the following parameters: `username`,
   `password` and `account_id`
2. Run `python tests/save_testref.py` to capture and store the current output
   (a couple of files will be created)
3. Perform refactoring as needed
4. Run `pytest tests/tst_mijnbibliotheek.py` (note: it's `pytest` here!) to check
   if the output still matches the earlier captured output

Creating a distribution archive:

    make clean
    make build

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "mijnbib",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "mijn bibliotheek, bibliotheek",
    "author": null,
    "author_email": "Ward Van Heddeghem <wardvh@fastmail.fm>",
    "download_url": "https://files.pythonhosted.org/packages/14/e4/928e95922d9c72015e20cb69c83fbe01534de94a0ddc098fc19abbabe729/mijnbib-0.7.0.tar.gz",
    "platform": null,
    "description": "# mijnbib\n\nPython API voor bibliotheek.be (voorheen mijn.bibliotheek.be)\n\nMet deze Python library kan je jouw ontleende items, reservaties en\naccountinfo opvragen indien je een account hebt op <https://bibliotheek.be>.\n\n## Installatie\n\nInstalleer via:\n\n    pip install mijnbib\n\nOf, om een ugrade af te dwingen:\n\n    pip install --upgrade mijnbib\n\n## Gebruik\n\nBijvoorbeeld, het opvragen van je ontleende items kan als volgt (na installatie):\n\n    from mijnbib import MijnBibliotheek\n\n    username = \"johndoe\"\n    password = \"12345678\"\n    account_id = \"123\"  # zie het getal in de URL, of via mb.get_accounts()\n\n    mb = MijnBibliotheek(username, password)\n    loans = mb.get_loans(account_id)\n    print(loans)\n\nVoor een meer leesbare versie, gebruik `pprint()`:\n\n    import pprint\n    pprint.pprint([l for l in loans])\n\n    [Loan(title='Erebus',\n      loan_from=datetime.date(2023, 11, 25),\n      loan_till=datetime.date(2023, 12, 23),\n      author='Palin, Michael',\n      type='Boek',\n      extendable=True,\n      extend_url='https://gent.bibliotheek.be/mijn-bibliotheek/lidmaatschappen/123/uitleningen/verlengen?loan-ids=789',\n      extend_id='789',\n      branchname='Gent Hoofdbibliotheek',\n      id='456789',\n      url='https://gent.bibliotheek.be/resolver.ashx?extid=%7Cwise-oostvlaanderen%7C456789',\n      cover_url='https://webservices.bibliotheek.be/index.php?func=cover&ISBN=9789000359325&VLACCnr=10157217&CDR=&EAN=&ISMN=&EBS=&coversize=medium',\n      account_id='123'\n      )]\n\nVoor meer voorbeelden, zie de code in de folder `examples`.\nDaarin wordt ook `asdict` gebruikt voor conversie naar een dictionary.\n\nTenslotte, via de commandline kan je de module ook als volgt aanroepen:\n\n    python -m mijnbib loans\n    python -m mijnbib --help        # om alle opties te zien.\n\nof ook\n\n    mijnbib loans\n\n## Opmerkingen\n\n- **Authenticatie**. Inloggen bij de bibliotheek.be website gebeurt standaard\n  via een webformulier. Het is ook mogelijk om de `oauth` manier te gebruiken;\n  maar dit is nog experimenteel.\n\n        mb = MijnBibliotheek(username, password, login_by=\"oauth\")\n        accounts = mb.get_accounts()\n\n- **Foutafhandeling**. Afhankelijk van de toepassing, kan het aangeraden zijn om\n  foutafhandeling te voorzien. Het bestand `errors.py` bevat de lijst van\n  Mijnbib-specifieke exceptions. De docstrings van de publieke methods bevatten\n  de errors die kunnen optreden. Bijvoorbeeld:\n\n        from mijnbib import AuthenticationError, MijnbibError, MijnBibliotheek\n\n        mb = MijnBibliotheek(username, password)\n        try:\n            accounts = mb.get_accounts()\n        except AuthenticationError as e:\n            print(e)  # wrong credentials\n        except MijnbibError as e:\n            print(e)  # any other custom mijnbib error\n\n- **Compatibiliteit met bibliotheek.be** - Deze Python API haalt zijn gegevens\n  via webscraping van de bibliotheek.be website.\n  Daardoor is ze afhankelijk van de structuur van de website. Bij een wijziging aan\n  de structuur van de website is het dus heel waarschijnlijk dat alle of bepaalde\n  functionaliteit plots niet meer werkt.  \n  In dat geval is het wachten tot deze Python library geupdate is om met de nieuwe\n  structuur om te gaan.  \n  Voorzie een try/except wrapper, waarbij je ofwel `MijnbibError` opvangt, of de\n  meer specifieke `IncompatibleSourceError`.\n\n## Alternatieven\n\nDe Home Assistant plugin <https://github.com/myTselection/bibliotheek_be> scraped\nop een gelijkaardige manier de bibliotheek.be website.\n\n## Development\n\nTo install all dependencies for development, install (in a virtualenv) via:\n\n    python3 -m venv venv3x\n    . venv3x/bin/activate\n    pip install -e .[dev]      # 'dev' is defined in pyproject.toml\n\nYou need `make` as well. For installation on Windows, see the options at\n<https://stackoverflow.com/a/32127632/50899>\n\nRunning the tests and applying code formatting can be done via:\n\n    make test\n    make format\n\nTo work around the challenge of testing a web scraper, the following *snapshot\ntesting* approach can be used to get some confidence when applying refactoring:\n\n1. Create a file `mijnbib.ini` in the project root folder, and make it contain\n   a section `[DEFAULT]` holding the following parameters: `username`,\n   `password` and `account_id`\n2. Run `python tests/save_testref.py` to capture and store the current output\n   (a couple of files will be created)\n3. Perform refactoring as needed\n4. Run `pytest tests/tst_mijnbibliotheek.py` (note: it's `pytest` here!) to check\n   if the output still matches the earlier captured output\n\nCreating a distribution archive:\n\n    make clean\n    make build\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2023 Ward\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "Python API voor de website mijn.bibliotheek.be",
    "version": "0.7.0",
    "project_urls": {
        "Changelog": "https://github.com/wvanhed/mijnbib/blob/main/changelog.md",
        "Homepage": "https://github.com/wvanhed/mijnbib"
    },
    "split_keywords": [
        "mijn bibliotheek",
        " bibliotheek"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "94b46760db29c542233082ea1059a140b1a175efe27c7c817dbe9a27de435223",
                "md5": "9442be69ceccdb2c5c6b33b886f5ed88",
                "sha256": "192fa0684b5dbc5d6ae44977159ee37ec091b191e42fb9a1cc8fb2edd816c2e5"
            },
            "downloads": -1,
            "filename": "mijnbib-0.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9442be69ceccdb2c5c6b33b886f5ed88",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 22896,
            "upload_time": "2025-01-25T19:20:36",
            "upload_time_iso_8601": "2025-01-25T19:20:36.475145Z",
            "url": "https://files.pythonhosted.org/packages/94/b4/6760db29c542233082ea1059a140b1a175efe27c7c817dbe9a27de435223/mijnbib-0.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "14e4928e95922d9c72015e20cb69c83fbe01534de94a0ddc098fc19abbabe729",
                "md5": "9b2089431838d6957747799b15e12dc0",
                "sha256": "7eba2290e8af364a0a8327a2bd71d3173b06b4a7bd00345f8b2042054504da15"
            },
            "downloads": -1,
            "filename": "mijnbib-0.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9b2089431838d6957747799b15e12dc0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 25705,
            "upload_time": "2025-01-25T19:20:39",
            "upload_time_iso_8601": "2025-01-25T19:20:39.303827Z",
            "url": "https://files.pythonhosted.org/packages/14/e4/928e95922d9c72015e20cb69c83fbe01534de94a0ddc098fc19abbabe729/mijnbib-0.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-25 19:20:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "wvanhed",
    "github_project": "mijnbib",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "mijnbib"
}
        
Elapsed time: 1.44804s