def _registerExperimentDocument(filename, created_by, expid=None, owners=[], username=None): ''' Register the experiment document and return the experiment id. :param filename: path of the document to parse (METS or notMETS) :type filename: string :param created_by: a User instance :type created_by: :py:class:`django.contrib.auth.models.User` :param expid: the experiment ID to use :type expid: int :param owners: a list of email addresses of users who 'own' the experiment, as registered in the local db :type owner: list :param username: **UNUSED** :rtype: int ''' global current_action, experiment current_action = "Ingest Processing" f = open(filename) firstline = f.readline() f.close() if firstline.startswith('<experiment'): logger.debug('processing simple xml') processExperiment = ProcessExperiment() eid = processExperiment.process_simple(filename, created_by, expid) else: logger.debug('processing METS') try: eid = parseMets(filename, created_by, expid) except SAXParseException: add_status(status=RegistrationStatus.ERROR, message="Processing METS failed: Document isn't XML, or well formed.<br> (%s)" % filename, exception=True) auth_key = '' try: auth_key = settings.DEFAULT_AUTH except AttributeError: add_status(status=RegistrationStatus.ERROR, message='No default authentication for experiment ownership set (settings.DEFAULT_AUTH)') if auth_key: for owner in owners: # for each PI if owner: user = auth_service.getUser({'pluginname': auth_key, 'id': owner}) # if exist, create ACL if user: logger.debug('registering owner: ' + owner) acl = ExperimentACL(experiment=experiment, pluginId=django_user, entityId=str(user.id), canRead=True, canWrite=True, canDelete=True, isOwner=True, aclOwnershipType=ExperimentACL.OWNER_OWNED) acl.save() else: # Make this a critical error add_status(status=RegistrationStatus.ERROR, message="Can't create ACL for experiment: no user found for owner '%s'. Auth_key: %s.: " % (owner, auth_key,)) return experiment.id # unneeded?
def _registerExperimentDocument(filename, created_by, expid=None, owners=[], username=None): ''' Register the experiment document and return the experiment id. :param filename: path of the document to parse (METS or notMETS) :type filename: string :param created_by: a User instance :type created_by: :py:class:`django.contrib.auth.models.User` :param expid: the experiment ID to use :type expid: int :param owners: a list of owners :type owner: list :param username: **UNUSED** :rtype: int ''' f = open(filename) firstline = f.readline() f.close() sync_root = '' if firstline.startswith('<experiment'): logger.debug('processing simple xml') processExperiment = ProcessExperiment() eid, sync_root = processExperiment.process_simple( filename, created_by, expid) else: logger.debug('processing METS') eid, sync_root = parseMets(filename, created_by, expid) auth_key = '' try: auth_key = settings.DEFAULT_AUTH except AttributeError: logger.error('no default authentication for experiment' + ' ownership set (settings.DEFAULT_AUTH)') force_user_create = False try: force_user_create = settings.DEFAULT_AUTH_FORCE_USER_CREATE except AttributeError: pass if auth_key: for owner in owners: # for each PI if not owner: continue owner_username = None if '@' in owner: owner_username = auth_service.getUsernameByEmail( auth_key, owner) if not owner_username: owner_username = owner owner_user = auth_service.getUser( auth_key, owner_username, force_user_create=force_user_create) # if exist, create ACL if owner_user: #logger.debug('registering owner: ' + owner) e = Experiment.objects.get(pk=eid) acl = ExperimentACL(experiment=e, pluginId=django_user, entityId=str(owner_user.id), canRead=True, canWrite=True, canDelete=True, isOwner=True, aclOwnershipType=ExperimentACL.OWNER_OWNED) acl.save() return (eid, sync_root)
def _registerExperimentDocument(filename, created_by, expid=None, owners=[], username=None): ''' Register the experiment document and return the experiment id. :param filename: path of the document to parse (METS or notMETS) :type filename: string :param created_by: a User instance :type created_by: :py:class:`django.contrib.auth.models.User` :param expid: the experiment ID to use :type expid: int :param owners: a list of owners :type owner: list :param username: **UNUSED** :rtype: int ''' f = open(filename) firstline = f.readline() f.close() sync_root = '' if firstline.startswith('<experiment'): logger.debug('processing simple xml') processExperiment = ProcessExperiment() eid, sync_root = processExperiment.process_simple(filename, created_by, expid) else: logger.debug('processing METS') eid, sync_root = parseMets(filename, created_by, expid) auth_key = '' try: auth_key = settings.DEFAULT_AUTH except AttributeError: logger.error('no default authentication for experiment' + ' ownership set (settings.DEFAULT_AUTH)') force_user_create = False try: force_user_create = settings.DEFAULT_AUTH_FORCE_USER_CREATE except AttributeError: pass if auth_key: for owner in owners: # for each PI if not owner: continue owner_username = None if '@' in owner: owner_username = auth_service.getUsernameByEmail(auth_key, owner) if not owner_username: owner_username = owner owner_user = auth_service.getUser(auth_key, owner_username, force_user_create=force_user_create) # if exist, create ACL if owner_user: #logger.debug('registering owner: ' + owner) e = Experiment.objects.get(pk=eid) acl = ExperimentACL(experiment=e, pluginId=django_user, entityId=str(owner_user.id), canRead=True, canWrite=True, canDelete=True, isOwner=True, aclOwnershipType=ExperimentACL.OWNER_OWNED) acl.save() return (eid, sync_root)
def _registerExperimentDocument(filename, created_by, expid=None, owners=[], username=None): ''' Register the experiment document and return the experiment id. :param filename: path of the document to parse (METS or notMETS) :type filename: string :param created_by: a User instance :type created_by: :py:class:`django.contrib.auth.models.User` :param expid: the experiment ID to use :type expid: int :param owners: a list of owners :type owner: list :param username: **UNUSED** :rtype: int ''' f = open(filename) firstline = f.readline() f.close() if firstline.startswith('<experiment'): logger.debug('processing simple xml') processExperiment = ProcessExperiment() eid = processExperiment.process_simple(filename, created_by, expid) else: logger.debug('processing METS') eid = parseMets(filename, created_by, expid) # Create a DatasetWrapper for each Dataset experiment = Experiment.objects.get(pk=eid) sample = Sample(experiment=experiment, name="Default Sample", description="A default sample for %s" % experiment.title) sample.save() _create_wrappers_for_datasets(sample, experiment) # Create a Project to wraps the experiment, then create a Sample that # points to the experiment project = Project(experiment=experiment) project.save() auth_key = '' try: auth_key = settings.DEFAULT_AUTH except AttributeError: logger.error('no default authentication for experiment ownership set (settings.DEFAULT_AUTH)') force_user_create = False try: force_user_create = settings.DEFAULT_AUTH_FORCE_USER_CREATE except AttributeError: pass if auth_key: for owner in owners: logger.debug('** Owner : %s' %owner) # for each PI if not owner: continue owner_username = None if '@' in owner: logger.debug('** Email as username **') owner_username = auth_service.getUsernameByEmail(auth_key, owner) if not owner_username: logger.debug('** No existing user!! **') owner_username = owner owner_user = auth_service.getUser(auth_key, owner_username, force_user_create=force_user_create) if owner_user: # if exist, create ACL logger.debug('registering owner: ' + owner) e = Experiment.objects.get(pk=eid) acl = ExperimentACL(experiment=e, pluginId=django_user, entityId=str(owner_user.id), canRead=True, canWrite=True, canDelete=True, isOwner=True, aclOwnershipType=ExperimentACL.OWNER_OWNED) acl.save() # Also update email if '@' in owner: owner_user.email = owner owner_user.save() return eid