diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..c5953c574 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,58 @@ +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 + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - 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\": \"${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 }}" + 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 + 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 + - 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: + 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 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..9f72f0cde --- /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/CHANGELOG b/CHANGELOG index bf7e58157..604d88dc5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,9 +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 7848c8184..cc01e4104 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "django-autocomplete-light", - "version": "3.5.1", + "version": "3.9.8rc25", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "django-autocomplete-light", - "version": "3.5.1", + "version": "3.9.8rc25", "license": "MIT", "dependencies": { "semver": "latest" diff --git a/package.json b/package.json index c99264b89..a5ac4fbc5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "django-autocomplete-light", - "version": "3.5.1", + "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/release.sh b/release.sh index 75e0742f9..3850a5a22 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 diff --git a/setup.py b/setup.py index 77b7185a6..4397a51f5 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.8rc25', description='Fresh autocompletes for Django', author='James Pic', author_email='jamespic@gmail.com', diff --git a/src/dal/autocomplete.py b/src/dal/autocomplete.py index 7f201b893..69ab5c30e 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 1b6e22675..65f8b0889 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}{self.component}>' + 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 000000000..e69de29bb diff --git a/src/dal_alight/admin.py b/src/dal_alight/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /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 000000000..4a93b1e27 --- /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 000000000..e69de29bb diff --git a/src/dal_alight/models.py b/src/dal_alight/models.py new file mode 100644 index 000000000..71a836239 --- /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 000000000..bd9d8ba4a --- /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 000000000..7ce503c2d --- /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 000000000..069a4cc22 --- /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''' +