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

Fix AggsProxy can't be imported | functional.py | utils.py (Tested with elasticsearch-dsl==8.13.1 & django==5.0.4) #316

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

Conversation

abdelslam1997
Copy link

Adding the fork below to your requirements.txt file can be a quick solution until this pull request is accepted

git+https://github.com/abdelslam1997/django-elasticsearch-dsl-drf.git@master

@@ -67,7 +67,7 @@
>>>
>>> model = Publisher # The model associate with this Document
"""
from elasticsearch_dsl.search import AggsProxy

Choose a reason for hiding this comment

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

We (elasticsearch-dsl team @ Elastic) cannot guarantee that this will continue to work in future releases of elasticsearch-dsl. AggsProxy is an internal class of this package, not intended to be used externally. Also consider that with this change users will be required to upgrade to elasticsearch-dsl==8.13.1 as any older versions will not work anymore.

In 8.13.1 we have added an implementation of the EmptySearch class that we intend to maintain going forward. My suggestion for a fix is something like this:

try:
    # code for 8.13 (requires 8.13.1)
    from elasticsearch import EmptySearch
except ImportError:
    # 8.12 and older
    # your definition of Empty Search here, including the original import of AggsProxy

Copy link

@millerf millerf Nov 24, 2024

Choose a reason for hiding this comment

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

@miguelgrinberg I started implementing a solution in #319 .

However AggsProxy is used as well in another class. I am not sure how to tackle this one...

Choose a reason for hiding this comment

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

@millerf I have missed that second usage. Unfortunately that one is more difficult, because it uses a few other private items in addtion to the AggsProxy instance. The whole idea of updating a Search instance in place goes against our design.

The two ways I can think of to "clean" one of these objects are:

  • Create a brand new instance of the same class
  • Run a query that is guaranteed to return no results

Copy link

Choose a reason for hiding this comment

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

@millerf I have missed that second usage. Unfortunately that one is more difficult, because it uses a few other private items in addtion to the AggsProxy instance. The whole idea of updating a Search instance in place goes against our design.

The two ways I can think of to "clean" one of these objects are:

  • Create a brand new instance of the same class
  • Run a query that is guaranteed to return no results

Unfortunately I don't know enough about this plugin to get to do that... I am hoping someone will be able to help...

@aabanaag
Copy link

aabanaag commented Jul 7, 2024

Can we have this implemented? I'm encountering this issue currently and would love to get it fixed

@millerf
Copy link

millerf commented Nov 24, 2024

See this approach that should be more future-proof (see this comment by Elastic team)

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