Skip to content

Commit

Permalink
Media-Folder: show status / usage (#214)
Browse files Browse the repository at this point in the history
  • Loading branch information
zmsdev authored Nov 29, 2023
1 parent 48109af commit 5b1c7a2
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 7 deletions.
31 changes: 28 additions & 3 deletions Products/zms/_mediadb.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from zExceptions import NotFound
import OFS.SimpleItem
import Acquisition
import json
import os
import shutil
import time
Expand Down Expand Up @@ -167,7 +168,7 @@ def manage_packMediaDb(self, REQUEST=None, RESPONSE=None):
path = mediadb.getLocation()

# Get filenames.
filenames = mediadb.valid_filenames()
filenames = [x[1] for x in mediadb.valid_filenames()]
standard.writeLog( self, "[manage_packMediaDb]: filenames %s"%str(filenames))
tempfolder = tempfile.mkdtemp()
os.makedirs(tempfolder, exist_ok=True)
Expand Down Expand Up @@ -461,6 +462,7 @@ def valid_filenames(self):
obj_attr = obj.getObjAttr(si)
for lang in obj.getLangIds():
for obj_vers in obj.getObjVersions():
obj_attr_name = '%s_%s'%(si,lang)
v = _objattrs.getobjattr(obj,obj_vers,obj_attr,lang)
for r in v:
for k in r:
Expand All @@ -470,7 +472,7 @@ def valid_filenames(self):
filenamesFromValue = getFilenamesFromValue( u)
for filename in filenamesFromValue:
if filename not in filenames:
filenames.append( filename)
filenames.append(('/'.join(obj.getPhysicalPath())+'#'+obj_attr_name, filename))
# Process object.
else:
obj_attrs = obj.getObjAttrs()
Expand All @@ -491,9 +493,32 @@ def valid_filenames(self):
filenamesFromValue = getFilenamesFromValue( v)
for filename in filenamesFromValue:
if filename not in filenames:
filenames.append( filename)
filenames.append(('/'.join(obj.getPhysicalPath())+'#'+obj_attr_name, filename))
return filenames

############################################################################
# MediaDb.manage_test:
############################################################################
def manage_test(self, REQUEST, RESPONSE):
""" manage_test """
RESPONSE.setHeader('Cache-Control', 'no-cache')
RESPONSE.setHeader('Content-Type', 'application/json; charset=utf-8')
def traverse(path):
files = []
for filename in os.listdir(path):
filepath = os.path.join(path,filename)
if os.path.isdir(filepath):
files.extend(traverse(filepath))
elif os.path.isfile(filepath):
files.append(filename)
return files
# Get filenames.
path_filenames = traverse(self.getLocation())
valid_filenames = self.valid_filenames()
l = []
l.extend([(attr, filename, 'OK' if filename in path_filenames else 'MISSING') for (attr, filename) in valid_filenames])
l.extend([(None, filename, 'MISSING') for filename in path_filenames if filename not in [y[1] for y in valid_filenames]])
return json.dumps(l, indent=2)

"""
############################################################################
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1215,6 +1215,9 @@ ZMI.prototype.iframe = function(href, data, opt) {
href = href.substring(0,href.indexOf("?"))+"?lang="+getZMILang()+"&manage_tabs_message="+manage_tabs_message;
self.location.href = href;
} else {
if (opt['json']) {
result = `<pre class="zmi-code json">${JSON.stringify(result, null, space=4)}</pre>`;
}
opt['body'] = result;
if (typeof opt['title'] == "undefined") {
var title = $("div.zmi",result).attr("title");
Expand Down
18 changes: 14 additions & 4 deletions Products/zms/zpt/ZMS/manage_customize.zpt
Original file line number Diff line number Diff line change
Expand Up @@ -301,10 +301,20 @@
<div class="form-group row">
<div class="col-sm-2">&nbsp;</div>
<div class="col-sm-10">
<button name="btn" type="submit" class="btn btn-secondary" value="Change">Change</button>
<button name="btn" type="submit" class="btn btn-secondary" value="Remove" title="Reimport outsourced mediafolder files back into ZODB of this ZMS-client">Remove</button>
<button name="btn" type="submit" class="btn btn-warning" value="Pack" title="Delete all mediafolder garbage files having no container object in this ZMS client"
tal:attributes="class python:here.getMediaDb().location.replace('\\','/').find('/'+here.getHome().id)>=0 and 'btn btn-warning' or 'btn btn-danger'">Pack</button>
<button name="btn" type="submit" class="btn btn-primary" value="Change"
title="Save changed parameters"
>Change</button>
<button name="btn" type="submit" class="btn btn-secondary" value="Remove"
title="Reimport outsourced mediafolder files back into ZODB of this ZMS-client. Warning: This operation may result in a huge Zope database"
>Remove</button>
<button name="btn" type="submit" class="btn btn-warning" value="Pack"
title="Delete all mediafolder garbage files having no container object in this ZMS client"
tal:attributes="class python:here.getMediaDb().location.replace('\\','/').find('/'+here.getHome().id)>=0 and 'btn btn-warning' or 'btn btn-danger'"
>Pack</button>
<button name="btn" type="submit" class="btn btn-info" value="Test"
onclick="return $ZMI.iframe('acl_mediadb/manage_test',{},{'title':'Media-Folder: Test','json':true})"
title="Test: List all ZMS locations containing media files. Warning: Iteration time depends on amount of content."
>Test</button>
<div tal:condition="python:here.getMediaDb().location.replace('\\','/').find('/'+here.getHome().id)<0"
class="alert alert-danger" style="margin:2em 0">
Danger! The mediafolder name is not identical with the ZMS client id.
Expand Down

0 comments on commit 5b1c7a2

Please sign in to comment.