Compare commits

...
Author SHA1 Message Date
Giteabot 39e6345693 chore(deps): update dependency djlint to v1.40.1 2026-07-07 07:38:32 +00:00
wxiaoguangandGitHub a74f618ade fix: minio init check (#38355)
Fix the buggy behavior introduced by "S3: log human readable error on connection failure (#26856)"
2026-07-07 07:32:25 +00:00
2b89e2ac97 fix(pulls): add branch-name option for DEFAULT_TITLE_SOURCE (#38356)
Adds a new `branch-name` value for the `[repository.pull-request]`
`DEFAULT_TITLE_SOURCE` setting that always uses the normalized branch
name as the PR title, regardless of commit count.

Fix #38317

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-07-07 07:08:05 +00:00
wxiaoguangandGitHub 26bff7f47e fix: org project view assignee list (#38357)
fix #38129
2026-07-07 14:40:12 +08:00
14 changed files with 169 additions and 181 deletions
+1
View File
@@ -1191,6 +1191,7 @@ LEVEL = Info
;; Default source for the pull request title when opening a new PR.
;; "first-commit" uses the oldest commit's summary.
;; "auto" uses commit's summary if the PR only has one commit, normalizes the branch name if multiple commits.
;; "branch-name" always uses the PR's branch name.
;DEFAULT_TITLE_SOURCE = auto
;;
;; Delay mergeable check until page view or API access, for pull requests that have not been updated in the specified days when their base branches get updated.
+1
View File
@@ -22,6 +22,7 @@ const (
const (
RepoPRTitleSourceFirstCommit = "first-commit"
RepoPRTitleSourceAuto = "auto"
RepoPRTitleSourceBranchName = "branch-name"
)
// ItemsPerPage maximum items per page in forks, watchers and stars of a repo
+27 -33
View File
@@ -6,6 +6,7 @@ package storage
import (
"context"
"crypto/tls"
"errors"
"fmt"
"io"
"net/http"
@@ -47,40 +48,42 @@ type MinioStorage struct {
basePath string
}
func convertMinioErr(err error) error {
func convertMinioErr(err error, optMsg ...string) error {
if err == nil {
return nil
}
errResp, ok := err.(minio.ErrorResponse)
wrapErr := func(err error) error {
if len(optMsg) == 0 {
return err
}
return fmt.Errorf("%s: %w", optMsg[0], err)
}
errResp, ok := errors.AsType[minio.ErrorResponse](err)
if !ok {
return err
return wrapErr(err)
}
// Convert two responses to standard analogues
switch errResp.Code {
case "NoSuchKey":
return os.ErrNotExist
return wrapErr(os.ErrNotExist)
case "AccessDenied":
return os.ErrPermission
return wrapErr(os.ErrPermission)
}
return err
}
var getBucketVersioning = func(ctx context.Context, minioClient *minio.Client, bucket string) error {
_, err := minioClient.GetBucketVersioning(ctx, bucket)
return err
return wrapErr(err)
}
// NewMinioStorage returns a minio storage
func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage, error) {
config := cfg.MinioConfig
log.Info("Creating minio storage at %s:%s with base path %s", config.Endpoint, config.Bucket, config.BasePath)
if config.ChecksumAlgorithm != "" && config.ChecksumAlgorithm != "default" && config.ChecksumAlgorithm != "md5" {
return nil, fmt.Errorf("invalid minio checksum algorithm: %s", config.ChecksumAlgorithm)
}
log.Info("Creating Minio storage at %s:%s with base path %s", config.Endpoint, config.Bucket, config.BasePath)
var lookup minio.BucketLookupType
switch config.BucketLookUpType {
case "auto", "":
@@ -93,6 +96,13 @@ func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage,
return nil, fmt.Errorf("invalid minio bucket lookup type: %s", config.BucketLookUpType)
}
// The request error message is something like:
// * "The request signature we calculated does not match the signature you provided. Check your key and signing method."
// It doesn't contain useful information to site admin, so here we wrap the error with our error message
// to tell the site admin what is the problem.
makeErrMsg := func(hint string) string {
return fmt.Sprintf("ObjectStorage.%s: endpoint=%s, location=%s, bucket=%s", hint, config.Endpoint, config.Location, config.Bucket)
}
minioClient, err := minio.New(config.Endpoint, &minio.Options{
Creds: buildMinioCredentials(config),
Secure: config.UseSSL,
@@ -101,37 +111,21 @@ func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage,
BucketLookup: lookup,
})
if err != nil {
return nil, convertMinioErr(err)
}
// The GetBucketVersioning is only used for checking whether the Object Storage parameters are generally good. It doesn't need to succeed.
// The assumption is that if the API returns the HTTP code 400, then the parameters could be incorrect.
// Otherwise even if the request itself fails (403, 404, etc), the code should still continue because the parameters seem "good" enough.
// Keep in mind that GetBucketVersioning requires "owner" to really succeed, so it can't be used to check the existence.
// Not using "BucketExists (HeadBucket)" because it doesn't include detailed failure reasons.
err = getBucketVersioning(ctx, minioClient, config.Bucket)
if err != nil {
errResp, ok := err.(minio.ErrorResponse)
if !ok {
return nil, err
}
if errResp.StatusCode == http.StatusBadRequest {
log.Error("S3 storage connection failure at %s:%s with base path %s and region: %s", config.Endpoint, config.Bucket, config.Location, errResp.Message)
return nil, err
}
return nil, convertMinioErr(err, makeErrMsg("NewClient"))
}
// Check to see if we already own this bucket
exists, err := minioClient.BucketExists(ctx, config.Bucket)
if err != nil {
return nil, convertMinioErr(err)
return nil, convertMinioErr(err, makeErrMsg("BucketExists"))
}
// If the bucket doesn't exist, try to create one
if !exists {
if err := minioClient.MakeBucket(ctx, config.Bucket, minio.MakeBucketOptions{
Region: config.Location,
}); err != nil {
return nil, convertMinioErr(err)
return nil, convertMinioErr(err, makeErrMsg("MakeBucket"))
}
}
+4 -20
View File
@@ -4,16 +4,13 @@
package storage
import (
"context"
"net/http"
"net/http/httptest"
"os"
"testing"
"gitea.dev/modules/setting"
"gitea.dev/modules/test"
"github.com/minio/minio-go/v7"
"github.com/stretchr/testify/assert"
)
@@ -84,31 +81,18 @@ func TestMinioStoragePath(t *testing.T) {
}
func TestS3StorageBadRequest(t *testing.T) {
if os.Getenv("CI") == "" {
t.Skip("S3Storage not present outside of CI")
return
}
endpoint := test.ExternalServiceHTTP(t, "TEST_MINIO_ENDPOINT", "minio:9000")
cfg := &setting.Storage{
MinioConfig: setting.MinioStorageConfig{
Endpoint: "minio:9000",
Endpoint: endpoint,
AccessKeyID: "123456",
SecretAccessKey: "12345678",
SecretAccessKey: "invalid-secret",
Bucket: "bucket",
Location: "us-east-1",
},
}
message := "ERROR"
old := getBucketVersioning
defer func() { getBucketVersioning = old }()
getBucketVersioning = func(ctx context.Context, minioClient *minio.Client, bucket string) error {
return minio.ErrorResponse{
StatusCode: http.StatusBadRequest,
Code: "FixtureError",
Message: message,
}
}
_, err := NewStorage(setting.MinioStorageType, cfg)
assert.ErrorContains(t, err, message)
assert.ErrorContains(t, err, "ObjectStorage.BucketExists: endpoint="+endpoint)
}
func TestMinioCredentials(t *testing.T) {
+1 -1
View File
@@ -5,7 +5,7 @@ requires-python = ">=3.10"
[dependency-groups]
dev = [
"djlint==1.40.0",
"djlint==1.40.1",
"yamllint==1.38.0",
"zizmor==1.26.1",
]
+1 -1
View File
@@ -450,7 +450,7 @@ func ViewProject(ctx *context.Context) {
ctx.Data["MilestoneID"] = milestoneID
// Get assignees.
assigneeUsers, err := project_service.LoadIssuesAssigneesForProject(ctx, issuesMap)
assigneeUsers, err := project_service.LoadIssuesAssigneesForProject(ctx, project.ID)
if err != nil {
ctx.ServerError("LoadIssuesAssigneesForProject", err)
return
+3 -1
View File
@@ -383,7 +383,9 @@ func autoTitleFromBranchName(name string) string {
func prepareNewPullRequestTitleContent(ci *git_service.CompareInfo, commits []*git_model.SignCommitWithStatuses, defaultTitleSource string) (title, content string) {
useFirstCommitAsTitle := len(commits) == 1 || (defaultTitleSource == setting.RepoPRTitleSourceFirstCommit && len(commits) > 0)
if useFirstCommitAsTitle {
if defaultTitleSource == setting.RepoPRTitleSourceBranchName {
title = ci.HeadRef.ShortName()
} else if useFirstCommitAsTitle {
// the "commits" are from "ShowPrettyFormatLogToList", which is ordered from newest to oldest, here take the oldest one
c := commits[len(commits)-1]
title = c.UserCommit.GitCommit.MessageTitle()
+4
View File
@@ -70,6 +70,10 @@ func TestNewPullRequestTitleContent(t *testing.T) {
assert.Equal(t, "Head branch", title)
assert.Empty(t, content)
title, content = prepareNewPullRequestTitleContent(ci, nil, setting.RepoPRTitleSourceBranchName)
assert.Equal(t, "head-branch", title)
assert.Empty(t, content)
// single commit
title, content = prepareNewPullRequestTitleContent(ci, []*git_model.SignCommitWithStatuses{mockCommit("single-commit-title\nbody")}, setting.RepoPRTitleSourceAuto)
assert.Equal(t, "single-commit-title", title)
+1 -21
View File
@@ -14,17 +14,6 @@ import (
"gitea.dev/services/context"
)
type userSearchInfo struct {
UserID int64 `json:"user_id"`
UserName string `json:"username"`
AvatarLink string `json:"avatar_link"`
FullName string `json:"full_name"`
}
type userSearchResponse struct {
Results []*userSearchInfo `json:"results"`
}
func IssuePullPosters(ctx *context.Context) {
isPullList := ctx.PathParam("type") == "pulls"
issuePosters(ctx, isPullList)
@@ -46,14 +35,5 @@ func issuePosters(ctx *context.Context, isPullList bool) {
posters = append(posters, ctx.Doer)
}
}
posters = shared_user.MakeSelfOnTop(ctx.Doer, posters)
resp := &userSearchResponse{}
resp.Results = make([]*userSearchInfo, len(posters))
for i, user := range posters {
resp.Results[i] = &userSearchInfo{UserID: user.ID, UserName: user.Name, AvatarLink: user.AvatarLink(ctx)}
resp.Results[i].FullName = user.FullName
}
ctx.JSON(http.StatusOK, resp)
ctx.JSON(http.StatusOK, shared_user.ToSearchUserResponse(ctx, ctx.Doer, posters))
}
+33 -11
View File
@@ -11,22 +11,44 @@ import (
"gitea.dev/models/user"
)
type SearchUserInfo struct {
UserID int64 `json:"user_id"`
UserName string `json:"username"`
AvatarLink string `json:"avatar_link"`
FullName string `json:"full_name"`
}
type SearchUserResponse struct {
Results []*SearchUserInfo `json:"results"`
}
func MakeSelfOnTop(doer *user.User, users []*user.User) []*user.User {
if doer != nil {
idx := slices.IndexFunc(users, func(u *user.User) bool {
return u.ID == doer.ID
})
if idx > 0 {
newUsers := make([]*user.User, len(users))
newUsers[0] = users[idx]
copy(newUsers[1:], users[:idx])
copy(newUsers[idx+1:], users[idx+1:])
return newUsers
}
if doer == nil {
return users
}
idx := slices.IndexFunc(users, func(u *user.User) bool {
return u.ID == doer.ID
})
if idx > 0 {
newUsers := make([]*user.User, len(users))
newUsers[0] = users[idx]
copy(newUsers[1:], users[:idx])
copy(newUsers[idx+1:], users[idx+1:])
return newUsers
}
return users
}
func ToSearchUserResponse(ctx context.Context, self *user.User, users []*user.User) (ret *SearchUserResponse) {
infos := MakeSelfOnTop(self, users)
resp := &SearchUserResponse{Results: make([]*SearchUserInfo, len(infos))}
for i, u := range infos {
resp.Results[i] = &SearchUserInfo{UserID: u.ID, UserName: u.Name, AvatarLink: u.AvatarLink(ctx)}
resp.Results[i].FullName = u.FullName
}
return resp
}
// GetFilterUserIDByName tries to get the user ID from the given username.
// Before, the "issue filter" passes user ID to query the list, but in many cases, it's impossible to pre-fetch the full user list.
// So it's better to make it work like GitHub: users could input username directly.
+8 -20
View File
@@ -13,8 +13,9 @@ import (
issues_model "gitea.dev/models/issues"
project_model "gitea.dev/models/project"
user_model "gitea.dev/models/user"
"gitea.dev/modules/container"
"gitea.dev/modules/optional"
"xorm.io/builder"
)
// MoveIssuesOnProjectColumn moves or keeps issues in a column and sorts them inside that column
@@ -100,28 +101,15 @@ func MoveIssuesOnProjectColumn(ctx context.Context, doer *user_model.User, colum
})
}
func LoadIssuesAssigneesForProject(ctx context.Context, issuesMap map[int64]issues_model.IssueList) ([]*user_model.User, error) {
var issueList issues_model.IssueList
for _, colIssues := range issuesMap {
issueList = append(issueList, colIssues...)
}
err := issueList.LoadAssignees(ctx)
func LoadIssuesAssigneesForProject(ctx context.Context, projectID int64) (users []*user_model.User, _ error) {
sub := builder.Select("distinct issue_assignees.assignee_id").
From("project_issue").Join("INNER", "issue_assignees", "project_issue.issue_id=issue_assignees.issue_id").
Where(builder.Eq{"project_issue.project_id": projectID})
err := db.GetEngine(ctx).Table("`user`").Where(builder.In("id", sub)).Find(&users)
if err != nil {
return nil, err
}
users := make([]*user_model.User, 0, len(issueList))
usersAdded := container.Set[int64]{}
for _, issue := range issueList {
for _, assignee := range issue.Assignees {
if !usersAdded.Contains(assignee.ID) {
usersAdded.Add(assignee.ID)
users = append(users, assignee)
}
}
}
slices.SortFunc(users, func(a, b *user_model.User) int {
return strings.Compare(a.Name, b.Name)
})
slices.SortFunc(users, func(a, b *user_model.User) int { return strings.Compare(a.Name, b.Name) })
return users, nil
}
-15
View File
@@ -15,7 +15,6 @@ import (
user_model "gitea.dev/models/user"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_Projects(t *testing.T) {
@@ -198,18 +197,4 @@ func Test_Projects(t *testing.T) {
assert.Len(t, columnIssues[3], 1)
})
})
t.Run("LoadIssuesAssigneesForProject", func(t *testing.T) {
issuesMap := map[int64]issues_model.IssueList{}
issue1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
issue6 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 6})
issuesMap[1] = issues_model.IssueList{issue1}
issuesMap[2] = issues_model.IssueList{issue6}
assignees, err := LoadIssuesAssigneesForProject(t.Context(), issuesMap)
require.NoError(t, err)
require.Len(t, assignees, 3)
require.Equal(t, "user1", assignees[0].Name)
require.Equal(t, "user10", assignees[1].Name)
require.Equal(t, "user2", assignees[2].Name)
})
}
+27
View File
@@ -10,12 +10,14 @@ import (
"strings"
"testing"
"gitea.dev/models/db"
issues_model "gitea.dev/models/issues"
project_model "gitea.dev/models/project"
repo_model "gitea.dev/models/repo"
"gitea.dev/models/unit"
"gitea.dev/models/unittest"
user_model "gitea.dev/models/user"
project "gitea.dev/services/projects"
"gitea.dev/tests"
"github.com/PuerkitoBio/goquery"
@@ -365,3 +367,28 @@ func TestOrgProjectFilterByMilestone(t *testing.T) {
assert.NotContains(t, issueIDs, issue17.ID)
})
}
func TestProjects(t *testing.T) {
defer tests.PrepareTestEnv(t)()
t.Run("LoadIssuesAssigneesForProject", func(t *testing.T) {
_ = db.TruncateBeans(t.Context(), "project_issue", "issue_assignees")
_ = db.Insert(t.Context(),
&project_model.ProjectIssue{ProjectID: 1, IssueID: 1},
&project_model.ProjectIssue{ProjectID: 1, IssueID: 6},
)
_ = db.Insert(t.Context(),
&issues_model.IssueAssignees{IssueID: 1, AssigneeID: 1},
&issues_model.IssueAssignees{IssueID: 1, AssigneeID: 10},
&issues_model.IssueAssignees{IssueID: 1, AssigneeID: 2},
&issues_model.IssueAssignees{IssueID: 6, AssigneeID: 2},
&issues_model.IssueAssignees{IssueID: 6, AssigneeID: 4},
)
assignees, err := project.LoadIssuesAssigneesForProject(t.Context(), 1)
require.NoError(t, err)
require.Len(t, assignees, 4)
require.Equal(t, "user1", assignees[0].Name)
require.Equal(t, "user10", assignees[1].Name)
require.Equal(t, "user2", assignees[2].Name)
require.Equal(t, "user4", assignees[3].Name)
})
}
Generated
+58 -58
View File
@@ -39,7 +39,7 @@ wheels = [
[[package]]
name = "djlint"
version = "1.40.0"
version = "1.40.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
@@ -52,63 +52,63 @@ dependencies = [
{ name = "tomli", marker = "python_full_version < '3.11'" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ee/b3/1f89f154905e67fc8777d668dfaeb0f6a817b7d4579b024aa9d7d4ad711f/djlint-1.40.0.tar.gz", hash = "sha256:d9f51a2f906a8eb0e53335d2f93f971c35cc04f37ba5447cf78daca0fd761473", size = 57282, upload-time = "2026-07-01T02:51:34.293Z" }
sdist = { url = "https://files.pythonhosted.org/packages/1b/ad/a2aa556b5608d69b918ef169bc19c0da2ce59186ce557aaf568d25de4c7b/djlint-1.40.1.tar.gz", hash = "sha256:a5b090d9d3792f58dfaf0218e2a885f86a381a54a54dcd4ad1c7b4a2bbcb2f1f", size = 58779, upload-time = "2026-07-01T22:59:37.185Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/bc/42/63ee559924919e06accdf81450197c53e81090e1f5be96ecbe08ba24779f/djlint-1.40.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d5d1180542f8ca76c89d6ef4c1f847dcd8db5bb24201557ec894ac18d7e97b87", size = 540090, upload-time = "2026-07-01T02:50:26.051Z" },
{ url = "https://files.pythonhosted.org/packages/7a/a4/1d75d78cec6d945964231167c98e6a9a15d6890492ed6678e60af691d5ea/djlint-1.40.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7dc0db6557b80f3f41d5659db400e143d57b7d3e6057ed60cbe5f60fe7b6c2a", size = 515425, upload-time = "2026-07-01T02:50:27.714Z" },
{ url = "https://files.pythonhosted.org/packages/3b/6e/7ddc075e6379e73b6682b1e263b1b713c96583f201b8d4461a74d6debaf9/djlint-1.40.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:876e947d6ac99e34aa6958ae6683a0cba69799dacbf611e7456a03092f298d5d", size = 551982, upload-time = "2026-07-01T02:50:28.775Z" },
{ url = "https://files.pythonhosted.org/packages/02/a7/109af9c2d0bcf4c989d972cea067f07ab911fc81733214bb6c3da6330ec4/djlint-1.40.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41fc0dc9240ed2167168a6b72d7103a62bdefcf452e8c7b501dd6eea71145311", size = 570876, upload-time = "2026-07-01T02:50:29.81Z" },
{ url = "https://files.pythonhosted.org/packages/bb/ad/fb467857dc2dd5cb1039f2dfd1f1a45c6c85d02585a02d3cf8b9b63dcd6a/djlint-1.40.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1f9224166c5c884759b3aecc99b41367d5d430b708926ad7f3ed460a54d87e1d", size = 559351, upload-time = "2026-07-01T02:50:30.869Z" },
{ url = "https://files.pythonhosted.org/packages/68/cc/b562b77bf83ac08b224853a544c8a86e443c0fd589cdabbeb63ed4f7215f/djlint-1.40.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1994660ba04f4a4afb73e93a1c742df9a33c6f191910bf5e6f00776758c78e3e", size = 580119, upload-time = "2026-07-01T02:50:32.174Z" },
{ url = "https://files.pythonhosted.org/packages/28/f1/a4d376071e31c1a957e75f86db9fb24c4870021c70cd8b0c3fa62edbf6cf/djlint-1.40.0-cp310-cp310-win32.whl", hash = "sha256:d3ea7bea91ba6f6300b5fb80c88c2c69e1c165927a84e4f6ea622e3b85636c3a", size = 413072, upload-time = "2026-07-01T02:50:33.442Z" },
{ url = "https://files.pythonhosted.org/packages/d5/41/5552ab0255da932a93cdc4e146007a8fa6e46238662faa3164eba0302ddf/djlint-1.40.0-cp310-cp310-win_amd64.whl", hash = "sha256:e761c1b037dd8f6e0e94e64894b84839631786c369f2c4fb4f7fdbd3552d130f", size = 460173, upload-time = "2026-07-01T02:50:34.584Z" },
{ url = "https://files.pythonhosted.org/packages/c2/12/b3751355db32de6e57fe6a423db271248af7104c78ec3e3f226d3e25bd12/djlint-1.40.0-cp310-cp310-win_arm64.whl", hash = "sha256:fc0e5e466cdb0786a259ce1f21393fc0627dc527cd0b7a163cfd63199ee0a431", size = 407951, upload-time = "2026-07-01T02:50:35.807Z" },
{ url = "https://files.pythonhosted.org/packages/d6/89/5f752af2abd1823ca121b263f2a8276f450b62cb7160fac2951405ee2f5b/djlint-1.40.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfa611e7495226c20603b0ff13382a0e273c38532e99d179702f593651be908", size = 529113, upload-time = "2026-07-01T02:50:37.325Z" },
{ url = "https://files.pythonhosted.org/packages/af/fa/dce4774a2414940272414306558f086fc6ee4a7e88793714cd9cc67242fa/djlint-1.40.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2c15bc87eec0237a8f3216c868210e09c96a27ffc937f1621488c15643517482", size = 505266, upload-time = "2026-07-01T02:50:38.8Z" },
{ url = "https://files.pythonhosted.org/packages/5b/5e/a806b99ab485e79b556fed92028bb611c3c406678f9aad69ba0832cb83cf/djlint-1.40.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1cce168304fbe813e604ed96c2124088b2700510d3ccf2c211225512fc5452b", size = 539674, upload-time = "2026-07-01T02:50:40.051Z" },
{ url = "https://files.pythonhosted.org/packages/70/84/39d197577c41728b8b0fd585e4cace3d1c338cba64619acbc1c6413f9bc1/djlint-1.40.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d867a137bc12dadfc062159e323f8214ab41e20a639b7a5788298e97b578f82", size = 558183, upload-time = "2026-07-01T02:50:41.276Z" },
{ url = "https://files.pythonhosted.org/packages/91/67/8c27b8ce380e5aa169302b84f1ed77bcc24a4604eef6257c6deebde19463/djlint-1.40.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f5cda2778bf39be76c0b852ee6c829ca359f7563b732cfa9c609ee776b7fc8f2", size = 546565, upload-time = "2026-07-01T02:50:42.533Z" },
{ url = "https://files.pythonhosted.org/packages/83/f3/d11de638138e832600c39a4378e581c0047f18b4a862e6d6b39dfcdbc410/djlint-1.40.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:08bb8436bca2ab24e12efde093fcd80d7d6a44e2693c238bc9125ad48168981e", size = 569004, upload-time = "2026-07-01T02:50:43.767Z" },
{ url = "https://files.pythonhosted.org/packages/77/3c/47cf29bca86d056d192b3fe97aeb1eda758c283836d48db8e2dcaf7c6038/djlint-1.40.0-cp311-cp311-win32.whl", hash = "sha256:6529f24ff238d578aa3b7997dad1959ecfca20048ff1298474455d06bbc4937c", size = 412338, upload-time = "2026-07-01T02:50:45.22Z" },
{ url = "https://files.pythonhosted.org/packages/99/28/15884221271bef2dfaa3bf97ba4596f2b494cf9cd8e6253b71d6c5dc26e4/djlint-1.40.0-cp311-cp311-win_amd64.whl", hash = "sha256:bd3c61d4d86c1141835285a7a3bf67edf4db3bd38a56ed3ceb1018e817859e9d", size = 460329, upload-time = "2026-07-01T02:50:46.377Z" },
{ url = "https://files.pythonhosted.org/packages/68/07/2c34dce928205e94982b1cccab29c7db1b512b5f13835b7915925aa10d19/djlint-1.40.0-cp311-cp311-win_arm64.whl", hash = "sha256:19c5eb78b4c17c63da2bbb7822a8c2ff9de4946099a1017383e6a2d1ec124938", size = 406568, upload-time = "2026-07-01T02:50:47.695Z" },
{ url = "https://files.pythonhosted.org/packages/82/e2/fa08ab453f38fcbc0e7ad9ea3b2373996306d5f6635c936e6cc4f201fa50/djlint-1.40.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ac5e123846c316bd48cfaa6aec0264a0a25964f704ed19929079d39703aed1ff", size = 540920, upload-time = "2026-07-01T02:50:48.876Z" },
{ url = "https://files.pythonhosted.org/packages/6c/3b/fe79c2349778d87c6169adf7c8310c278de1623df60608fcffd368884e88/djlint-1.40.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbcaf528b85c0fe9c7b5bf022a599731550c89da8d2c480b35021094a22a77ee", size = 511977, upload-time = "2026-07-01T02:50:49.975Z" },
{ url = "https://files.pythonhosted.org/packages/83/b3/fe0048e6d025a0cb08ccc9ec32de248e6886b2b43f5741d6f664b8ff0887/djlint-1.40.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18937b21182388c9fa19bd135c978cc66dd7d0492eb670bb5fc9dd88f15348e9", size = 542379, upload-time = "2026-07-01T02:50:51.141Z" },
{ url = "https://files.pythonhosted.org/packages/03/85/9d09113396991c6c04696b7c76174bdfabd0adc0a8f1509fe23a04a427ca/djlint-1.40.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc7caeca3d947ed37b45e32dbdeb35bae615a01d080f06f9469ca3300f3037a0", size = 567077, upload-time = "2026-07-01T02:50:52.29Z" },
{ url = "https://files.pythonhosted.org/packages/53/f2/aad40d337880d86294e967ae92295852ac16bfeb87be09b95a092504c478/djlint-1.40.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2f4d241cf5661112465d12dbdce310b30d90f1a30a2577a82c99b53042f88888", size = 549798, upload-time = "2026-07-01T02:50:53.582Z" },
{ url = "https://files.pythonhosted.org/packages/bf/54/d5effa3b5f1e39e7414ff700a1463c484b6660dd6945b49030e756c1b59f/djlint-1.40.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1c632aef08a3bc07298853077beb283786987fb8c8626b0055319a23b0297d13", size = 576762, upload-time = "2026-07-01T02:50:55.054Z" },
{ url = "https://files.pythonhosted.org/packages/5a/dd/48f9cf365be5d1b8207b33343d0ed769f73126e185ccbc92cd5df662f002/djlint-1.40.0-cp312-cp312-win32.whl", hash = "sha256:411a590f123603c90a3204eb9a06aeb19dc280cff1ce13abe8ccb6392d1a405c", size = 415689, upload-time = "2026-07-01T02:50:56.64Z" },
{ url = "https://files.pythonhosted.org/packages/4f/9c/e219b04ceb59e372f89d79ab60f6a45986a59982a51971819ae18a99e185/djlint-1.40.0-cp312-cp312-win_amd64.whl", hash = "sha256:7846ac8b5c6b4de5208ef4c4eb086b80fef9d128c28733cd393b30a30a96112c", size = 462298, upload-time = "2026-07-01T02:50:57.764Z" },
{ url = "https://files.pythonhosted.org/packages/73/e4/f20e97cc6ea609a05f630cdfd468806d8cdf6246f8f02a042448009a4fd6/djlint-1.40.0-cp312-cp312-win_arm64.whl", hash = "sha256:5f31eacfc4ab696c4febbe3d640fb19e9ce9a24950541472e732ed086fc07d96", size = 408327, upload-time = "2026-07-01T02:50:58.921Z" },
{ url = "https://files.pythonhosted.org/packages/75/68/649899766a126404ef4efb17ea603742ad99e7c86b8e46a1d5959a3e9455/djlint-1.40.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e9ee699fc4aa3325a7ed9542eb8780b53e4169041e36d9e4e6d86272dc70c8c", size = 537688, upload-time = "2026-07-01T02:51:00.212Z" },
{ url = "https://files.pythonhosted.org/packages/ec/29/8fea3fbfc11cd160226d623de150ff84dc5cd7aef8667863e9e9a7e20697/djlint-1.40.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0db420847928b2b62f0f440506cf7538678e89f0c67bfbcb1da8a1728bf56f2", size = 510806, upload-time = "2026-07-01T02:51:01.398Z" },
{ url = "https://files.pythonhosted.org/packages/93/1d/8b03816e329c87445669e4424c934e8933862cda822121c3b89c60b958a9/djlint-1.40.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c8542f60ceec900527ed54ad5efed893e440a7f3dc66a1e0605ecf086e03237", size = 540814, upload-time = "2026-07-01T02:51:02.537Z" },
{ url = "https://files.pythonhosted.org/packages/23/65/b98a865ff4e464c3f3657c891ce9b5a8bb11a156e281dcb87f06a182c439/djlint-1.40.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac34ede821c08c9ee52f46fa52e1e9ecfec05e37ee6c4c795f1cc9a94fc6f65b", size = 565362, upload-time = "2026-07-01T02:51:03.706Z" },
{ url = "https://files.pythonhosted.org/packages/47/8d/4dacb70a67f9cb560b7c5be8177fef38b0fbdaffc433aac534dfc49ad8fd/djlint-1.40.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:95e1dc37aeabff9395e7534ad8427fd44e3b6d13dc34f772310732728c8f0484", size = 548034, upload-time = "2026-07-01T02:51:04.819Z" },
{ url = "https://files.pythonhosted.org/packages/8d/5a/a113206698bcb06c3fe2ff22686d4287754dd24b51179f89a21f8075520d/djlint-1.40.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c5d7596faefa8fa0f9d6757cb4ce748aa0b95a733975be6ac6d878e751eab9e", size = 575356, upload-time = "2026-07-01T02:51:05.937Z" },
{ url = "https://files.pythonhosted.org/packages/02/37/6f5d9068e3f21dd1ad79129581f0e71a5353e90dba8590d7075d4cb8899d/djlint-1.40.0-cp313-cp313-win32.whl", hash = "sha256:f67168ed8229a4ae81c391eb5dcefce36495e7df3f90f12cfa132bfa1f57983e", size = 415334, upload-time = "2026-07-01T02:51:07.47Z" },
{ url = "https://files.pythonhosted.org/packages/bb/6b/f4dd6c5865ee4ab71b6dd9a8cb264742219924e92939345bc2977e3ef777/djlint-1.40.0-cp313-cp313-win_amd64.whl", hash = "sha256:dec6873d1765b1a9ef3e9f8dd30b76e9b9e3e556cf01ce0c5c0bc0a5901cbd64", size = 461822, upload-time = "2026-07-01T02:51:08.599Z" },
{ url = "https://files.pythonhosted.org/packages/36/27/fc325fe06dcba8e05f6b0a9e84c65dbf76e6789fb8429029402c6da2dc05/djlint-1.40.0-cp313-cp313-win_arm64.whl", hash = "sha256:02816499e712ff9de9bb0ed8c9d21c6ce27a6997a7265e9cc628a625f8c97f9e", size = 407834, upload-time = "2026-07-01T02:51:09.842Z" },
{ url = "https://files.pythonhosted.org/packages/67/a0/ccfa6fe87fa83df572d5d641121f8ac881787c4751719e6ba963c58cf15a/djlint-1.40.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa86ae4c3dd6215d4857bc871b0748789f80e793c5d3b51edec3f6a941a25a87", size = 536644, upload-time = "2026-07-01T02:51:11.422Z" },
{ url = "https://files.pythonhosted.org/packages/26/87/124ebdeb4b0699085596894b5d749182387408cf3b4a1c50834dd4af37d4/djlint-1.40.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7e712a46833e48452ed3ef42325d45658dc12d516aa050eb670d5a04ec730408", size = 510447, upload-time = "2026-07-01T02:51:12.753Z" },
{ url = "https://files.pythonhosted.org/packages/e6/de/d3d5435e9b08364d4e1405f85486568b1d05c3cbb280859822f6c1c4f90d/djlint-1.40.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37bac4e0fea5790c1da958440b1cf8a5f7469e29b630779592222b7dfac92bc4", size = 543448, upload-time = "2026-07-01T02:51:13.864Z" },
{ url = "https://files.pythonhosted.org/packages/22/cc/80f9de5e5890b246814eb1b2eb8fda8975f8563023d4c2377d2120e03bb8/djlint-1.40.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:403dda65e3703bc960425f297f706219d8bfe35f315aaee7b728f83b024530cb", size = 564472, upload-time = "2026-07-01T02:51:15.04Z" },
{ url = "https://files.pythonhosted.org/packages/55/38/61ccabfd6e521a471f661962c5c1a5061a08372e411cbfd42459ebe60da7/djlint-1.40.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e7a9e15e7c69cb5b9fa77979b1efb596fcb43bb92ba5aa115171f1604a93cc7d", size = 551686, upload-time = "2026-07-01T02:51:16.407Z" },
{ url = "https://files.pythonhosted.org/packages/03/34/6f3aab22596cc365a27e07beb2335d9a05489a2bc2878b5d9affa86cf9f0/djlint-1.40.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c25acfec0cb92e98ce6141f421b4a2f298b5370cbf0c3389c3d465d3c63dad50", size = 574685, upload-time = "2026-07-01T02:51:17.767Z" },
{ url = "https://files.pythonhosted.org/packages/63/4e/04cb7ef51707808cf44db6b7d0161645e8c3d0cbea9bd1a41e3c43244fa4/djlint-1.40.0-cp314-cp314-win32.whl", hash = "sha256:52b55054d819c6d12aab52a151990d37d0c0cf8762312c14c9320dafcb91d69d", size = 420275, upload-time = "2026-07-01T02:51:19.154Z" },
{ url = "https://files.pythonhosted.org/packages/4e/eb/e7faf63fef26e2720c2244f9aa4b001568edec193a977e6145cfbe5b8c6c/djlint-1.40.0-cp314-cp314-win_amd64.whl", hash = "sha256:386c038261f38398309279902d1569b5a4cc3d35d290f8914ebe2600eeed1858", size = 469454, upload-time = "2026-07-01T02:51:20.338Z" },
{ url = "https://files.pythonhosted.org/packages/40/45/a3e0f4b5e1df090796f39e386506c7caad17a2be2f04042be85fbc7ee093/djlint-1.40.0-cp314-cp314-win_arm64.whl", hash = "sha256:1375508369c0823791e3de2f35b269b7154721c50e155409e732e552e4bc2188", size = 416231, upload-time = "2026-07-01T02:51:21.421Z" },
{ url = "https://files.pythonhosted.org/packages/b1/14/3bca60c13c25630c35421b27ba37e52b4926466775111de01dd469616340/djlint-1.40.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:333bbd3ff1d5fb6060b79e51f6fa3226bc0a72a4420d34a3cc116c21b1571077", size = 583182, upload-time = "2026-07-01T02:51:22.64Z" },
{ url = "https://files.pythonhosted.org/packages/ab/ba/c055ed80b62ca7b64df346d9d0184747a7631c149dadbdc31e06243c449a/djlint-1.40.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:72e54b420454a1c8a75e2948ca1b4343036e1f44072b508626961d6b563b90d9", size = 558137, upload-time = "2026-07-01T02:51:23.824Z" },
{ url = "https://files.pythonhosted.org/packages/b6/09/b1c7d1c4025954e2ccc18c7cffe9ceb44c67a57a56d7cd8ee2eaa547233b/djlint-1.40.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c455be937397f6d9a0ea5b4c6cb8cff609a7c3e0dae8d41589d813a17e1bf1f", size = 581288, upload-time = "2026-07-01T02:51:25.038Z" },
{ url = "https://files.pythonhosted.org/packages/fa/da/942df736bf17688e2d6d4bbe2cadf9986d811675e821852a80514dabadf5/djlint-1.40.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3681d2171f768bd123b2a55843bfc60d35bb9d642f4bca65169c751d25f33af6", size = 601433, upload-time = "2026-07-01T02:51:26.251Z" },
{ url = "https://files.pythonhosted.org/packages/90/59/d5d6ebef0825df4845fed30835248cf352d2fefc8128dc96b7b7c8b32029/djlint-1.40.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1b4425675d21d31d807d1646a9b10a9cf5b4f0ec6db574bb1d6bde7a0b871", size = 588058, upload-time = "2026-07-01T02:51:27.526Z" },
{ url = "https://files.pythonhosted.org/packages/e6/c3/0cd92ba21bc61134e8cc29b428db7da86776900d44cd4d4f75637cbaa5a0/djlint-1.40.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:57f977770ddc6e7b71e43fc05378086b38f539975fcc574707762ab6cac42f6d", size = 610206, upload-time = "2026-07-01T02:51:28.697Z" },
{ url = "https://files.pythonhosted.org/packages/a6/0e/6e4b289d372eb20c65f2463a30208699aa5dd1a929ce8262f60fc22b6f79/djlint-1.40.0-cp314-cp314t-win32.whl", hash = "sha256:2b4bfc6270bf649cf9278ba1bff70bd7bd432db501f094964204688415c7788c", size = 442087, upload-time = "2026-07-01T02:51:29.823Z" },
{ url = "https://files.pythonhosted.org/packages/f1/9c/b22bbfccca581c9e86869fd0ecaaddf39557585fd16d16ae27b2ac9b4afb/djlint-1.40.0-cp314-cp314t-win_amd64.whl", hash = "sha256:cdab141e407d854062b4e47d383f05733f6d9e9fd86762c373d3ab42632ee096", size = 486583, upload-time = "2026-07-01T02:51:31.209Z" },
{ url = "https://files.pythonhosted.org/packages/27/2e/966f4334272fa3693c6a38b7a300af87cc10631404d840071b57a2ed6d12/djlint-1.40.0-cp314-cp314t-win_arm64.whl", hash = "sha256:70f5da2b7e6381e9cdaa0ba4b5f60e6785176bf0c26f1f2e9fbca436ce42ebe5", size = 432818, upload-time = "2026-07-01T02:51:32.351Z" },
{ url = "https://files.pythonhosted.org/packages/f7/b4/22413d43c66237e60e2d82a3c09be3017c6802e848401b325f29bf4544d9/djlint-1.40.0-py3-none-any.whl", hash = "sha256:c10cf5abdd7e13af4cb7d6f1b9a3bdaa76317a11f101c2f4e71f0176d62eca67", size = 63291, upload-time = "2026-07-01T02:51:33.411Z" },
{ url = "https://files.pythonhosted.org/packages/05/36/c2aa2f94cb370655281c55bd98d039588f79e6cee4d70c1ab147c8bd8c8e/djlint-1.40.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4e6795578e9a8dcc9c74ee31d30a6d7e273f1e5dc37287bd6718b2dda24d7bd2", size = 567463, upload-time = "2026-07-01T22:58:29.682Z" },
{ url = "https://files.pythonhosted.org/packages/00/e5/8cd09dffb3422e451ecfc32edc2faad09bc4ceb6ae5fd0b8cbbbe45f5c52/djlint-1.40.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e6bcc177a41a28214974b358b82b45539694af4ed71e798a3dad0e7bcf8d7f0a", size = 540605, upload-time = "2026-07-01T22:58:30.986Z" },
{ url = "https://files.pythonhosted.org/packages/ee/60/28685c9563925607e79a8fadf97e09d622ed3ef68112e5582098265c7e47/djlint-1.40.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab88efe66f308de759421c605fef0cc5f5c0c6306fbff1dff33780fd25dba027", size = 577175, upload-time = "2026-07-01T22:58:32.46Z" },
{ url = "https://files.pythonhosted.org/packages/82/ef/6b0ce85141d41bc67ac1c031075ba7adfa3ca3fec2a73c0ed0467c704ae9/djlint-1.40.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0f3e87d6e9ed671b1cb6c8f6e28874d76ca248f3d64a2a14dcc2e3a20393305", size = 597799, upload-time = "2026-07-01T22:58:33.941Z" },
{ url = "https://files.pythonhosted.org/packages/63/f3/f5a34ae94defdf0ccab923673b591480712fa9b3a3ff6bdfb53f4083c817/djlint-1.40.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0947c7567bfc5426de4748f93325fe47d2b7319448dcfda567559a5f1caee32", size = 584251, upload-time = "2026-07-01T22:58:35.051Z" },
{ url = "https://files.pythonhosted.org/packages/f6/82/b216166be3bb8c10f5b1ff17b8f54af8494385acb954893554f6c0af5cc2/djlint-1.40.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a7c304aea7dc5ddbd38b9cd975dacf994d0e05e5e83f21cabd9c1ebe8b0411d2", size = 607540, upload-time = "2026-07-01T22:58:36.548Z" },
{ url = "https://files.pythonhosted.org/packages/c3/7d/75caa4e1ebe5ba9be02f475fd1cec92a9af5045d4b876e086ae0622fd560/djlint-1.40.1-cp310-cp310-win32.whl", hash = "sha256:75f5d80ba02a75a51c829b8f31ccfadcb41630c8c2c98f6fff2c4c4da23d6d7d", size = 428364, upload-time = "2026-07-01T22:58:37.774Z" },
{ url = "https://files.pythonhosted.org/packages/bd/00/dd6b8daac50a05f3e665fed60b7de5bcb8581e777497cd77094cd2ae7504/djlint-1.40.1-cp310-cp310-win_amd64.whl", hash = "sha256:587b5f5eaaf47b67d7d682f7e96f08c85a227d050dd665c9c9061e042be5a3ec", size = 478118, upload-time = "2026-07-01T22:58:38.857Z" },
{ url = "https://files.pythonhosted.org/packages/b4/ee/391a06840fffdfe1b79d40c1378f47371fc3b5a5d7e215ed0d466f00319b/djlint-1.40.1-cp310-cp310-win_arm64.whl", hash = "sha256:7041bba95effc68be5c65436830c4e80d98df52aa50e5c5f1c4b85873b23a85e", size = 423983, upload-time = "2026-07-01T22:58:39.925Z" },
{ url = "https://files.pythonhosted.org/packages/f1/7d/ea5a0a2ef746869db4ab8820506f7a1022270806beb5369b8087ba649835/djlint-1.40.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2984abbfcd01109daa795527ee54c35ee66319987209917305f45f6bf00c8a88", size = 555614, upload-time = "2026-07-01T22:58:41.317Z" },
{ url = "https://files.pythonhosted.org/packages/51/5c/b8f1838be681166aaa7f703d25c55716d5664eda49cb2477ddef6e79c646/djlint-1.40.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75c2c377c1c4307f6fabf22074a46bb476dd778455bbc61acd9dcaebecec6ff5", size = 528901, upload-time = "2026-07-01T22:58:42.401Z" },
{ url = "https://files.pythonhosted.org/packages/df/7f/3fdf5876396a82050bf88e07c6e6e83479fc556e2506d8f228d94d4ce70b/djlint-1.40.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11cad6379bb6649d097f6ece0f20ad9d04033fa7013483dc08456154399eb443", size = 565307, upload-time = "2026-07-01T22:58:43.835Z" },
{ url = "https://files.pythonhosted.org/packages/da/ea/1705ba78dd38892c76496730d47770f33fbef5b7badbcbc97bb810ec6d3d/djlint-1.40.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ef853b793072e1e2a62a8133e89b47eb91fa6c61d5b1159ad22eae6c8f1abbe", size = 583496, upload-time = "2026-07-01T22:58:45.287Z" },
{ url = "https://files.pythonhosted.org/packages/fd/6b/809cd24aaf788cb2a8c15cb6776cbdb0d5f91495d68a1cbad47aaf8c1bf0/djlint-1.40.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1047b1b1f7332c1923989f479c55e6b8706d463b2179719f245d841bf5f5e61c", size = 571316, upload-time = "2026-07-01T22:58:46.823Z" },
{ url = "https://files.pythonhosted.org/packages/95/df/9dad529b56956fbd6d419e8c000bb76dd9fd92597a5fd1a86c3b8f7225de/djlint-1.40.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a8c45dfabeeab69c362be6c3351abe829192cb6e2b43c6ba7669239d51a0e11", size = 594605, upload-time = "2026-07-01T22:58:48.135Z" },
{ url = "https://files.pythonhosted.org/packages/40/62/0b80c127bb65429d08e414c919f0bc35a4015d971186eaa461182e011710/djlint-1.40.1-cp311-cp311-win32.whl", hash = "sha256:e389b9572de4b33ec371debb94f98801758039cdff15631acbb2bb1d9a0dc9bb", size = 427915, upload-time = "2026-07-01T22:58:49.428Z" },
{ url = "https://files.pythonhosted.org/packages/47/9b/5c60b58bea32b31afab983c0a5f0c16636e8bd3ec31da1fb0203c60be32a/djlint-1.40.1-cp311-cp311-win_amd64.whl", hash = "sha256:45b09213ce5da4f1a0f86d2ecc84a5dd02732737c924b12f91fbb3e14c3c10e2", size = 478460, upload-time = "2026-07-01T22:58:50.482Z" },
{ url = "https://files.pythonhosted.org/packages/2d/6c/83572846869d79597ae6c5d75110e9bfb99977f525508f3a088ab936bb4d/djlint-1.40.1-cp311-cp311-win_arm64.whl", hash = "sha256:4d35de490fa93364033ae03acbecdccafc68bb4add16ae22e75b26ec7fcd3c7d", size = 422690, upload-time = "2026-07-01T22:58:51.536Z" },
{ url = "https://files.pythonhosted.org/packages/06/70/91e6bd274fc96c4415dcb44c87a65f949cbad8cb061e47d6443eab72dcd4/djlint-1.40.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4d0aac7dc0ed9860510c7920af50a002b07bfcb360d447e0b9af2f10165f2d8c", size = 567974, upload-time = "2026-07-01T22:58:52.534Z" },
{ url = "https://files.pythonhosted.org/packages/fc/a3/5917569dc920150cb4b9322a3f1f2ff3d41d4a53f407e9528594d81ceed5/djlint-1.40.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bfaebee5df0c74d24e6459e6acd4f2e35019e8604d6a6f31d7432a64fbb0e86", size = 535708, upload-time = "2026-07-01T22:58:53.622Z" },
{ url = "https://files.pythonhosted.org/packages/d0/2b/47d50d2f56d5886fa8bd21d2f3829a5c7fee419d75bb2ef35382f2a4ba86/djlint-1.40.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0206a2339dab54b461646c7d2499058e527486a161711dadcd1fe103309716ac", size = 566956, upload-time = "2026-07-01T22:58:54.733Z" },
{ url = "https://files.pythonhosted.org/packages/22/78/8ad27f6f3c3757028926e7010dc80dbd5ccf373f807e3b8d87d863dfae03/djlint-1.40.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:16f62e8e4992926609fdc4c00e57577f8f89a8e12b4a0315c0987085d53c7368", size = 593591, upload-time = "2026-07-01T22:58:56.041Z" },
{ url = "https://files.pythonhosted.org/packages/60/6e/2a3a671eb763f611209770514e9c0e3a5bb8af6ed24425849d157c70d31b/djlint-1.40.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:77924d0c352433bcd861b05bda63a5ee5bf98a0076228dcdafd3a6939b865265", size = 574300, upload-time = "2026-07-01T22:58:57.19Z" },
{ url = "https://files.pythonhosted.org/packages/44/33/b2bac230adbe3476fbb92c2c018eb04a6b1712ec947cee3bb5c61c557442/djlint-1.40.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:277774562b76054566dade735e81c515b67a543b5ce58e241e58bd245090d814", size = 603323, upload-time = "2026-07-01T22:58:58.273Z" },
{ url = "https://files.pythonhosted.org/packages/dc/91/4d9022a6b089de87ef40e86a954005143c034db27a6b0f373b320287c6b2/djlint-1.40.1-cp312-cp312-win32.whl", hash = "sha256:327459d2585d73ccdbb5de14b119b525affd12a1cccabd2d85de8bab643cbe1a", size = 431609, upload-time = "2026-07-01T22:58:59.432Z" },
{ url = "https://files.pythonhosted.org/packages/eb/47/09ef0a8cf2c9d31d4208fd435c840bba161df1f0d1d8d2fe7b24282a25e3/djlint-1.40.1-cp312-cp312-win_amd64.whl", hash = "sha256:c2cda7e1dfc436c66016b69816cfc8bee53bb8866f617f7331754a6eb18d54a7", size = 481174, upload-time = "2026-07-01T22:59:00.592Z" },
{ url = "https://files.pythonhosted.org/packages/49/58/12b596ea0a784ac6bead3d69be3dbb490b025c91445483b7245d4d9c4332/djlint-1.40.1-cp312-cp312-win_arm64.whl", hash = "sha256:2ed9dd35dcaae9ef6c480ca84bd4b08a53030ea6f68450c4bc67d132343ea2ab", size = 424855, upload-time = "2026-07-01T22:59:01.809Z" },
{ url = "https://files.pythonhosted.org/packages/81/64/a3db50aef68c8927a72f8308068dfc6030264d4e3c40e30ab6e31c70a6d8/djlint-1.40.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cf032dcd7b1350c26a8ec3654ca173b7e7d65a2cefa61d1756914870515f2006", size = 564528, upload-time = "2026-07-01T22:59:02.822Z" },
{ url = "https://files.pythonhosted.org/packages/89/ea/2fd909d3cdc805d3c5b87306dccb28ac5cfe3b1eb4877c29276d412ccf2e/djlint-1.40.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:004412a76b50fd0888f18400ec525cc9060907a3cb825162141ab63455cde6a0", size = 534406, upload-time = "2026-07-01T22:59:03.896Z" },
{ url = "https://files.pythonhosted.org/packages/13/b0/42094b2eca3ccc7b1c71409ebf6bac806a8ce9468f70f2afc017b6db3ab3/djlint-1.40.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:865b54c411314f0762dc24149659ea552601100ab8ec72b4c3419af3f6a1e659", size = 565183, upload-time = "2026-07-01T22:59:05.239Z" },
{ url = "https://files.pythonhosted.org/packages/3f/db/18509951fcc351f0b44507565db7a82536d182aeacdfac2e30dcc5ea4cd6/djlint-1.40.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:db7026a11cce0efeb3cd562fa6e46c76c85ee872409efda88f0ed2b65556a63f", size = 591782, upload-time = "2026-07-01T22:59:06.698Z" },
{ url = "https://files.pythonhosted.org/packages/f0/b3/7bf85188a8acf7431bfc74bdece387bced221545fdcba96b2417e56563c7/djlint-1.40.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8d2419195ece071211e47348541522eae9a121fcf285561d1952dde691fb8edb", size = 571718, upload-time = "2026-07-01T22:59:08.074Z" },
{ url = "https://files.pythonhosted.org/packages/26/55/3cbf05a3b100db5660705378f4512fd1f27f0824c4ca52d5d5d66f65fe97/djlint-1.40.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d16dbc16b40cea801e84d76d1da6c78e4da4286fd3e973b015764f354012375", size = 601947, upload-time = "2026-07-01T22:59:09.354Z" },
{ url = "https://files.pythonhosted.org/packages/73/9c/d9eb601e8e5ad196a3142f6bdc57ef6f05d3688a1df864c5719659ff879d/djlint-1.40.1-cp313-cp313-win32.whl", hash = "sha256:7e3ff3d6561ccb8ed6a9a4261fc87a0bda105ea7f899d8e5b2cfa275691b8f84", size = 431123, upload-time = "2026-07-01T22:59:10.616Z" },
{ url = "https://files.pythonhosted.org/packages/7b/66/25db2ddabeb68920e65c4a5c3c85dc04adc9e7025cdba7e82a4ca3d8db14/djlint-1.40.1-cp313-cp313-win_amd64.whl", hash = "sha256:da5eedb1c07af681b62b4818d88a25a8015be953037d6a4a0185b8e371946d38", size = 480690, upload-time = "2026-07-01T22:59:11.76Z" },
{ url = "https://files.pythonhosted.org/packages/46/e0/8a55974f537894d123d5c18567120857aa1d281049276aca012f812f12ec/djlint-1.40.1-cp313-cp313-win_arm64.whl", hash = "sha256:05709d9d025a0d82770b2aea4685b07a302ecefc24c4d2baeb456d06d0a27bc2", size = 424279, upload-time = "2026-07-01T22:59:12.852Z" },
{ url = "https://files.pythonhosted.org/packages/49/0c/5b70daa7f3aa7c914a312643b543666f80ec5853045b8a6beb207c6d3ef4/djlint-1.40.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:b70711ba3ebed143858c5ea0cd5d06ca0a1ba2211470c9cc7b7b0929c85b7350", size = 563188, upload-time = "2026-07-01T22:59:14.31Z" },
{ url = "https://files.pythonhosted.org/packages/53/fe/aca54bdaeeefad51d2238761bc7289caaf0a37d31f4ee9bc75e9190f3e03/djlint-1.40.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:24b1005843171de24e2613fa65a7f60adb2accc201c41e80a957343bb3c78129", size = 534007, upload-time = "2026-07-01T22:59:15.415Z" },
{ url = "https://files.pythonhosted.org/packages/a2/9a/57dfaec59ac4bb971caf8e0ad24b650bba9ba5aa13e6593e30184525fbce/djlint-1.40.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9c032ea8e12b2f1d06af95af1990d0e3f6892513d3edbd686e794aaac400849", size = 567984, upload-time = "2026-07-01T22:59:16.561Z" },
{ url = "https://files.pythonhosted.org/packages/04/75/268e629b94d59da371c59f5a1524ea82a3547a93517adbb6f7c1096ee929/djlint-1.40.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fa6d3d88de45b3de51f35210669709e799795748d2a955206328b7728fcd8a0a", size = 590496, upload-time = "2026-07-01T22:59:17.62Z" },
{ url = "https://files.pythonhosted.org/packages/2a/62/5cecc0343dd2b7b3cfe01d32fa9a63c036aeb774c67a8b523720022b523f/djlint-1.40.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7a484d3b59c2833d180f2a5414d56c73dc32fd9148d3a132a33106e5dc236588", size = 575287, upload-time = "2026-07-01T22:59:18.821Z" },
{ url = "https://files.pythonhosted.org/packages/62/07/9b55653747bd319bf60c2db79a6da656c5ab2ac07ca934d815ab8ceae8b3/djlint-1.40.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:58ce0d9fdbbe76a402691a1bb422fb5c262a648e631d8867034384ae658482b0", size = 600929, upload-time = "2026-07-01T22:59:19.932Z" },
{ url = "https://files.pythonhosted.org/packages/a2/99/7a2f129f9516a7e8c9bab688f12dc35c07c9b881d5a0d24a368b60ea8059/djlint-1.40.1-cp314-cp314-win32.whl", hash = "sha256:0f8240036bb52dac77ce58a8ed711bba1a0a085d0dfef1bdd09c6725c70622fa", size = 436270, upload-time = "2026-07-01T22:59:21.313Z" },
{ url = "https://files.pythonhosted.org/packages/3b/ba/18019947f07ff4ef4fb9a7bcc4419b8fbad2e3100b787964266e6fbf87e9/djlint-1.40.1-cp314-cp314-win_amd64.whl", hash = "sha256:fdc5459828645524fe95807d7ba39ba8f72995af7e6149e80e241fd5590ee912", size = 488475, upload-time = "2026-07-01T22:59:22.453Z" },
{ url = "https://files.pythonhosted.org/packages/e3/1c/6c1f55d237cd8dfc8c60eccb9bf91afca6f40c42e93fe3d522e3002d4280/djlint-1.40.1-cp314-cp314-win_arm64.whl", hash = "sha256:b9dba570bd9478c6ee7cbf1ad661935d5b463a80de92af176f8381776b872088", size = 432821, upload-time = "2026-07-01T22:59:23.587Z" },
{ url = "https://files.pythonhosted.org/packages/c6/d0/eb483654f2cf78f1b7491f762e266dae69d736c3b172c33ef0a21f7c0188/djlint-1.40.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:db8772f14c43a8cb3b34522f855bf79e6ec8722364b9cdcd106011bdec290294", size = 612370, upload-time = "2026-07-01T22:59:24.849Z" },
{ url = "https://files.pythonhosted.org/packages/ee/81/6e4815fdd0be54739a8636b3757d75236c912ec240c71b7e6226a082ab13/djlint-1.40.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d0ebc3e20399703e2e13eec2be47daef02e92068e5714a98974b62873c6ea45d", size = 583655, upload-time = "2026-07-01T22:59:26.072Z" },
{ url = "https://files.pythonhosted.org/packages/58/0d/b9a12a47f00ed4c61653751d85087a0d2b54abb8bcde55d621e73ab4c58a/djlint-1.40.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f6ca673823ca6eb720b87dde6d173f425ed77583d76bb4440af9987254c0ed5", size = 606259, upload-time = "2026-07-01T22:59:27.233Z" },
{ url = "https://files.pythonhosted.org/packages/ba/b1/413599e417c83900cc0feab99b8fa71f7e148d3cf3a4f9fa5a835b4e4ba0/djlint-1.40.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba658ba6d29023c0f95bc1c301b39eb7891736980f3a524c062dac89f79e621c", size = 628827, upload-time = "2026-07-01T22:59:28.664Z" },
{ url = "https://files.pythonhosted.org/packages/d9/4d/3e52b646aedd8e9e9500057ab5a413b68c9ca35c53945ec8a40a5a17b78c/djlint-1.40.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:255cf010a512c3f47cb20eed6d5d65fb6b9a64225cb7fcc77e785ee9afe842ad", size = 612322, upload-time = "2026-07-01T22:59:29.956Z" },
{ url = "https://files.pythonhosted.org/packages/b9/86/9cad2ad134b7944f969ba3f1b0644691b557cc43f7023e6bf4adb565a968/djlint-1.40.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2c9a6e861609d8ea01a52bb19013d8f70f91725062d64ed4ad449254dc0189f3", size = 637808, upload-time = "2026-07-01T22:59:31.086Z" },
{ url = "https://files.pythonhosted.org/packages/9f/da/8a7321d762c61b8ec05f430ce988193c4a9d21b2aa7cd84f6714720508bb/djlint-1.40.1-cp314-cp314t-win32.whl", hash = "sha256:c9b9da12eb632ec43facda6a937a0ea9a7a34a48593f0b99bca4db3e0c87eb56", size = 458700, upload-time = "2026-07-01T22:59:32.402Z" },
{ url = "https://files.pythonhosted.org/packages/89/71/9384a66130808f3840bd6342102449917a29bfed6d40fe47ddab13ead5bb/djlint-1.40.1-cp314-cp314t-win_amd64.whl", hash = "sha256:86ae986b4fcb9ddd8b8f56bd2ecf5fe35eabf37bdbc358a484a1a33b6d5c1506", size = 507891, upload-time = "2026-07-01T22:59:33.734Z" },
{ url = "https://files.pythonhosted.org/packages/9a/d0/62ea58ea66a659de233fca523845a0affd114928bf23e54c6313914dcea0/djlint-1.40.1-cp314-cp314t-win_arm64.whl", hash = "sha256:4dff916308277b2a68da1a2c4ac585feb80e0a5af0935c50d1ac041ae7b74a67", size = 450836, upload-time = "2026-07-01T22:59:34.85Z" },
{ url = "https://files.pythonhosted.org/packages/f0/43/5f7904b87d62ac2cdc69bd5e791c2463af3618a5686e88d8ebd1e00c0430/djlint-1.40.1-py3-none-any.whl", hash = "sha256:65911cb38dda94a526944c700c89a7915c896fbb4b54f4d828610307fe63e5dc", size = 64836, upload-time = "2026-07-01T22:59:36.227Z" },
]
[[package]]
@@ -136,7 +136,7 @@ dev = [
[package.metadata.requires-dev]
dev = [
{ name = "djlint", specifier = "==1.40.0" },
{ name = "djlint", specifier = "==1.40.1" },
{ name = "yamllint", specifier = "==1.38.0" },
{ name = "zizmor", specifier = "==1.26.1" },
]