diff --git a/castle/cms/cron/__init__.py b/castle/cms/cron/__init__.py index ca922bbca..c6038bb63 100644 --- a/castle/cms/cron/__init__.py +++ b/castle/cms/cron/__init__.py @@ -126,3 +126,7 @@ def auto_publish_retract(argv=sys.argv): def backend_url_check(argv=sys.argv): return run_it('_backend_url_check') + + +def clean_tmp_dir(argv=sys.argv): + return run_it('_clean_tmp_dir') diff --git a/castle/cms/cron/_clean_tmp_dir.py b/castle/cms/cron/_clean_tmp_dir.py new file mode 100644 index 000000000..adfa6a538 --- /dev/null +++ b/castle/cms/cron/_clean_tmp_dir.py @@ -0,0 +1,45 @@ +from AccessControl.SecurityManagement import newSecurityManager +from plone import api +from Products.CMFPlone.interfaces.siteroot import IPloneSiteRoot +from tendo import singleton +from zope.component.hooks import setSite +import os +import shutil +import tempfile + +import logging + + +logger = logging.getLogger('castle.cms') + + +def clean_dir(site): + setSite(site) + + site = api.portal.get() + prefix = "{}-uploads".format(site.getId()) + tmp_dir = tempfile.gettempdir() + + for item in os.listdir(tmp_dir): + if prefix in item: + path = "{}/{}".format(tmp_dir, item) + shutil.rmtree(path) + + +def run(app): + singleton.SingleInstance('cleantmpdir') + + user = app.acl_users.getUser('admin') # noqa + newSecurityManager(None, user.__of__(app.acl_users)) # noqa + + for oid in app.objectIds(): # noqa + obj = app[oid] # noqa + if IPloneSiteRoot.providedBy(obj): + try: + clean_dir(obj) + except Exception: + logger.error('Could not clean /tmp directory for %s' % oid, exc_info=True) + + +if __name__ == '__main__': + run(app) # noqa \ No newline at end of file diff --git a/setup.py b/setup.py index f3136de5c..b0e0cc735 100644 --- a/setup.py +++ b/setup.py @@ -132,6 +132,7 @@ def read(*rnames): link-report = castle.cms.cron:link_report report-users = castle.cms._scripts.report_users:setup_and_run auto-publish-retract = castle.cms.cron:auto_publish_retract + clean_tmp_dir = castle.cms.cron:clean_tmp_dir """, include_package_data=True, zip_safe=False,