Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Odevzdávací Systém MO
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MO-P
Odevzdávací Systém MO
Merge requests
!26
Project 'mj/mo-submit' was moved to 'mo-p/osmo'. Please update any links and bookmarks that may still have the old path.
Verzování statických souborů
Code
Review changes
Check out branch
Download
Patches
Plain diff
Expand sidebar
Merged
Verzování statických souborů
mj/assets
into
devel
Overview
1
Commits
5
Changes
8
Merged
Verzování statických souborů
Martin Mareš
requested to merge
mj/assets
into
devel
Jan 24, 2021
Overview
1
Commits
5
Changes
1
0
0
Merge request reports
Compare
version 2
version 3
19017847
Jan 24, 2021
version 2
2f6d1728
Jan 24, 2021
version 1
a92348c4
Jan 24, 2021
devel (base)
and
version 3
latest version
ebc92823
5 commits,
Jan 26, 2021
version 3
19017847
4 commits,
Jan 24, 2021
version 2
2f6d1728
4 commits,
Jan 24, 2021
version 1
a92348c4
3 commits,
Jan 24, 2021
Show latest version
1 file
+
3
−
1
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
mo/ext/assets.py
0 → 100644
+
62
−
0
View file @ ebc92823
Edit in single-file editor
Open in Web IDE
# Flask extension for versioned assets
from
flask
import
send_from_directory
import
hashlib
import
os
from
typing
import
Sequence
,
Dict
class
Assets
:
asset_dir
:
str
asset_dict
:
Dict
[
str
,
str
]
url_prefix
:
str
def
__init__
(
self
,
app
,
url_prefix
:
str
,
asset_dir
:
str
):
self
.
app
=
app
if
app
is
not
None
:
self
.
init_app
(
app
,
url_prefix
,
asset_dir
)
def
init_app
(
self
,
app
,
url_prefix
:
str
,
asset_dir
:
str
):
self
.
asset_folder
=
asset_dir
self
.
asset_dict
=
{}
self
.
url_prefix
=
url_prefix
self
.
app
=
app
app
.
jinja_env
.
globals
.
update
(
asset_url
=
lambda
name
:
self
.
asset_url
(
name
))
app
.
assets
=
self
# This is usually needed only for development, production requests are handled by upstream proxy
app
.
add_url_rule
(
url_prefix
+
"
/<version>/<path:name>
"
,
endpoint
=
"
assets
"
,
view_func
=
lambda
version
,
name
:
self
.
send_asset
(
name
),
)
def
add_asset
(
self
,
name
:
str
):
if
name
in
self
.
asset_dict
:
return
file_name
=
os
.
path
.
join
(
self
.
asset_folder
,
name
)
digest
=
hashlib
.
sha1
()
with
open
(
file_name
,
'
rb
'
)
as
file
:
while
True
:
block
=
file
.
read
(
4096
)
if
not
block
:
break
digest
.
update
(
block
)
version
=
digest
.
hexdigest
()[:
8
]
self
.
app
.
logger
.
debug
(
f
'
Assets: Loaded
{
name
}
: version
{
version
}
'
)
self
.
asset_dict
[
name
]
=
version
def
add_assets
(
self
,
names
:
Sequence
[
str
]):
for
name
in
names
:
self
.
add_asset
(
name
)
def
asset_url
(
self
,
name
:
str
)
->
str
:
assert
name
in
self
.
asset_dict
return
os
.
path
.
join
(
self
.
url_prefix
,
self
.
asset_dict
[
name
],
name
)
def
send_asset
(
self
,
name
:
str
):
return
send_from_directory
(
self
.
asset_folder
,
name
)
Loading