layerindex-web/lib/utils.py
Aníbal Limón 5ca3a71286 lib/utils.py: Add support to log to file if LOG_DIR exist in settings
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
2015-02-24 11:07:56 +00:00

100 lines
2.7 KiB
Python

# Utilities for layerindex-web
#
# Copyright (C) 2013 Intel Corporation
# Author: Paul Eggleton <paul.eggleton@linux.intel.com>
#
# Licensed under the MIT license, see COPYING.MIT for details
import sys
import os.path
import subprocess
import logging
import time
import fcntl
def get_branch(branchname):
from layerindex.models import Branch
res = list(Branch.objects.filter(name=branchname)[:1])
if res:
return res[0]
return None
def get_layer(layername):
from layerindex.models import LayerItem
res = list(LayerItem.objects.filter(name=layername)[:1])
if res:
return res[0]
return None
def runcmd(cmd, destdir=None, printerr=True, logger=None):
"""
execute command, raise CalledProcessError if fail
return output if succeed
"""
#logger.debug("run cmd '%s' in %s" % (cmd, os.getcwd() if destdir is None else destdir))
out = os.tmpfile()
try:
subprocess.check_call(cmd, stdout=out, stderr=out, cwd=destdir, shell=True)
except subprocess.CalledProcessError,e:
out.seek(0)
if printerr:
output = out.read()
if logger:
logger.error("%s" % output)
else:
sys.stderr.write("%s\n" % output)
e.output = output
raise e
out.seek(0)
output = out.read()
#logger.debug("output: %s" % output.rstrip() )
return output
def setup_django():
# Get access to our Django model
newpath = os.path.abspath(os.path.dirname(__file__) + '/..')
sys.path.append(newpath)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.core.management import setup_environ
from django.conf import settings
import settings
setup_environ(settings)
def logger_create(name):
import settings
from datetime import datetime
logger = logging.getLogger(name)
try:
log_dir = settings.LOG_DIR
except:
log_dir = ''
if log_dir:
filename = os.path.join(settings.LOG_DIR, "%s_%s.log" % (name, datetime.now().strftime("%Y-%m-%d_%H:%M")))
loggerhandler = logging.FileHandler(filename)
else:
loggerhandler = logging.StreamHandler()
loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
logger.addHandler(loggerhandler)
logger.setLevel(logging.INFO)
return logger
def lock_file(fn):
starttime = time.time()
while True:
lock = open(fn, 'w')
try:
fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
return lock
except IOError:
lock.close()
if time.time() - starttime > 30:
return None
def unlock_file(lock):
fcntl.flock(lock, fcntl.LOCK_UN)