From 29b8a8f8ca14f22d531e36eab50eb8235670bef4 Mon Sep 17 00:00:00 2001 From: jpic Date: Fri, 12 May 2023 18:02:17 +0200 Subject: [PATCH 01/10] Add trace to release script --- release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.sh b/release.sh index 75e0742f..3850a5a2 100755 --- a/release.sh +++ b/release.sh @@ -1,4 +1,4 @@ -#!/bin/bash -eu +#!/bin/bash -eux # Release a new version of django-autocomplete-light # # Usage: ./release.sh 1.2.3-rc0 From 86826b791f236c28a68ce14114ce7cb8688d4fe7 Mon Sep 17 00:00:00 2001 From: jpic Date: Fri, 12 May 2023 18:07:25 +0200 Subject: [PATCH 02/10] Add release script --- .github/workflows/release.yml | 45 +++++++++++++++++++++++++++++++++++ CHANGELOG | 6 ----- 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..0ac13781 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,45 @@ +name: Clean release +run-name: ${{ github.actor }} release +on: + push: + tags: + - '*' +jobs: + pypi-release: + runs-on: ubuntu-latest + container: + image: yourlabs/python + steps: + - name: Check out repository code + #run: | + # git clone https://github.com/yourlabs/django-autocomplete-light.git + # cd django-autocomplete-light + # git checkout ${GITHUB_REF} + uses: actions/checkout@v3 + - name: debug this crazy environment + run: | + set -x + npm install + chown -R root:root . + npm run compile-js + chown -R root:root . + npm run minify-js + chown -R root:root . + cp node_modules/select2/dist/css/*.css src/dal_select2/static/vendor/select2/dist/css/*.css + - name: Update version in setup.py and docs/conf.py + run: | + sed -i "s/version=[^,]*,/version='${GITHUB_REF##*/}',/" setup.py + sed -i "s/release = [^,]*,/release = '${GITHUB_REF##*/}'/" docs/conf.py + sed -i 's/version": "[^"]*"/version": "$short"/' package.json + short=$(echo ${GITHUB_REF##*/} | grep -Eo '[^.]+\.[^.]+') + sed -i "s/version = [^,]*,/version = '${GITHUB_REF##*/}'/" docs/conf.py + - name: Update changelog + run: echo -e "$(python changelog.py ${GITHUB_REF##*/})\n$(cat CHANGELOG)" > CHANGELOG + - uses: stefanzweifel/git-auto-commit-action@v4 + - name: Build python package + run: python setup.py sdist + - name: Twine upload + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + run: twine upload dist/django-autocomplete-light-${GITHUB_REF##*/}.tar.gz diff --git a/CHANGELOG b/CHANGELOG index bf7e5815..6c69aa95 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,9 +1,3 @@ - - - - - - 3.9.5-rc6 2023-04-07 Release 3.9.5-rc6 From bc3b60b46e686259beda217f4078f66c4651d3f3 Mon Sep 17 00:00:00 2001 From: jpic Date: Mon, 22 May 2023 12:20:33 +0200 Subject: [PATCH 03/10] release: github action update thx to @mmpx12 --- .github/workflows/release.yml | 37 ++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0ac13781..da1c9f33 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,31 +11,36 @@ jobs: image: yourlabs/python steps: - name: Check out repository code - #run: | - # git clone https://github.com/yourlabs/django-autocomplete-light.git - # cd django-autocomplete-light - # git checkout ${GITHUB_REF} uses: actions/checkout@v3 - - name: debug this crazy environment + with: + fetch-depth: 2 + - name: Build JS for dal_select2 run: | - set -x - npm install - chown -R root:root . - npm run compile-js - chown -R root:root . - npm run minify-js - chown -R root:root . - cp node_modules/select2/dist/css/*.css src/dal_select2/static/vendor/select2/dist/css/*.css + chown -R app:app . + su - app -c "cd $(pwd) && npm install && npm run build" - name: Update version in setup.py and docs/conf.py run: | + short=$(echo ${GITHUB_REF##*/} | grep -Eo '[^.]+\.[^.]+') + sed -i 's/version": "[^"]*"/version": "$short"/' package.json sed -i "s/version=[^,]*,/version='${GITHUB_REF##*/}',/" setup.py sed -i "s/release = [^,]*,/release = '${GITHUB_REF##*/}'/" docs/conf.py - sed -i 's/version": "[^"]*"/version": "$short"/' package.json - short=$(echo ${GITHUB_REF##*/} | grep -Eo '[^.]+\.[^.]+') sed -i "s/version = [^,]*,/version = '${GITHUB_REF##*/}'/" docs/conf.py - name: Update changelog run: echo -e "$(python changelog.py ${GITHUB_REF##*/})\n$(cat CHANGELOG)" > CHANGELOG - - uses: stefanzweifel/git-auto-commit-action@v4 + - name: Fix git dubious ownership + run: git config --global --add safe.directory /__w/django-autocomplete-light/django-autocomplete-light + - name: Tell git we are on master branch + run: git reset --soft origin/master + - name: Get last commit message + id: last-commit-message + run: echo "msg=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT + - name: Commit all generated files + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_options: '--amend --no-edit' + status_options: '--untracked-files=no' + commit_message: ${{ steps.last-commit-message.outputs.msg }} + skip_fetch: true - name: Build python package run: python setup.py sdist - name: Twine upload From fda792de54b03baab977e99b5798bf65d1f2eed8 Mon Sep 17 00:00:00 2001 From: jpic Date: Mon, 22 May 2023 20:10:07 +0000 Subject: [PATCH 04/10] Fixed ci --- .github/workflows/release.yml | 6 +++++- CHANGELOG | 1 + package.json | 2 +- setup.py | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index da1c9f33..2a0f8c8a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,7 +30,9 @@ jobs: - name: Fix git dubious ownership run: git config --global --add safe.directory /__w/django-autocomplete-light/django-autocomplete-light - name: Tell git we are on master branch - run: git reset --soft origin/master + run: | + git fetch origin master:refs/remotes/origin/master + git reset --soft origin/master - name: Get last commit message id: last-commit-message run: echo "msg=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT @@ -39,7 +41,9 @@ jobs: with: commit_options: '--amend --no-edit' status_options: '--untracked-files=no' + push_options: '--force' commit_message: ${{ steps.last-commit-message.outputs.msg }} + branch: master skip_fetch: true - name: Build python package run: python setup.py sdist diff --git a/CHANGELOG b/CHANGELOG index 6c69aa95..cae60c86 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ + 3.9.5-rc6 2023-04-07 Release 3.9.5-rc6 diff --git a/package.json b/package.json index c99264b8..59f32b60 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "django-autocomplete-light", - "version": "3.5.1", + "version": "$short", "description": "A fresh approach to autocomplete implementations, specially for Django. Status: v3 stable, 2.x.x stable, 1.x.x deprecated. Please DO regularely ping us with your link at #yourlabs IRC channel https://django-autocomplete-light.readthedocs.io/", "directories": { "doc": "docs" diff --git a/setup.py b/setup.py index 77b7185a..aa710aa1 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def read(fname): setup( name='django-autocomplete-light', - version='3.9.7', + version='3.9.8rc19', description='Fresh autocompletes for Django', author='James Pic', author_email='jamespic@gmail.com', From a62b16596e20792429d11d8a5974c3076a84a3d8 Mon Sep 17 00:00:00 2001 From: jpic Date: Tue, 23 May 2023 14:50:48 +0200 Subject: [PATCH 05/10] Release: Fix package.json sed --- .github/workflows/release.yml | 2 +- package.json | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a0f8c8a..527ac1d2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Update version in setup.py and docs/conf.py run: | short=$(echo ${GITHUB_REF##*/} | grep -Eo '[^.]+\.[^.]+') - sed -i 's/version": "[^"]*"/version": "$short"/' package.json + sed -i "s/version\": \"[^\"]*\"/version\": \"$short\"/" package.json sed -i "s/version=[^,]*,/version='${GITHUB_REF##*/}',/" setup.py sed -i "s/release = [^,]*,/release = '${GITHUB_REF##*/}'/" docs/conf.py sed -i "s/version = [^,]*,/version = '${GITHUB_REF##*/}'/" docs/conf.py diff --git a/package.json b/package.json index 59f32b60..35b20b11 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "django-autocomplete-light", - "version": "$short", + "version": "3.9", "description": "A fresh approach to autocomplete implementations, specially for Django. Status: v3 stable, 2.x.x stable, 1.x.x deprecated. Please DO regularely ping us with your link at #yourlabs IRC channel https://django-autocomplete-light.readthedocs.io/", "directories": { "doc": "docs" diff --git a/setup.py b/setup.py index aa710aa1..e21a0cb1 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def read(fname): setup( name='django-autocomplete-light', - version='3.9.8rc19', + version='3.9.8rc20', description='Fresh autocompletes for Django', author='James Pic', author_email='jamespic@gmail.com', From 1728a4f920460c9e2f38c6934da894277288347d Mon Sep 17 00:00:00 2001 From: jpic Date: Tue, 23 May 2023 14:55:09 +0200 Subject: [PATCH 06/10] Release: fix changelog.py call in CI --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 527ac1d2..d81ae6f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,9 @@ jobs: sed -i "s/release = [^,]*,/release = '${GITHUB_REF##*/}'/" docs/conf.py sed -i "s/version = [^,]*,/version = '${GITHUB_REF##*/}'/" docs/conf.py - name: Update changelog - run: echo -e "$(python changelog.py ${GITHUB_REF##*/})\n$(cat CHANGELOG)" > CHANGELOG + run: | + export GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" + echo -e "$(python changelog.py ${GITHUB_REF##*/})\n$(cat CHANGELOG)" > CHANGELOG - name: Fix git dubious ownership run: git config --global --add safe.directory /__w/django-autocomplete-light/django-autocomplete-light - name: Tell git we are on master branch From d2c751055c43a89b217269d075279d7620772db4 Mon Sep 17 00:00:00 2001 From: jpic Date: Tue, 23 May 2023 15:03:12 +0200 Subject: [PATCH 07/10] Release script: upgrade npm --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d81ae6f9..4088691b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,7 @@ jobs: - name: Build JS for dal_select2 run: | chown -R app:app . + npm update -g npm su - app -c "cd $(pwd) && npm install && npm run build" - name: Update version in setup.py and docs/conf.py run: | From fc23568776eec4df5e0f2a6e786a285113e55a35 Mon Sep 17 00:00:00 2001 From: jpic Date: Wed, 24 May 2023 08:58:43 +0200 Subject: [PATCH 08/10] Change version un package.json before building js --- .github/workflows/release.yml | 27 ++++++++++++++------------- CHANGELOG | 1 + package-lock.json | 4 ++-- package.json | 2 +- setup.py | 2 +- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4088691b..980cf41e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,18 +14,19 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 2 - - name: Build JS for dal_select2 - run: | - chown -R app:app . - npm update -g npm - su - app -c "cd $(pwd) && npm install && npm run build" + - name: Fix permissions + run: chown -R app:app . + - name: Update npm + run: npm update -g npm - name: Update version in setup.py and docs/conf.py run: | short=$(echo ${GITHUB_REF##*/} | grep -Eo '[^.]+\.[^.]+') - sed -i "s/version\": \"[^\"]*\"/version\": \"$short\"/" package.json + sed -i "s/version\": \"[^\"]*\"/version\": \"${GITHUB_REF##*/}\"/" package.json sed -i "s/version=[^,]*,/version='${GITHUB_REF##*/}',/" setup.py sed -i "s/release = [^,]*,/release = '${GITHUB_REF##*/}'/" docs/conf.py sed -i "s/version = [^,]*,/version = '${GITHUB_REF##*/}'/" docs/conf.py + - name: Build js + run: su - app -c "cd $(pwd) && npm install && npm run build" - name: Update changelog run: | export GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" @@ -39,6 +40,13 @@ jobs: - name: Get last commit message id: last-commit-message run: echo "msg=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT + - name: Build python package + run: python setup.py sdist + - name: Twine upload + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + run: twine upload dist/django-autocomplete-light-${GITHUB_REF##*/}.tar.gz - name: Commit all generated files uses: stefanzweifel/git-auto-commit-action@v4 with: @@ -48,10 +56,3 @@ jobs: commit_message: ${{ steps.last-commit-message.outputs.msg }} branch: master skip_fetch: true - - name: Build python package - run: python setup.py sdist - - name: Twine upload - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} - run: twine upload dist/django-autocomplete-light-${GITHUB_REF##*/}.tar.gz diff --git a/CHANGELOG b/CHANGELOG index cae60c86..604d88dc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,5 @@ + 3.9.5-rc6 2023-04-07 Release 3.9.5-rc6 diff --git a/package-lock.json b/package-lock.json index 7848c818..9c67f49c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "django-autocomplete-light", - "version": "3.5.1", + "version": "3.9.8rc24", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "django-autocomplete-light", - "version": "3.5.1", + "version": "3.9.8rc24", "license": "MIT", "dependencies": { "semver": "latest" diff --git a/package.json b/package.json index 35b20b11..5346087a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "django-autocomplete-light", - "version": "3.9", + "version": "3.9.8rc24", "description": "A fresh approach to autocomplete implementations, specially for Django. Status: v3 stable, 2.x.x stable, 1.x.x deprecated. Please DO regularely ping us with your link at #yourlabs IRC channel https://django-autocomplete-light.readthedocs.io/", "directories": { "doc": "docs" diff --git a/setup.py b/setup.py index e21a0cb1..ebbc376d 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def read(fname): setup( name='django-autocomplete-light', - version='3.9.8rc20', + version='3.9.8rc24', description='Fresh autocompletes for Django', author='James Pic', author_email='jamespic@gmail.com', From bbb535b14f2f33153c7f3d9bbb1c963c1e79184a Mon Sep 17 00:00:00 2001 From: jpic Date: Wed, 24 May 2023 09:05:06 +0200 Subject: [PATCH 09/10] Release action: fix changelog execution --- .github/workflows/release.yml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- setup.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 980cf41e..c5953c57 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: - name: Check out repository code uses: actions/checkout@v3 with: - fetch-depth: 2 + fetch-depth: 0 - name: Fix permissions run: chown -R app:app . - name: Update npm diff --git a/package-lock.json b/package-lock.json index 9c67f49c..cc01e410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "django-autocomplete-light", - "version": "3.9.8rc24", + "version": "3.9.8rc25", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "django-autocomplete-light", - "version": "3.9.8rc24", + "version": "3.9.8rc25", "license": "MIT", "dependencies": { "semver": "latest" diff --git a/package.json b/package.json index 5346087a..a5ac4fbc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "django-autocomplete-light", - "version": "3.9.8rc24", + "version": "3.9.8rc25", "description": "A fresh approach to autocomplete implementations, specially for Django. Status: v3 stable, 2.x.x stable, 1.x.x deprecated. Please DO regularely ping us with your link at #yourlabs IRC channel https://django-autocomplete-light.readthedocs.io/", "directories": { "doc": "docs" diff --git a/setup.py b/setup.py index ebbc376d..4397a51f 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def read(fname): setup( name='django-autocomplete-light', - version='3.9.8rc24', + version='3.9.8rc25', description='Fresh autocompletes for Django', author='James Pic', author_email='jamespic@gmail.com', From 966e5ac2868d7b75a26cbd35172df76f81bac859 Mon Sep 17 00:00:00 2001 From: jpic Date: Mon, 22 May 2023 11:57:21 +0200 Subject: [PATCH 10/10] New example with autocomplete-light instead of select2 --- .gitmodules | 3 ++ src/dal/autocomplete.py | 9 ++++ src/dal/widgets.py | 5 +- src/dal_alight/__init__.py | 0 src/dal_alight/admin.py | 3 ++ src/dal_alight/apps.py | 6 +++ src/dal_alight/migrations/__init__.py | 0 src/dal_alight/models.py | 3 ++ src/dal_alight/static/dal_alight | 1 + src/dal_alight/tests.py | 3 ++ src/dal_alight/views.py | 17 +++++++ src/dal_alight/widgets.py | 41 ++++++++++++++++ test_project/alight_foreign_key/admin.py | 16 +++++++ test_project/alight_foreign_key/forms.py | 14 ++++++ .../migrations/0001_initial.py | 48 +++++++++++++++++++ .../alight_foreign_key/migrations/__init__.py | 0 test_project/alight_foreign_key/models.py | 24 ++++++++++ test_project/alight_foreign_key/urls.py | 14 ++++++ test_project/settings/base.py | 2 + test_project/urls.py | 2 + 20 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 100644 src/dal_alight/__init__.py create mode 100644 src/dal_alight/admin.py create mode 100644 src/dal_alight/apps.py create mode 100644 src/dal_alight/migrations/__init__.py create mode 100644 src/dal_alight/models.py create mode 160000 src/dal_alight/static/dal_alight create mode 100644 src/dal_alight/tests.py create mode 100644 src/dal_alight/views.py create mode 100644 src/dal_alight/widgets.py create mode 100644 test_project/alight_foreign_key/admin.py create mode 100644 test_project/alight_foreign_key/forms.py create mode 100644 test_project/alight_foreign_key/migrations/0001_initial.py create mode 100644 test_project/alight_foreign_key/migrations/__init__.py create mode 100644 test_project/alight_foreign_key/models.py create mode 100644 test_project/alight_foreign_key/urls.py diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..9f72f0cd --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/dal_alight/static/dal_alight"] + path = src/dal_alight/static/dal_alight + url = https://yourlabs.io/oss/autocomplete-light.git diff --git a/src/dal/autocomplete.py b/src/dal/autocomplete.py index 7f201b89..69ab5c30 100644 --- a/src/dal/autocomplete.py +++ b/src/dal/autocomplete.py @@ -34,6 +34,15 @@ def _installed(*apps): return True +if _installed('dal_alight'): + from dal_alight.widgets import ( + ModelAlight, + ) + from dal_alight.views import ( + AlightQuerySetView, + ) + + if _installed('dal_select2'): from dal_select2.widgets import ( Select2, diff --git a/src/dal/widgets.py b/src/dal/widgets.py index 1b6e2267..65f8b088 100644 --- a/src/dal/widgets.py +++ b/src/dal/widgets.py @@ -154,7 +154,10 @@ def render(self, name, value, attrs=None, renderer=None, **kwargs): except (KeyError, TypeError): field_id = name conf = self.render_forward_conf(field_id) - return mark_safe(widget + conf) + html = widget + conf + if getattr(self, 'component', None): + html = f'<{self.component}>{html}' + return mark_safe(html) def _get_url(self): if self._url is None: diff --git a/src/dal_alight/__init__.py b/src/dal_alight/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/dal_alight/admin.py b/src/dal_alight/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/src/dal_alight/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/src/dal_alight/apps.py b/src/dal_alight/apps.py new file mode 100644 index 00000000..4a93b1e2 --- /dev/null +++ b/src/dal_alight/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DalAlightConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "dal_alight" diff --git a/src/dal_alight/migrations/__init__.py b/src/dal_alight/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/dal_alight/models.py b/src/dal_alight/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/src/dal_alight/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/src/dal_alight/static/dal_alight b/src/dal_alight/static/dal_alight new file mode 160000 index 00000000..bd9d8ba4 --- /dev/null +++ b/src/dal_alight/static/dal_alight @@ -0,0 +1 @@ +Subproject commit bd9d8ba4a5e8c872426c0d51d8c1ec5296d3272d diff --git a/src/dal_alight/tests.py b/src/dal_alight/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/src/dal_alight/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/dal_alight/views.py b/src/dal_alight/views.py new file mode 100644 index 00000000..069a4cc2 --- /dev/null +++ b/src/dal_alight/views.py @@ -0,0 +1,17 @@ +from django import http +from dal.views import BaseQuerySetView + + + +class AlightQuerySetView(BaseQuerySetView): + def render_to_response(self, context): + """Return a JSON response in Select2 format.""" + html = [] + for result in context['object_list']: + html.append(f''' +
+ {self.get_result_label(result)} +
+ ''') + + return http.HttpResponse(html) diff --git a/src/dal_alight/widgets.py b/src/dal_alight/widgets.py new file mode 100644 index 00000000..f1a7eb03 --- /dev/null +++ b/src/dal_alight/widgets.py @@ -0,0 +1,41 @@ +from django import forms +from django.urls import reverse +from dal.widgets import ( + QuerySetSelectMixin, +) + + +class AlightWidgetMixin: + component = 'autocomplete-select' + + @property + def media(self): + return forms.Media( + css=dict(all=['dal_alight/autocomplete-light.css']), + js=['dal_alight/autocomplete-light.js'], + ) + + def render(self, name, value, attrs=None, renderer=None, **kwargs): + # this prevents ModelChoiceIterator from rendering empty option that we + # don't need with autocompletes + self.choices.field.empty_label = None + + attrs = attrs or {} + attrs.setdefault('slot', 'select') + widget = super().render(name, value, attrs=attrs, renderer=renderer, + **kwargs) + deck = '
' + input = f''' + + + + ''' + html = widget + deck + input + return html + + + +class ModelAlight(QuerySetSelectMixin, + AlightWidgetMixin, + forms.Select): + pass diff --git a/test_project/alight_foreign_key/admin.py b/test_project/alight_foreign_key/admin.py new file mode 100644 index 00000000..ea547b69 --- /dev/null +++ b/test_project/alight_foreign_key/admin.py @@ -0,0 +1,16 @@ +from django.contrib import admin + +from .forms import TForm +from .models import TModel + + +class TestInline(admin.TabularInline): + form = TForm + model = TModel + fk_name = 'for_inline' + + +class TestAdmin(admin.ModelAdmin): + form = TForm + inlines = [TestInline] +admin.site.register(TModel, TestAdmin) diff --git a/test_project/alight_foreign_key/forms.py b/test_project/alight_foreign_key/forms.py new file mode 100644 index 00000000..0fb0bf8a --- /dev/null +++ b/test_project/alight_foreign_key/forms.py @@ -0,0 +1,14 @@ +from dal import autocomplete + +from django import forms + +from .models import TModel + + +class TForm(forms.ModelForm): + class Meta: + model = TModel + fields = ('name', 'test') + widgets = { + 'test': autocomplete.ModelAlight(url='alight_fk') + } diff --git a/test_project/alight_foreign_key/migrations/0001_initial.py b/test_project/alight_foreign_key/migrations/0001_initial.py new file mode 100644 index 00000000..02ca68a1 --- /dev/null +++ b/test_project/alight_foreign_key/migrations/0001_initial.py @@ -0,0 +1,48 @@ +# Generated by Django 4.2.1 on 2023-05-22 09:02 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="TModel", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=200)), + ( + "for_inline", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="inline_test_models", + to="alight_foreign_key.tmodel", + ), + ), + ( + "test", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="related_test_models", + to="alight_foreign_key.tmodel", + ), + ), + ], + ), + ] diff --git a/test_project/alight_foreign_key/migrations/__init__.py b/test_project/alight_foreign_key/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test_project/alight_foreign_key/models.py b/test_project/alight_foreign_key/models.py new file mode 100644 index 00000000..8d843e3b --- /dev/null +++ b/test_project/alight_foreign_key/models.py @@ -0,0 +1,24 @@ +from django.db import models + + +class TModel(models.Model): + name = models.CharField(max_length=200) + + test = models.ForeignKey( + 'self', + models.CASCADE, + null=True, + blank=True, + related_name='related_test_models' + ) + + for_inline = models.ForeignKey( + 'self', + models.CASCADE, + null=True, + blank=True, + related_name='inline_test_models' + ) + + def __str__(self): + return self.name diff --git a/test_project/alight_foreign_key/urls.py b/test_project/alight_foreign_key/urls.py new file mode 100644 index 00000000..55cf2d52 --- /dev/null +++ b/test_project/alight_foreign_key/urls.py @@ -0,0 +1,14 @@ +from dal import autocomplete + +from django.urls import re_path as url + +from .models import TModel + + +urlpatterns = [ + url( + 'test-autocomplete/$', + autocomplete.AlightQuerySetView.as_view(model=TModel), + name='alight_fk', + ), +] diff --git a/test_project/settings/base.py b/test_project/settings/base.py index 897d9915..15214a27 100644 --- a/test_project/settings/base.py +++ b/test_project/settings/base.py @@ -63,6 +63,7 @@ def get_databases(base_dir): 'django.contrib.staticfiles', # test apps + 'alight_foreign_key', 'select2_foreign_key', 'select2_list', 'select2_generic_foreign_key', @@ -83,6 +84,7 @@ def get_databases(base_dir): # Autocomplete 'dal', # Enable plugins + 'dal_alight', 'dal_select2', 'queryset_sequence', 'dal_queryset_sequence', diff --git a/test_project/urls.py b/test_project/urls.py index d52e0753..8a06a2a5 100644 --- a/test_project/urls.py +++ b/test_project/urls.py @@ -11,6 +11,8 @@ url(r'^admin/', admin.site.urls), url(r'^login/', views.LoginView.as_view()), + url(r'^alight_foreign_key/', include('alight_foreign_key.urls')), + url(r'^dal_single/', views.BasicDALView, name='isolated_dal_single'), url(r'^dal_multi/', views.BasicDALMultiView, name='isolated_dal_multi'),