Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/library readiness check #670

Open
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

mithunbharadwaj
Copy link
Collaborator

No description provided.

@mithunbharadwaj mithunbharadwaj self-assigned this Feb 21, 2025
@mithunbharadwaj mithunbharadwaj requested a review from ateska March 17, 2025 09:28
@mejroslav
Copy link
Contributor

Hello @mithunbharadwaj, please update ASAB documentation, and provide an example of how the exception should be handled in the code.

@eliska-n
Copy link
Collaborator

You should raise this error in the cases, where you provide "API" - when a microservice is using a library.

However, if there are methods used by the library itself, you should not raise the error and let it be unhadled. You need to solve this situation inside asab.

@@ -378,6 +390,9 @@ async def _list(self, path, providers):
async def _read_disabled(self):
# `.disabled.yaml` is read from the first configured library
# It is applied on all libraries in the configuration.
if not self.is_ready():
raise LibraryNotReadyError("Library is not ready yet.")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just ran the example you provided as it is and got an error inside asab after start:

eliska@eliska-TUXEDO:~/teskalabs/asab$ python examples/library.py
20-Mar-2025 16:45:10.443923 NOTICE asab.application is ready.
20-Mar-2025 16:45:11.445390 ERROR asab.task Error 'Library is not ready yet.' during task:
Traceback (most recent call last):
  File "/home/eliska/teskalabs/asab/asab/task.py", line 161, in main
    await task
  File "/home/eliska/teskalabs/asab/asab/library/providers/abc.py", line 47, in _set_ready
    await self.Library._set_ready(self)
  File "/home/eliska/teskalabs/asab/asab/library/service.py", line 168, in _set_ready
    await self._read_disabled()
  File "/home/eliska/teskalabs/asab/asab/library/service.py", line 394, in _read_disabled
    raise LibraryNotReadyError("Library is not ready yet.")
asab.exceptions.LibraryNotReadyError: Library is not ready yet.
20-Mar-2025 16:45:12.306997 NOTICE asab.library.service [sd name="LibraryService"] is ready.
# Library

 * LibraryItem(name='/CONTRIBUTING.md', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=1977)
  - content: 1977 bytes
 * LibraryItem(name='/Dashboards/', type='dir', layers=[0], providers=[<asab.library.providers.filesystem.FileSystemLibraryProvider object at 0x71cbc5fde0d0>], disabled=False, override=0, target='global', size=None)
 * LibraryItem(name='/Dockerfile', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=653)
  - !!! Cannot open item /Dockerfile: Invalid Library path '/Dockerfile': Item path must end with an extension (e.g. '/Templates/item.json')
 * LibraryItem(name='/LICENSE', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=1509)
  - !!! Cannot open item /LICENSE: Invalid Library path '/LICENSE': Item path must end with an extension (e.g. '/Templates/item.json')
 * LibraryItem(name='/README.rst', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=4859)
  - content: 4859 bytes
 * LibraryItem(name='/asab-manifest.py', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=2693)
  - content: 2693 bytes
 * LibraryItem(name='/asab/', type='dir', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=None)
 * LibraryItem(name='/docs.Dockerfile', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=238)
  - content: 238 bytes
 * LibraryItem(name='/docs/', type='dir', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=None)
 * LibraryItem(name='/etc/', type='dir', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=None)
 * LibraryItem(name='/examples/', type='dir', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=None)
 * LibraryItem(name='/mkdocs.yml', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=7190)
  - content: 7190 bytes
 * LibraryItem(name='/old_docs/', type='dir', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=None)
 * LibraryItem(name='/setup.cfg', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=255)
  - content: 255 bytes
 * LibraryItem(name='/setup.py', type='item', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=3234)
  - content: 3234 bytes
 * LibraryItem(name='/test.json', type='item', layers=[0], providers=[<asab.library.providers.filesystem.FileSystemLibraryProvider object at 0x71cbc5fde0d0>], disabled=False, override=0, target='global', size=17)
  - content: 17 bytes
 * LibraryItem(name='/test/', type='dir', layers=[1], providers=[<asab.library.providers.git.GitLibraryProvider object at 0x71cbc5ae4410>], disabled=False, override=0, target='global', size=None)

===
20-Mar-2025 16:45:12.317788 NOTICE asab.application [sd exit_code="0"] is exiting ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants