vulnerablecode
vulnerablecode copied to clipboard
AppRegistryNotReady error when setting up vulntotal
Description
I encountered an AppRegistryNotReady
error when trying to set up vulntotal using Docker. This issue arises at the final step when running vulntotal --help
.
Steps to Reproduce
- Ran
docker-compose up
to start the services. - Executed
docker-compose exec vulnerablecode pip install -r requirements.txt
to install Python dependencies. - Ran
docker-compose exec vulnerablecode pip install -e .
to install the current package. - Attempted to run
docker-compose exec vulnerablecode vulntotal --help
to check if vulntotal was correctly set up.
At the last step, I encountered the following error:
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Upon investigating, I found that the root cause is an import statement in github.py
, which tries to import from vulnerabilities import utils
. Specifically, vulnerabilities.utils
contains the line from packageurl.contrib.django.models import without_empty_values
, which seems to trigger the error. It appears that vulntotal's operation is being impeded by its dependency on Django's app loading state.
Expected Behavior
I expected to be able to run vulntotal --help
without encountering an AppRegistryNotReady
error, regardless of the Django app's state.
Actual Behavior
An AppRegistryNotReady
error is raised due to an import statement dependent on Django being fully initialized.
Possible Solution
It might be beneficial to refactor the code to remove the dependency on Django's app loading state, especially for utility scripts like vulntotal
that should ideally operate independently.
Upon investigating, I found that the root cause is an import statement in github.py, which tries to import from vulnerabilities import utils. Specifically, vulnerabilities.utils contains the line from packageurl.contrib.django.models import without_empty_values, which seems to trigger the error. It appears that vulntotal's operation is being impeded by its dependency on Django's app loading state.
Good catch @poju3185. The solution would be to use fetchcode.package_versions.github_response
instead of vulnerabilities.utils.fetch_github_graphql_query
see this https://github.com/nexB/fetchcode/blob/b3b2052cdd9a19e0032504f6c39a943ee7cf893d/src/fetchcode/package_versions.py#L649.
@keshav-space, thank you for your suggestion. I've opened a PR. Could you please review it?