added utility to read and cache remote metadata feeds.
This commit is contained in:
0
src/utility/__init__.py
Normal file
0
src/utility/__init__.py
Normal file
36
src/utility/metadata.py
Normal file
36
src/utility/metadata.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import os.path, sys, time, urllib
|
||||||
|
from time import strftime
|
||||||
|
import logging
|
||||||
|
|
||||||
|
__author__ = 'rhoerbe'
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def fetch_metadata(url, path, maxage=600):
|
||||||
|
"""
|
||||||
|
:param url: metadata remote location
|
||||||
|
:param path: metdata file name
|
||||||
|
:param maxage: if max age of existing metadata file (s) is exceeded,
|
||||||
|
the file will be fetched from the remote location
|
||||||
|
"""
|
||||||
|
fetch = False
|
||||||
|
if not os.path.isfile(path):
|
||||||
|
fetch = True
|
||||||
|
logger.debug("metadata file %s not found" % path)
|
||||||
|
elif (os.path.getmtime(path) + maxage) < time.time():
|
||||||
|
fetch = True
|
||||||
|
logger.debug("metadata file %s from %s is more than %s s old" %
|
||||||
|
(path,
|
||||||
|
strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(path))),
|
||||||
|
maxage))
|
||||||
|
else:
|
||||||
|
logger.debug("metadata file %s is less than %s s old" % (path, maxage))
|
||||||
|
if fetch:
|
||||||
|
f=urllib.URLopener()
|
||||||
|
try:
|
||||||
|
f.retrieve(url, path)
|
||||||
|
logger.debug("downloaded metadata from %s into %s" % (url, path))
|
||||||
|
except:
|
||||||
|
logger.debug("downloaded metadata from %s failed: %s" %
|
||||||
|
(url, sys.exc_info()[0]))
|
||||||
|
|
Reference in New Issue
Block a user