Exemple #1
0
 def getOperationsWithinGroup(self, name, fake=False, warning=True):
     """
     Return a list of operations. If a grouped operation, return the operations in the group.
     :param name:
     :param fake:
     :param warning:
     :return:
     @rtype: Operation
     """
     op = getOperation(name, fake=False, warning=False)
     if op is None:
         grp = self.getGroup(name)
         if grp is not None:
             results = []
             for filter in grp.filters:
                 newop = self.getOperationsWithinGroup(filter,
                                                       fake=fake,
                                                       warning=warning)
                 results.extend(newop)
             return results
     if op is None:
         if fake:
             return [getOperation(name, fake=True, warning=warning)]
         else:
             return []
     return [op]
Exemple #2
0
 def getOperations(self, startType, endType):
     cat = dict()
     cat['Groups'] = list()
     newset = maskgenloader.get_key(self.getLoaderKey())
     if newset is None:
         return cat
     deleteKeys = []
     for group, content in newset.iteritems():
         if len(content) > 0:
             first_op = getOperation(content[0])
             if first_op is None:
                 deleteKeys.append(group)
                 continue
             for first_op_trans in first_op.transitions:
                 start = first_op_trans.split('.')[0]
                 if start != startType:
                     continue
                 second_op = getOperation(content[-1])
                 if second_op is None:
                     deleteKeys.append(group)
                     continue
                 for second_op_trans in second_op.transitions:
                     end = second_op_trans.split('.')[1]
                     if end == endType:
                         cat['Groups'].append(group)
                         continue
     for group in deleteKeys:
         newset.pop(group)
     return cat
Exemple #3
0
 def setOperationName(self,name):
   self.operationName = name
   if name is None:
      return
   op = getOperation(self.operationName)
   self.category = op.category if op is not None else None
   self.recordMaskInComposite='yes' if op is not None and op.includeInMask else 'no'
Exemple #4
0
 def getAvailableFilters(self, operations_used=list()):
     has_generate_mask = set()
     groups_used = set([
         getOperation(op_name, fake=True).category
         for op_name in operations_used
     ])
     for op_name in operations_used:
         real_op = getOperation(op_name, fake=True)
         has_generate_mask.add(real_op.generateMask)
     ops = getOperations()
     if len(operations_used) > 1:
         return []
     return [op_name for op_name in ops if op_name not in operations_used and (not \
         ("all" in has_generate_mask and ops[op_name].generateMask == "all")) \
             and not \
           getOperation(op_name, fake=True).category in groups_used]
Exemple #5
0
 def getOperationWithGroups(self, name, fake=False, warning=True):
     """
     Search groups for operation name, as the name may be a group operation
     :param name:
     :param fake:
     :param warning:
     :return:
     @rtype: Operation
     """
     op = getOperation(name, fake=False, warning=False)
     if op is None:
         op = self.getOperation(name)
     if op is None:
         if fake:
             return getOperation(name, fake=True, warning=warning)
     return op
Exemple #6
0
def buildFilterOperation(pluginOp):
    import copy
    if pluginOp is None:
        return None
    realOp = getOperation(pluginOp['name'], fake=True)
    mandatory = copy.copy(realOp.mandatoryparameters)
    for k, v in (pluginOp['arguments'] if 'arguments' in pluginOp
                 and pluginOp['arguments'] is not None else {}).iteritems():
        mandatory[k] = v
    optional = {
        k: v
        for k, v in realOp.optionalparameters.iteritems() if k not in mandatory
    }
    logging.getLogger('maskgen').info('Build filter {}'.format(
        pluginOp['name']))
    return Operation(name=pluginOp['name'],
                     category=pluginOp['category'],
                     generateMask=realOp.generateMask,
                     mandatoryparameters=mandatory,
                     description=pluginOp['description'],
                     optionalparameters=optional,
                     rules=realOp.rules,
                     includeInMask=realOp.includeInMask,
                     transitions=pluginOp['transitions'],
                     parameter_dependencies=pluginOp['parameter_dependencies']
                     if 'parameter_dependencies' in pluginOp else None)
Exemple #7
0
 def isValid(self):
     for filter in self.filters:
         if getOperation(filter) is None:
             logging.getLogger('maskgen').warning(
                 'Invalid operation {} in group {}'.format(
                     filter, self.name))
             return False
     return True
Exemple #8
0
 def getOperation(self, name):
     grp = self.getGroup(name)
     try:
         return self._buildGroupOperation(
             grp, name,
             warning=False) if grp is not None else getOperation(name)
     except Exception as e:
         logging.getLogger('maskgen').error(
             'Group Filter {} is in an inconsistent state: {} '.format(
                 name, str(e)))
         return None
Exemple #9
0
def checkMandatory(edge,op,graph,frm,to):
  if op == 'Donor':
    return None
  opObj = getOperation(op)
  if opObj is None:
    return [op + ' is not a valid operation'] if op != 'Donor' else []
  args = edge['arguments'] if 'arguments' in edge  else []
  missing = [param for param in opObj.mandatoryparameters.keys() if (param not in args or len(str(args[param]))== 0) and param != 'inputmaskname']
  if 'inputmaskname' in opObj.mandatoryparameters.keys() and ('inputmaskname' not in edge or edge['inputmaskname'] is None or len(edge['inputmaskname']) == 0):
    missing.append('inputmaskname')
  return [('Mandatory parameter ' + m + ' is missing') for m in missing]
Exemple #10
0
    def _addAnalysis(self,startIm,destIm,op,analysis,mask,arguments={}):
       import importlib
       opData = getOperation(op)
       if opData is None:
          return
       for analysisOp in opData.analysisOperations:
         mod_name, func_name = analysisOp.rsplit('.',1)
         mod = importlib.import_module(mod_name)
         func = getattr(mod, func_name)
         try:
           func(analysis,startIm,destIm,mask=tool_set.invertMask(mask),arguments=arguments)          
         except:
	   print 'Failed analysis'
Exemple #11
0
 def newcommand(self,event):
    op=getOperation(self.e2.get())
    self.argBox.delete(0,END)
    self.arginfo = []
    self.mandatoryinfo = []
    if op is not None:
      for k,v in op.mandatoryparameters.iteritems():
          self.__addToBox(k,True)
          self.arginfo.append((k,v))
          self.mandatoryinfo.append(k)
      for k,v in op.optionalparameters.iteritems():
          self.__addToBox(k,False)
          self.arginfo.append((k,v))
    if self.okButton is not None:
       self.okButton.config(state=ACTIVE if self.__checkParams() else DISABLED)
Exemple #12
0
def checkArguments(edge,op,graph,frm,to):
  if op == 'Donor':
    return None
  opObj = getOperation(op)
  args = [(k,v) for k,v in opObj.mandatoryparameters.iteritems()]
  args.extend([(k,v) for k,v in opObj.optionalparameters.iteritems()])
  results = []
  for argName,argDef in args:
    try:
      argValue = getValue(edge,'arguments.' + argName)
      if argValue:
        validateAndConvertTypedValue(argName,argValue,opObj)
    except ValueError as e:
       results.append(argName + str(e))
  return results
Exemple #13
0
 def changeParameter(self,event):
    if len(self.argBox.curselection()) == 0:
      return
    index = int(self.argBox.curselection()[0])
    value = self.argBox.get(index)
    if self.e2.get() is not None:
      op=getOperation(self.e2.get())
      if op is not None:
        argumentTuple = self.arginfo[index]
        res = promptForParameter(self, self.dir,argumentTuple, self.uiProfile.filetypes, \
           self.argvalues[argumentTuple[0]] if argumentTuple[0] in self.argvalues else None)
        if argumentTuple[0] == 'inputmaskname' and res:
          self.inputMaskName = res
        if res is not None:
          self.argvalues[argumentTuple[0]] = res
          self.argBox.delete(index)
          sep = '*: ' if argumentTuple[0] in self.mandatoryinfo else ': '
          self.argBox.insert(index,argumentTuple[0] + sep + str(res))
        self.okButton.config(state=ACTIVE if self.__checkParams() else DISABLED)
Exemple #14
0
 def changeParameter(self,event):
    if len(self.argBox.curselection()) == 0:
      return
    index = int(self.argBox.curselection()[0])
    value = self.argBox.get(index)
    if self.optocall is not None:
      op=self.pluginOps[self.optocall]
      arginfo = op['arguments']
      operation = getOperation(op['operation'][0])
      if arginfo is not None:
        arg = arginfo[index]
        argumentTuple = (arg[0],operation.mandatoryparameters[arg[0]]) if operation is not None and arg[0] in operation.mandatoryparameters else None
        argumentTuple = (arg[0],operation.optionalparameters[arg[0]]) if operation is not None and arg[0] in operation.optionalparameters else argumentTuple
        argumentTuple = ('donor',{'type':'donor','description':'Donor'}) if arg[0] == 'donor' else argumentTuple
        argumentTuple = ('inputmaskname', {'type':'imagefile','description':'Input Mask File'}) if arg[0] == 'inputmaskname' else argumentTuple
        argumentTuple = (arg[0],{'type':'string','description': arg[2] if len(arg) > 2 else 'Not Available'}) if argumentTuple is None else argumentTuple
        res = promptForParameter(self, self.dir, argumentTuple, self.parent.uiProfile.filetypes, arg[1])
        if res is not None:
          self.argvalues[arg[0]] = res
          self.argBox.delete(index)
          self.argBox.insert(index,arg[0] + ': ' + str(res))
Exemple #15
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--projects', required=True, help='Projects directory')
    parser.add_argument('--plugin',
                        default=None,
                        help='Perform specified plugin operation')
    parser.add_argument('--sourceDir',
                        default=None,
                        help='Directory of starting images')
    parser.add_argument('--endDir',
                        default=None,
                        help='Directory of manipulated images')
    parser.add_argument('--op', default=None, help='Operation Name')
    parser.add_argument('--softwareName', default=None, help='Software Name')
    parser.add_argument('--softwareVersion',
                        default=None,
                        help='Software Version')
    parser.add_argument('--description',
                        default=None,
                        help='Description, in quotes')
    parser.add_argument('--inputmaskpath',
                        default=None,
                        help='Directory of input masks')
    parser.add_argument('--additional',
                        nargs='+',
                        default={},
                        help='additional operation arguments, e.g. rotation')
    parser.add_argument('--continueWithWarning',
                        action='store_true',
                        help='Tag to ignore version warning')
    parser.add_argument('--jpg',
                        action='store_true',
                        help='Create JPEG and copy metadata from base')
    parser.add_argument('--projectDescription',
                        default=None,
                        help='Description to set to all projects')
    parser.add_argument('--technicalSummary',
                        default=None,
                        help='Technical Summary to set to all projects')
    parser.add_argument('--username',
                        default=None,
                        help='Username for projects')
    parser.add_argument('--s3',
                        default=None,
                        help='S3 Bucket/Path to upload projects to')
    args = parser.parse_args()

    ops = loadOperations("operations.json")
    soft = loadSoftware("software.csv")

    # perform the specified operation
    if args.plugin:
        print 'Performing plugin operation ' + args.plugin + '...'
        process_plugin(args.sourceDir, args.projects, args.plugin,
                       args.projectDescription, args.technicalSummary,
                       args.username)
    elif args.sourceDir:
        check_ops(ops, soft, args)
        additionalArgs = check_additional_args(
            args.additional, software_loader.getOperation(args.op))
        process(args.sourceDir, args.endDir, args.projects, args.op,
                args.softwareName, args.softwareVersion, args.description,
                args.inputmaskpath, additionalArgs, args.projectDescription,
                args.technicalSummary, args.username)
    if args.jpg:
        print 'Performing JPEG save & copying metadata from base...'
        process_jpg(args.projects)

    # bulk export to s3
    if args.s3:
        bulk_export.upload_projects(args.s3, args.projects)
Exemple #16
0
 def getOperation(self, name):
     grp = self.getGroup(name)
     return self._buildGroupOperation(
         grp, name, filter=False) if grp is not None else getOperation(name)
Exemple #17
0
 def getCategoryForOperation(self, name):
     op = getOperation(name, fake=False, warning=False)
     if op is not None:
         return op.category
     return self.getCategoryForGroup(name)
Exemple #18
0
 def help(self):
     op = getOperation(self.e2.get())
     if op is not None:
       tkMessageBox.showinfo(op.name, op.description if op.description is not None and len(op.description) > 0 else 'No description')
Exemple #19
0
 def _getOperation(self, name):
     return getOperation(name, fake=True)
Exemple #20
0
    def _buildGroupOperation(self, grp, name, filter=True, warning=True):
        if grp is not None:
            if grp.operation is not None:
                return grp.operation
            includeInMask = dict()
            includeInMask['default'] = False
            rules = set()
            opt_params = dict()
            mandatory_params = dict()
            dependencies = dict()
            analysisOperations = set()
            generateMask = "meta"
            grp_categories = set()
            customFunctions = {}
            ops = []
            if filter and not grp.isValid():
                return None
            logging.getLogger('maskgen').info(
                'Building group {} filter {}'.format(grp, name))
            compareparameters = {}
            for op in grp.filters:
                operation = self._getOperation(op)
                ops.append(operation)
                grp_categories.add(operation.category)
                for k, v in operation.includeInMask.iteritems():
                    if k in includeInMask:
                        includeInMask[k] = includeInMask[k] | v
                    else:
                        includeInMask[k] = v
                generateMask = chooseHigherRank(generateMask,
                                                operation.generateMask)
                addToSet(rules, operation.rules)
                addToMap(mandatory_params, operation.mandatoryparameters)
                addToMap(opt_params, operation.optionalparameters)
                addToSet(analysisOperations, operation.analysisOperations)
                addToMap(dependencies, operation.parameter_dependencies)
                compareparameters.update(operation.compareparameters)
                if operation.maskTransformFunction is not None:
                    mergeKeys(customFunctions, operation.maskTransformFunction)
            opt_params = dict([(k, v) for (k, v) in opt_params.iteritems()
                               if k is not mandatory_params])
            transitions = get_transitions(ops)

            if len(customFunctions) > 0:
                for k in customFunctions:
                    if len(customFunctions[k]) > 0:
                        #TODO...not using this now...list vs. str issue
                        customFunctions[k] = customFunctions[k]
                    else:
                        customFunctions[k] = customFunctions[k][0]

            return Operation(name=name,
                             category='Groups',
                             includeInMask=includeInMask,
                             generateMask=generateMask,
                             mandatoryparameters=mandatory_params,
                             description='User Defined',
                             optionalparameters=opt_params,
                             rules=list(rules),
                             transitions=transitions,
                             groupedOperations=grp.filters,
                             compareparameters=compareparameters,
                             groupedCategories=grp_categories,
                             analysisOperations=analysisOperations,
                             maskTransformFunction=customFunctions,
                             parameter_dependencies=dependencies)
            return grp.operation
        return getOperation(name, fake=True, warning=warning)
Exemple #21
0
def checkOperation(edge,op,graph,frm,to):
  if op == 'Donor':
    return None
  opObj = getOperation(op)
  if opObj is None:
    return ['Operation ' + op + ' is invalid']