#!/usr/bin/env python

from dm.common.utility.loggingManager import LoggingManager
from dm.common.exceptions.invalidArgument import InvalidArgument
from dm.common.exceptions.objectAlreadyExists import ObjectAlreadyExists
from dm.common.exceptions.objectNotFound import ObjectNotFound
from dm.common.exceptions.dbError import DbError
from dmMongoCollection import DmMongoCollection

class WorkflowCollection(DmMongoCollection):
    """Class responsible for updating workflow collection in mongo db."""

    UNIQUE_KEYS_LIST = [ 'name', 'owner' ]
    NAME_KEY = 'name'
    ITEM_TYPE = 'workflow'

    def __init__(self, dbClient, prefix=None):
        collectionName = 'workflows'
        if prefix:
            collectionName = '%s-workflows' % prefix
        DmMongoCollection.__init__(self, collectionName, dbClient)

#######################################################################
# Testing
if __name__ == '__main__':
    from dmMongoClient import DmMongoClient
    mongo = DmMongoClient('dm')
    workflowCollection = WorkflowCollection(mongo)
    workflowInfo = {'name' : 'workflow-01', 'owner' : 'sveseli', 'stages' : 
        [ 
            { 'id' : '1', 'executable' : '/bin/date', 'args' : [ ] }, 
            { 'id' : '2', 'executable' : '/bin/ls', 'args' : [ '-l', 'INPUT_FILE' ], 'parallelizeExecution' : False},
            { 'id' : '3', 'executable' : '/bin/cp', 'args' : [ 'INPUT_FILE', 'OUTPUT_FILE=INPUT_FILE.processed' ], 'parallelizeExecution' : False} 
        ]
    }
    print workflowCollection.addByUniqueKeys(workflowInfo)
    print workflowCollection.findByQueryDict({'name' : 'workflow-01', 'owner' : 'sveseli'}, {'steps' : 1})
    workflowInfo['description'] = 'My first workflow'
    print workflowCollection.updateByUniqueKeys(workflowInfo)