#!python

"""set the islocked property of a node.

A node is locked by setting the islocked property. When a node is
locked, it cannot be copied to, moved or deleted. """


import logging
import sys
from vos import vos
from vos.commonparser import CommonParser
from vos.vos import Node 
import os
import signal



def signal_handler(signal, frame):
    raise KeyboardInterrupt, "SIGINT signal handler"

signal.signal(signal.SIGINT, signal_handler)

parser = CommonParser()

parser.add_option("--lock", action="store_true", help="Lock the node")
parser.add_option("--unlock", action="store_true", help="unLock the node")

(opt, args) = parser.parse_args()
parser.process_informational_options()

logger = logging.getLogger()
logger.setLevel(parser.log_level)
logger.addHandler(logging.StreamHandler())

lock = None
if opt.lock:
   lock = 'true'
elif opt.unlock:
   lock = 'false'

exit_code = 0

try:
    client = vos.Client(vospace_certfile=opt.certfile,vospace_token=opt.token)
    for uri in client.glob(args[0]):
        node = client.get_node(uri)
        if opt.lock or opt.unlock:
            lock = not opt.unlock and opt.lock
            node.is_locked = lock
            client.update(node)
        else:
            print "{0} locked: {1}".format(node.name, node.is_locked)
            if not node.is_locked:
                exit_code = -1
except KeyboardInterrupt:
    exit_code = -1
except Exception as e:
    logger.error(str(e))
    exit_code = -1

sys.exit(exit_code)
