def create_structure(lims): for x in [ [lims, 'Folder', 'sites', 'Sites', ISites], [lims, 'Folder', 'samples', 'Samples', ISamples], [lims, 'Folder', 'materials', 'Materials', IMaterials], [lims, 'Folder', 'solutions', 'Solutions', ISolutions], [lims, 'Folder', 'ichiplots', 'iChip Lots', IiChipLots], [lims, 'Folder', 'testruns', 'Test Runs', ITestRuns], [lims, 'Folder', 'nce', 'Non Conformance Events', INonConformanceEvents], [lims, 'Folder', 'inventory', 'Inventory', IInventory], [lims, 'Folder', 'patients', 'Patients', IPatients], [lims, 'Folder', 'providers', 'Providers', IProviders], [lims, 'Folder', 'ichipassay', 'iChip Assays', IiChipAssays], [lims, 'Folder', 'configuration', 'Configuration', IConfiguration], ]: obj = create(container=x[0], type=x[1], id=x[2], title=x[3]) obj.setLayout('folder_contents') disallow_default_contenttypes(obj) alsoProvides(obj, x[4]) # Create configuration after other stuff, so that it's at the bottom of nav configuration = lims.configuration for x in [ [configuration, 'Folder', 'aliquoting', 'Aliquoting'], [configuration, 'Folder', 'departments', 'Departments'], [configuration, 'Folder', 'contacts', 'Contacts'], [configuration, 'Folder', 'samplepoints', 'Sample Points'], [configuration, 'Folder', 'sampletypes', 'Sample Types'], [configuration, 'Folder', 'analysisservices', 'Analysis Services'], [configuration, 'Folder', 'calculations', 'Calculations'], ]: instance = create(container=x[0], type=x[1], id=x[2], title=x[3]) instance.setLayout('folder_contents') disallow_default_contenttypes(instance)
def make_executive(portal): if 'executive' in portal: return ex1 = create(portal, 'Folder', 'executive', 'Executive') ex2 = create(ex1, 'Folder', 'reports', 'Reports') disallow_default_contenttypes(ex1) disallow_default_contenttypes(ex2) ex1.setLayout('folder_contents') ex2.setLayout('folder_contents') ex1.manage_permission(AddLIMSRoot, [], 0) ex1.manage_permission(permissions.AddFolder, [], 0) ex1.manage_permission(View, ['LabManager', 'Executive'], 0) ex1.manage_permission(AccessContentsInformation, ['LabManager', 'Executive'], 0) ex1.manage_permission(ListFolderContents, ['LabManager', 'Executive'], 0) ex1.manage_permission(ModifyPortalContent, ['LabManager', 'Executive'], 0) ex2.manage_permission(AddLIMSRoot, [], 0) ex2.manage_permission(permissions.AddFolder, [], 0) ex2.manage_permission(View, ['LabManager', 'Executive'], 0) ex2.manage_permission(AccessContentsInformation, ['LabManager', 'Executive'], 0) ex2.manage_permission(ListFolderContents, ['LabManager', 'Executive'], 0) ex2.manage_permission(ModifyPortalContent, ['LabManager', 'Executive'], 0)
def update(self, theme): params = {} for key, value in self.mapping.items(): attribute = getattr(theme, value) # deal wth more than one attribute, e.g. different languages # in Literals if isinstance(attribute.first, rdflib.term.Literal): att_data = {} for literal in attribute: lang = getattr(literal, 'language', self.default_language) lang = str(lang) if lang in self.available_languages: lang = self.available_languages[lang] att_data[lang] = str(literal) if not att_data: att_data = str(attribute.first) else: if not attribute.first: att_data = None else: att_data = str(attribute.first) params[key] = att_data # Use subject as rdfabout att_data = str(getattr(theme, 'subject')) params['rdfs_isDefinedBy'] = att_data params = self.get_foaf_depiction(params, att_data) # Todo : Check for collisions. Probably not by title but by # rdfs_isDefinedBy if not params['dct_title']: params['dct_title'] = params['dc_identifier'] # create a skos:concept object try: if isinstance(params['dc_identifier'], dict): id = params['dc_identifier'][self.default_language] else: id = params['dc_identifier'] if isinstance(params['dct_title'], dict): title = params['dct_title'][self.default_language] else: title = params['dct_title'] content.create(container=self.context, type=CT_SKOS_CONCEPT, id=id, title=title, **params) except Exception as e: # noqa: B902 portal.show_message(message=str(e), request=self.request) return else: self.count += 1
def make_billing(portal): if 'billing' in portal: return b1 = create(portal, 'Folder', 'billing', 'Billing') b2 = create(b1, 'Folder', 'assaybillingrequests', 'Assay Billing Requests') b3 = create(b1, 'Folder', 'billingProgram_workflow', 'Billing Programs') disallow_default_contenttypes(b1) disallow_default_contenttypes(b2) disallow_default_contenttypes(b3) b1.setLayout('folder_contents') b2.setLayout('folder_contents') b3.setLayout('folder_contents') # @formatter:off b1.manage_permission(AddLIMSRoot, [], 0) b1.manage_permission(permissions.AddFolder, [], 0) b1.manage_permission(View, ['LabManager', 'BillingExec'], 0) b1.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0) b1.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0) b1.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'], 0) b1.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0) b1.manage_permission(AddAssayBillingRequest, [], 0) b1.manage_permission(AddBillingProgram, [], 0) b1.manage_permission(AddAliquotPlate, [], 0) b2.manage_permission(AddLIMSRoot, [], 0) b2.manage_permission(permissions.AddFolder, [], 0) b2.manage_permission(View, ['LabManager', 'BillingExec'], 0) b2.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0) b2.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0) b2.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0) b2.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'], 0) b2.manage_permission(AddBillingProgram, [], 0) b2.manage_permission(AddAliquotPlate, [], 0) b2.manage_permission(AddLIMSRoot, [], 0) b3.manage_permission(permissions.AddFolder, [], 0) b3.manage_permission(View, ['LabManager', 'BillingExec'], 0) b3.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0) b3.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0) b3.manage_permission(AddBillingProgram, ['LabManager', 'BillingExec'], 0) b3.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0) b3.manage_permission(AddAssayBillingRequest, [], 0) b3.manage_permission(AddAliquotPlate, [], 0)
def make_billing(portal): if 'billing' in portal: return b1 = create(portal, 'Folder', 'billing', 'Billing') b2 = create(b1, 'Folder', 'assaybillingrequests', 'Assay Billing Requests') b3 = create(b1, 'Folder', 'billingProgram_workflow', 'Billing Programs') disallow_default_contenttypes(b1) disallow_default_contenttypes(b2) disallow_default_contenttypes(b3) b1.setLayout('folder_contents') b2.setLayout('folder_contents') b3.setLayout('folder_contents') # @formatter:off b1.manage_permission(AddLIMSRoot, [], 0) b1.manage_permission(permissions.AddFolder, [], 0) b1.manage_permission(View, ['LabManager', 'BillingExec'], 0) b1.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0) b1.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0) b1.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'], 0) b1.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0) b1.manage_permission(AddAssayBillingRequest,[],0) b1.manage_permission(AddBillingProgram,[],0) b1.manage_permission(AddAliquotPlate,[],0) b2.manage_permission(AddLIMSRoot, [], 0) b2.manage_permission(permissions.AddFolder, [], 0) b2.manage_permission(View, ['LabManager', 'BillingExec'], 0) b2.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0) b2.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0) b2.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0) b2.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'], 0) b2.manage_permission(AddBillingProgram,[],0) b2.manage_permission(AddAliquotPlate,[],0) b2.manage_permission(AddLIMSRoot, [], 0) b3.manage_permission(permissions.AddFolder, [], 0) b3.manage_permission(View, ['LabManager', 'BillingExec'], 0) b3.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0) b3.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0) b3.manage_permission(AddBillingProgram, ['LabManager', 'BillingExec'], 0) b3.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0) b3.manage_permission(AddAssayBillingRequest, [],0) b3.manage_permission(AddAliquotPlate,[],0)
def create_test_participant(self): return content.create( container=self.portal, type=self.participant_name, id='sample-participant', programName=content.get_uuid(obj=self.program), )
def import_objects(self, objects): good_count = 0 ignored_count = 0 for obj in objects: params = self.import_object(obj) # take care of harvested dct:Indentifier/adms:Identifier params.update(handle_identifiers(obj)) # Special case of isDefiendBy. If not given use rdfabout URI attribute = getattr(obj, 'rdfs_isDefinedBy') if attribute: att_data = str(attribute.first) else: att_data = str(getattr(obj, 'subject')) params['rdfs_isDefinedBy'] = att_data # Get a label for the item label = str(getattr(obj, 'dc_identifier')) # if there is no title use the dc_identifier if not params['dct_title']: params['dct_title'] = label if isinstance(label, dict): id = label[self.default_language] elif isinstance(label, list): id = label[0] else: id = label id = idnormalizer.normalize(id) if isinstance(params['dct_title'], dict): title = params['dct_title'][self.default_language] elif isinstance(params['dct_title'], list): title = params['dct_title'][0] else: title = params['dct_title'] try: # create a license document object new_obj = content.create(container=self.context, type=self.object_dx_class, id=id, title=title, **params) # skip already existing licenses except BadRequest: ignored_count += 1 continue else: good_count += 1 # set adms_identifier to the local URI of the item if new_obj.adms_identifier is None: new_obj.adms_identifier = new_obj.absolute_url() return good_count, ignored_count
def populate_calendar(obj, event): if obj.has_key('index'): return collection = contentapi.create(obj, 'Collection', id='index', title=obj.Title()) collection.setLayout('solgemafullcalendar_view') collection.query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['Event'] }, { 'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../' }] obj.setDefaultPage('index') collection.reindexObject() obj.reindexObject() request = getRequest() request.response.redirect(collection.absolute_url())
def _setObject(self, id, object, roles=None, user=None, set_owner=1, suppress_events=False): nearest_folder = library_utils.get_library_folder(self) path_in_library = library_utils.get_path_in_library(self) if nearest_folder is not None: nearest_folder_path = library_utils.get_path_in_library( nearest_folder) path_in_folder = path_in_library[len(nearest_folder_path):] parent = nearest_folder else: path_in_folder = path_in_library[1:] parent = library_utils.get_library(self) for name in path_in_folder: brain = parent.get_content(name=name, objects=False)[0] parent = content_api.create( container=parent, type=constants.LIBRARY_FOLDER_PORTAL_TYPE, id=name, title=brain.Title) return parent._setObject(id, object, roles=roles, user=user, set_owner=set_owner, suppress_events=suppress_events)
def process_raw_flipped(self, path): """Store flipped images in ichips """ flpath = join(path, 'Raw', 'Flipped') log = [] for fn in os.listdir(flpath): if 'jpg' not in fn: continue splits = fn.lower().split('_') ichip_id = splits[1].replace('.', '-') + "_%03d" % int(splits[2]) brains = find(object_provides=IiChip.__identifier__, id=ichip_id) if not brains: msg = "%s/%s: Can't find ichip '%s'" % (flpath, fn, ichip_id) raise RuntimeError(msg) ichip = brains[0].getObject() try: img = create(container=ichip, type='Image', id=fn, title=fn) except BadRequest as e: msg = "Run import has already been performed! (%s)" % e.message raise BadRequest(msg) except Unauthorized: msg = "Failed to create %s in ichip %s" % (fn, ichip.title) raise Unauthorized(msg) ts = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M") log.append(u"%s: Added image to ichip %s: %s" % (ts, ichip.id, img)) return log
def populate_calendar(obj, event): if obj.has_key('index'): return collection = contentapi.create(obj, 'Collection', id='index', title=obj.Title()) collection.setLayout('solgemafullcalendar_view') collection.query = [ {'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['Event']}, {'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../'} ] obj.setDefaultPage('index') collection.reindexObject() obj.reindexObject() request = getRequest() request.response.redirect(collection.absolute_url())
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] self.workflow = api.portal.get_tool('portal_workflow') # in tests we have to manually map content types to workflows self.workflow.setChainForPortalTypes(['News Item'], 'simple_publication_workflow') # add test item content.create(type='News Item', title='Tést item', container=self.portal) self.newsitem = self.portal['test-item'] # publish the item content.transition(obj=self.newsitem, transition='publish')
def get_calendar_year_and_uid(self): calendar_year = content.create( container=self.portal, type='OIECalendarYear', id='2020', ) uid = content.get_uuid(obj=calendar_year) return (calendar_year, uid)
def __call__(self): form = self.request.form aliquot_type = form.get('aliquot_type', False) if not aliquot_type: msg = u'You must select the type of aliquot to be created.' self.context.plone_utils.addPortalMessage(msg) self.request.response.redirect(self.context.absolute_url()) aliquot_volume = form.get('aliquot_volume', False) aliquot_count = form.get('aliquot_count', False) if not all([aliquot_type, aliquot_volume, aliquot_count]): msg = u'One of Aliquot type, volume or count was not defined!' self.context.plone_utils.addPortalMessage(msg) self.request.response.redirect(self.context.absolute_url()) try: aliquot_volume = int(aliquot_volume) aliquot_count = int(aliquot_count) except (ValueError, TypeError): msg = u'Aliquot volume and count must both be whole numbers!' self.context.plone_utils.addPortalMessage(msg) self.request.response.redirect(self.context.absolute_url()) sequence_start = get_sequence_start(self.context.veracis_id) # Discover if it's RandD or QC aliquots that we will be creating. sample = _get_parent_sample(self.context) if IQCSample.providedBy(sample): aliquot_portal_type = 'QCAliquot' else: aliquot_portal_type = 'RandDAliquot' # Create aliquots for seq in range(sequence_start, sequence_start + aliquot_count): _id = "{self.context.veracis_id}-{seq:03d}".format(**locals()) _title = "{self.context.veracis_id} - {seq:03d}".format(**locals()) aliquot = create(self.context, aliquot_portal_type, _id, initial_volume=aliquot_volume, aliquot_type=aliquot_type) aliquot.setTitle(_title) self.context.remaining_volume -= aliquot_volume * aliquot_count self.context.reindexObject(idxs=['remaining_volume']) msg = '{} {} aliquots created. Remaining volume on "{}" is {} uL' \ .format(aliquot_count, aliquot_type.lower(), self.context.title, self.context.remaining_volume) self.context.plone_utils.addPortalMessage(msg) self.request.response.redirect(self.context.absolute_url())
def create_test_program(self, safe_id=True): return content.create( container=self.portal, type=self.program_name, id='sample-program', calendar_year=self.calendar_year_uid, term='1 Fall Interim', college_or_unit='B College of Business', countries=['Afghanistan'], safe_id=safe_id, )
def make_customer_service(portal): if 'customerservice' in portal: return cs1 = create(portal, 'Folder', 'customerservice', 'Customer Service') cs2 = create(cs1, 'Folder', 'customercalls', 'Customer Calls') cs3 = create(cs1, 'Folder', 'providercalls', 'Provider Calls') disallow_default_contenttypes(cs1) disallow_default_contenttypes(cs2) disallow_default_contenttypes(cs3) cs1.setLayout('folder_contents') cs2.setLayout('folder_contents') cs3.setLayout('folder_contents') # @formatter:off cs1.manage_permission(AddLIMSRoot, [], 0) cs1.manage_permission(permissions.AddFolder, [], 0) cs1.manage_permission(View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission(AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission(ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission(AddAssayBillingRequest, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission(ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission(AddLIMSRoot, [], 0) cs2.manage_permission(permissions.AddFolder, [], 0) cs2.manage_permission(View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission(AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission(ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission(AddCustomerServiceCall, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission(ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission(AddLIMSRoot, [], 0) cs3.manage_permission(permissions.AddFolder, [], 0) cs3.manage_permission(View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission(AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission(ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission(AddBillingProgram, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission(ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] self.workflow = api.portal.get_tool('portal_workflow') # in tests we have to manually map content types to workflows self.workflow.setChainForPortalTypes( ['News Item'], 'simple_publication_workflow' ) # add test item content.create( type='News Item', title='Tést item', container=self.portal ) self.newsitem = self.portal['test-item'] # publish the item content.transition(obj=self.newsitem, transition='publish')
def create_file(container, filename): current_dir = os.path.abspath(os.path.dirname(__file__)) file_path = os.path.join(current_dir, "profiles/demo/data/", filename) if os.path.isfile(file_path): contentType = mimetypes.guess_type(file_path)[0] title = os.path.basename(file_path) with open(file_path, "rb") as fd: file_obj = content.create(container=container, type="File", title=title) file_obj.file = NamedFile(data=fd, filename=title, contentType=contentType)
def create_objects(self, good_count, ignored_count): for params in self.data: titles = params['dct_title'].copy() for key in params['dct_title'].keys(): if key not in self.all_languages: del titles[key] if len(titles) <= 1: ignored_count += 1 continue params['dct_title'] = titles id = self.get_language_value(params, 'dc_identifier') if not id: ignored_count += 1 continue id = idnormalizer.normalize(id) title = self.get_language_value(params, 'dct_title') if not title: ignored_count += 1 continue try: # create a license document object content.create( container=self.context, type=self.object_dx_class, id=id, title=title, **params) # skip already existing licenses except BadRequest: ignored_count += 1 continue else: good_count += 1 return good_count, ignored_count
def make_executive(portal): if 'executive' in portal: return ex1 = create(portal, 'Folder', 'executive', 'Executive') ex2 = create(ex1, 'Folder', 'reports', 'Reports') disallow_default_contenttypes(ex1) disallow_default_contenttypes(ex2) ex1.setLayout('folder_contents') ex2.setLayout('folder_contents') ex1.manage_permission(AddLIMSRoot, [], 0) ex1.manage_permission( permissions.AddFolder, [], 0) ex1.manage_permission( View, ['LabManager', 'Executive'], 0) ex1.manage_permission( AccessContentsInformation, ['LabManager', 'Executive'], 0) ex1.manage_permission( ListFolderContents, ['LabManager', 'Executive'], 0) ex1.manage_permission( ModifyPortalContent, ['LabManager', 'Executive'], 0) ex2.manage_permission(AddLIMSRoot, [], 0) ex2.manage_permission( permissions.AddFolder, [], 0) ex2.manage_permission( View, ['LabManager', 'Executive'], 0) ex2.manage_permission( AccessContentsInformation, ['LabManager', 'Executive'], 0) ex2.manage_permission( ListFolderContents, ['LabManager', 'Executive'], 0) ex2.manage_permission( ModifyPortalContent, ['LabManager', 'Executive'], 0)
def add_folder(portal_root, folder_name, folder_type): """Add a folder for the exclusive addition of certain CTs""" folder = portal_root.get(folder_name) if not folder: types = portal.get_tool('portal_types') fti = types.getTypeInfo(folder_type) fti.global_allow = True folder = content.create( container=portal_root, type=folder_type, id=folder_name, title=str(folder_name), ) fti.global_allow = False _publish(folder)
def test_marshall(self): obj = create( container=self.portal, type=constants.CT_DCAT_CATALOG, id='dcat_catalog_test', ) target = RDFMarshallTarget() marshaller = queryMultiAdapter( (obj, target), interface=IMarshallSource, ) marshaller.marshall() result = target._store.reader.graph.serialize() self.assertTrue(b'dcat_catalog_test' in result)
def test_get_with_sub_site(self): """Using getSite() alone is not enough to get the portal. It will return the closest site, which may return a sub site instead of the portal. Set a different local site manager and test that portal.get() still returns the portal. """ a_site = content.create(container=self.portal, type="Folder", title="A Site") a_site.setSiteManager(LocalSiteManager(a_site)) setSite(a_site) self.assertEqual(portal.get(), self.portal) # cleanup setSite(self.portal)
def save_run(self): """Create initial run """ values = get_serializeArray_form_values(self.request) try: assay = find(object_provides=IiChipAssay.__identifier__, Title=values['assay_name'])[0].getObject() except IndexError: raise InvalidAssaySelected(values['assay_name']) plates, ichips, aliquots = self.transmogrify_inputs(values['plates']) plates = self.remove_empty_plates(plates) plates = self.reorder_plates(plates) solutions = [values[x] for x in values if x.startswith('solution-')] self.transition_plate_contents(ichips, aliquots, 'queue') lab_users = LabUsersUserVocabulary(self).by_value planner = lab_users.get(values['run_planner'], '') operator = lab_users.get(values['run_planner'], '') brain = find(object_provides=ITestRuns.__identifier__)[0] folder = brain.getObject() try: run_number = int(values['run_number']) except (ValueError, TypeError): raise TypeError("Run number must be a number.") run = create( folder, 'TestRun', title=values['assay_name'], assay_name=assay.title, assay_uid=assay.UID(), run_number=run_number, run_date=values['run_date'], run_planner=planner.title if planner else '', run_operator=operator.title if operator else '', plates=plates, solutions=solutions ) return run
def test_get_with_sub_site(self): """Using getSite() alone is not enough to get the portal. It will return the closest site, which may return a sub site instead of the portal. Set a different local site manager and test that portal.get() still returns the portal. """ a_site = content.create( container=self.portal, type="Folder", title="A Site") a_site.setSiteManager(LocalSiteManager(a_site)) setSite(a_site) self.assertEqual(portal.get(), self.portal) # cleanup setSite(self.portal)
def iChipLotAdded(instance, event): """iChipLot has been added, some configuration and permissions to set on the new folder """ # Set default permissions for a new ichiplot instance.manage_permission(delete_objects, [], 0) instance.manage_permission(AddiChip, ['LabManager', 'LabClerk'], 0) disallow_default_contenttypes(instance) # I want to create X amount of iChips from form value. for x in range(1, instance.nr_ichips + 1): ichip = create(container=instance, title="{0}_{1:03d}".format(instance.title, x), type='iChip', ichip_id="{0}_{1:03d}".format(instance.title, x)) # Configure each ichip to reflect the parent's settings ichip.frames = instance.frames
def iChipLotAdded(instance, event): """iChipLot has been added, some configuration and permissions to set on the new folder """ # Set default permissions for a new ichiplot instance.manage_permission(delete_objects, [], 0) instance.manage_permission(AddiChip, ['LabManager', 'LabClerk'], 0) disallow_default_contenttypes(instance) # I want to create X amount of iChips from form value. for x in range(1, instance.nr_ichips + 1): ichip = create(container=instance, title = "{0}_{1:03d}".format(instance.title, x), type='iChip', ichip_id="{0}_{1:03d}".format(instance.title, x)) # Configure each ichip to reflect the parent's settings ichip.frames = instance.frames
def save_run(self): """Create initial run """ values = get_serializeArray_form_values(self.request) try: assay = find(object_provides=IiChipAssay.__identifier__, Title=values['assay_name'])[0].getObject() except IndexError: raise InvalidAssaySelected(values['assay_name']) plates, ichips, aliquots = self.transmogrify_inputs(values['plates']) plates = self.remove_empty_plates(plates) plates = self.reorder_plates(plates) solutions = [values[x] for x in values if x.startswith('solution-')] self.transition_plate_contents(ichips, aliquots, 'queue') lab_users = LabUsersUserVocabulary(self).by_value planner = lab_users.get(values['run_planner'], '') operator = lab_users.get(values['run_planner'], '') brain = find(object_provides=ITestRuns.__identifier__)[0] folder = brain.getObject() try: run_number = int(values['run_number']) except (ValueError, TypeError): raise TypeError("Run number must be a number.") run = create(folder, 'TestRun', title=values['assay_name'], assay_name=assay.title, assay_uid=assay.UID(), run_number=run_number, run_date=values['run_date'], run_planner=planner.title if planner else '', run_operator=operator.title if operator else '', plates=plates, solutions=solutions) return run
def test_create_serveitic_folder_structure(self): serveitic = create(self.portal, type='serveitic', id='serveitic-1', title='Servei TIC 1') self.assert_content_in(serveitic, 'el-servei', 'Folder', 'El servei') self.assert_content_in(serveitic['el-servei'], 'descripcio-del-servei', 'Document', 'Descripció del servei') self.assert_content_in(serveitic['el-servei'], 'normativa', 'Document', 'Normativa') self.assert_content_in(serveitic['el-servei'], 'procediments', 'Document', 'Procediments') self.assert_content_in(serveitic['el-servei'], 'evolucio-del-servei', 'Document', 'Evolució del servei') self.assert_content_in(serveitic['el-servei'], 'errors-coneguts', 'Document', 'Errors coneguts') self.assert_content_in(serveitic, 'documentacio', 'Folder', 'Documentació') self.assert_content_in(serveitic['documentacio'], 'manuals', 'Folder', 'Manuals') self.assert_content_in(serveitic['documentacio']['manuals'], 'manual', 'Document', 'Manual') self.assert_content_in(serveitic['documentacio'], 'casos-dus', 'Document', "Casos d'ús") self.assert_content_in(serveitic, 'faq', 'Folder', 'FAQ') self.assert_content_in(serveitic['faq'], 'faq-1', 'Document', 'FAQ-1') self.assert_content_in(serveitic, 'doc-tecnica', 'Folder', 'Doc tècnica') self.assert_content_in(serveitic['doc-tecnica'], 'fitxa-tecnica', 'Document', 'Fitxa tècnica') self.assert_content_in(serveitic['doc-tecnica'], 'documentacio-de-referencia', 'Document', "Documentació de referència") self.assert_content_in(serveitic['doc-tecnica'], 'enllacos', 'Document', "Enllaços") self.assert_content_in(serveitic, 'suggeriments', 'Folder', 'Suggeriments')
def process_out_figures(self, path): """Store images in samples """ figpath = join(path, 'Out', 'Figures') log = [] for fn in os.listdir(figpath): if 'png' not in fn: continue aliquot = self.get_aliquot_from_fn(fn) try: img = create(container=aliquot, type='Image', id=fn, title=fn) except BadRequest as e: msg = "Run import has already been performed! (%s)" % e.message raise BadRequest(msg) except Unauthorized: msg = "Failed to create %s in aliquot %s" % (fn, aliquot.title) raise Unauthorized(msg) ts = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M") log.append("%s: Added image to aliquot %s: %s" % (ts, aliquot.title, img)) return log
def add_member_profile(data, customfields=None): userid = data.get('user_id', data.get('username')) member = user.get(userid=userid) site = portal.get() mps_dir_id = 'directory' mps_dir = hasattr(site, mps_dir_id) and site[mps_dir_id] or None if not mps_dir: return mdata = {} fullname = member.getProperty('fullname') fullname_parts = fullname.split() mdata['nameFirst'] = ' '.join(fullname_parts[:-1]) mdata['nameLast'] = ' '.join(fullname_parts[-1:]) mdata['email'] = member.getProperty('email') mdata['country'] = member.getProperty('country') mdata['countriesOfResidence'] = member.getProperty('country') mdata['gender'] = member.getProperty('gender') for f in customfields: if f in BASE_FIELDS or f in ['country', 'gender']: continue mdata[f] = member.getProperty(f) mp = content.create( container=mps_dir, type='Member Profile', id=userid, safe_id=True, **mdata) site = portal.get() site.plone_utils.changeOwnershipOf(mp, userid) # mp.changeOwnership(member, recursive=True) mp.setCreators([userid]) mp.reindexObjectSecurity() mp.reindexObject() return mp
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return utils._send_emails = False try: en_folder = self.context.restrictedTraverse('en') if 'organisations' in en_folder: org_folder = en_folder.restrictedTraverse('organisations') else: org_folder = content.create( en_folder, type='osha.hwccontent.organisationfolder', title='Organisations') if 'focalpoints' in en_folder: fop_folder = en_folder.restrictedTraverse('focalpoints') else: fop_folder = content.create( en_folder, type='osha.hwccontent.organisationfolder', title='Focalpoints') type_mapping = { u'Organisation': { 'type': 'osha.hwccontent.organisation', 'schema': dict(getFieldsInOrder(IOrganisation)), 'folder': org_folder, 'wf_actions': ('approve_phase_1', ), }, u'Focalpoint': { 'type': 'osha.hwccontent.focalpoint', 'schema': dict(getFieldsInOrder(IFocalPoint)), 'folder': fop_folder, 'wf_actions': ('publish', ), } } count = 0 for data in json.loads(data['json']): # Only keep the data that's in the main schema: type_info = type_mapping[data['_type']] schema = type_info['schema'] fields = {} if data['title'].startswith('MC-'): continue for name, field in schema.items(): if name in data: value = data[name] if value and INamedImageField.providedBy(field): content_type = data.get('_%s_content_type' % name, '') filename = data.get('_%s_filename' % name, None) value = NamedBlobImage(base64.b64decode(value), str(content_type), filename) elif value and IRichText.providedBy(field): content_type = data.get('_%s_content_type', None) value = RichTextValue(value, mimeType=content_type) elif name.find("email") >= 0: value = value.strip() fields[name] = value new_obj = content.create(container=type_info['folder'], type=type_info['type'], id=data['id'], **fields) for transition in type_info['wf_actions']: try: content.transition(new_obj, transition) except Exception: logger.exception( 'Could not execute %s transition for %s' % (transition, '/'.join(new_obj.getPhysicalPath()))) logger.info('Imported %s' % new_obj.getId()) count += 1 # Set status on this form page self.status = "%s partners imported" % count except Exception: # Enable emails again: utils._send_emails = True raise
def populate_calendar(obj, event): if obj.has_key('index'): return index = contentapi.create(obj, 'Document', id='index', title=obj.Title()) index.setText(index_text) index.reindexObject() obj.setDefaultPage('index') # create container for missions mission_container = contentapi.create(obj, 'Folder', id='missions', title=u'Missions') # create all missions collection collection = contentapi.create(obj, 'Collection', id='all-missions', title=u'All Missions') collection.setLayout('solgemafullcalendar_view') collection.query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.mission'] }, { 'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions' }] collection.reindexObject() # create all mission reports collection collection = contentapi.create(obj, 'Collection', id='all-missionreports', title=u'All Mission Reports') collection.query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.missionreport'] }, { 'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions' }] # create my missions collection collection = contentapi.create(obj, 'Collection', id='my-missions', title=u'My Missions') collection.setLayout('solgemafullcalendar_view') collection.query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.mission'] }, { 'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions' }, { 'i': 'Creator', 'o': 'plone.app.querystring.operation.string.currentUser' }] collection.reindexObject() # create my mission reports collection collection = contentapi.create(obj, 'Collection', id='my-missionreports', title=u'My Mission Reports') collection.query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.mission'] }, { 'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions' }, { 'i': 'Creator', 'o': 'plone.app.querystring.operation.string.currentUser' }] collection.reindexObject() # create my mission reports drafts collection collection = contentapi.create(obj, 'Collection', id='my-missionreport-drafts', title=u'My Mission Report Drafts') collection.query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.missionreport'] }, { 'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions' }, { 'i': 'Creator', 'o': 'plone.app.querystring.operation.string.currentUser' }, { 'i': 'review_state', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['internal', 'private'] }] collection.reindexObject() # create search collection collection = contentapi.create(obj, 'Topic', id='search-missions', title=u'Search Missions') collection = contentapi.create(obj, 'Topic', id='search-missionreports', title=u'Search Mission Reports') obj.reindexObject() request = getRequest() request.response.redirect(index.absolute_url())
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return utils._send_emails = False try: en_folder = self.context.restrictedTraverse('en') if 'organisations' in en_folder: org_folder = en_folder.restrictedTraverse('organisations') else: org_folder = content.create(en_folder, type='osha.hwccontent.organisationfolder', title='Organisations') if 'focalpoints' in en_folder: fop_folder = en_folder.restrictedTraverse('focalpoints') else: fop_folder = content.create(en_folder, type='osha.hwccontent.organisationfolder', title='Focalpoints') type_mapping = { u'Organisation': { 'type': 'osha.hwccontent.organisation', 'schema': dict(getFieldsInOrder(IOrganisation)), 'folder': org_folder, 'wf_actions': ('approve_phase_1',), }, u'Focalpoint': { 'type': 'osha.hwccontent.focalpoint', 'schema': dict(getFieldsInOrder(IFocalPoint)), 'folder': fop_folder, 'wf_actions': ('publish',), } } count = 0 for data in json.loads(data['json']): # Only keep the data that's in the main schema: type_info = type_mapping[data['_type']] schema = type_info['schema'] fields = {} if data['title'].startswith('MC-'): continue for name, field in schema.items(): if name in data: value = data[name] if value and INamedImageField.providedBy(field): content_type = data.get('_%s_content_type' % name, '') filename = data.get('_%s_filename' % name , None) value = NamedBlobImage(base64.b64decode(value), str(content_type), filename) elif value and IRichText.providedBy(field): content_type = data.get('_%s_content_type', None) value = RichTextValue(value, mimeType=content_type) elif name.find("email") >= 0: value = value.strip() fields[name] = value new_obj = content.create(container=type_info['folder'], type= type_info['type'], id=data['id'], **fields) for transition in type_info['wf_actions']: try: content.transition(new_obj, transition) except Exception: logger.exception('Could not execute %s transition for %s' % (transition, '/'.join(new_obj.getPhysicalPath()))) logger.info('Imported %s' % new_obj.getId()) count += 1 # Set status on this form page self.status = "%s partners imported" % count except Exception: # Enable emails again: utils._send_emails = True raise
def make_customer_service(portal): if 'customerservice' in portal: return cs1 = create(portal, 'Folder', 'customerservice', 'Customer Service') cs2 = create(cs1, 'Folder', 'customercalls', 'Customer Calls') cs3 = create(cs1, 'Folder', 'providercalls', 'Provider Calls') disallow_default_contenttypes(cs1) disallow_default_contenttypes(cs2) disallow_default_contenttypes(cs3) cs1.setLayout('folder_contents') cs2.setLayout('folder_contents') cs3.setLayout('folder_contents') # @formatter:off cs1.manage_permission(AddLIMSRoot, [], 0) cs1.manage_permission(permissions.AddFolder, [], 0) cs1.manage_permission( View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission( AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission( ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission( AddAssayBillingRequest, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs1.manage_permission( ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission(AddLIMSRoot, [], 0) cs2.manage_permission(permissions.AddFolder, [], 0) cs2.manage_permission( View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission( AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission( ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission( AddCustomerServiceCall, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs2.manage_permission( ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission(AddLIMSRoot, [], 0) cs3.manage_permission(permissions.AddFolder, [], 0) cs3.manage_permission( View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission( AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission( ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission( AddBillingProgram, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0) cs3.manage_permission( ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
if not fullname: logger.error('No fullname found. Skip') continue fullname = safe_decode(fullname) fullname_parts = fullname.split() data['nameFirst'] = ' '.join(fullname_parts[:-1]) data['nameLast'] = ' '.join(fullname_parts[-1:]) logger.info('FirstName: %s - LastName: %s' % (data['nameFirst'], data['nameLast'])) location = member.getProperty('location') if location: cc = get_country_code(location) if cc: data['country'] = cc # data['citizenship'] = cc data['countriesOfResidence'] = cc try: newm = content.create(type='Member Profile', title=fullname, container=mps_dir, **data) except Exception as e: import pdb pdb.set_trace() logger.info('New member profile created at: %s' % newm.absolute_url()) done += 1 if done % 50 == 0: transaction.get().commit() logger.warning('Total found: %s' % len(present)) logger.warning('Total missing: %s' % len(absent))
def create_demo_content(context): """ Initializes demo profile with demo content :param context: """ portal = api.portal.get() current_dir = os.path.abspath(os.path.dirname(__file__)) json_path = os.path.join(current_dir, "profiles/demo/data/data.json") with open(json_path) as json_str: data = json.load(json_str) api.portal.set_registry_record( "plonemeeting.portal.core.global_categories", data["categories"]) normalizer = getUtility(IIDNormalizer) for institution in data["institutions"]: institution_id = normalizer.normalize(institution["title"]) institution_obj = content.create( container=portal, type="Institution", id=institution_id, title=institution["title"], representatives_mappings=institution[ "representatives_mappings"], plonemeeting_url=institution["plonemeeting_url"], username=institution["username"], password=institution["password"], meeting_config_id=institution["meeting_config_id"], additional_meeting_query_string_for_list=institution[ "additional_meeting_query_string_for_list"], additional_published_items_query_string=institution[ "additional_published_items_query_string"], item_decision_formatting_tal=institution[ "item_decision_formatting_tal"], info_annex_formatting_tal=institution[ "info_annex_formatting_tal"], ) content.transition(obj=institution_obj, transition="publish") user = api.user.create( username="******".format(institution_obj.id), email="*****@*****.**", password="******", ) group = api.group.get( format_institution_managers_group_id(institution_obj)) group.addMember(user.id) for meeting in institution["meetings"]: date_time = dateutil.parser.parse(meeting["datetime"]) meeting_obj = content.create( container=institution_obj, type="Meeting", title=meeting["title"], date_time=date_time, plonemeeting_last_modified=dateutil.parser.parse( meeting["plonemeeting_last_modified"]), ) content.transition(obj=meeting_obj, transition="send_to_project") content.transition(obj=meeting_obj, transition="publish") for item in meeting["items"]: decision = RichTextValue(item["decision"], "text/html", "text/html") item_obj = content.create( container=meeting_obj, type="Item", title=item["title"], sortable_number=item["sortable_number"], number=item["number"], representatives_in_charge=item[ "representatives_in_charge"], decision=decision, category=item["category"], plonemeeting_last_modified=dateutil.parser.parse( meeting["plonemeeting_last_modified"]), ) if "files" in item: for file in item["files"]: create_file(item_obj, file)
def test_create_serveitic_folder_structure(self): serveitic = create( self.portal, type='serveitic', id='serveitic-1', title='Servei TIC 1' ) self.assert_content_in(serveitic, 'el-servei', 'Folder', 'El servei') self.assert_content_in( serveitic['el-servei'], 'descripcio-del-servei', 'Document', 'Descripció del servei') self.assert_content_in( serveitic['el-servei'], 'normativa', 'Document', 'Normativa') self.assert_content_in( serveitic['el-servei'], 'procediments', 'Document', 'Procediments') self.assert_content_in( serveitic['el-servei'], 'evolucio-del-servei', 'Document', 'Evolució del servei') self.assert_content_in( serveitic['el-servei'], 'errors-coneguts', 'Document', 'Errors coneguts') self.assert_content_in(serveitic, 'documentacio', 'Folder', 'Documentació') self.assert_content_in( serveitic['documentacio'], 'manuals', 'Folder', 'Manuals') self.assert_content_in( serveitic['documentacio'], 'casos-dus', 'Document', "Casos d'ús") self.assert_content_in(serveitic, 'faq', 'Folder', 'FAQ') self.assert_content_in(serveitic, 'doc-tecnica', 'Folder', 'Doc tècnica') self.assert_content_in( serveitic['doc-tecnica'], 'documentacio-tecnica', 'Document', 'Documentació tècnica') self.assert_content_in( serveitic['doc-tecnica'], 'documentacio-de-referencia', 'Document', "Documentació de referència") self.assert_content_in( serveitic['doc-tecnica'], 'enllacos', 'Document', "Enllaços") self.assert_content_in(serveitic, 'suggeriments', 'Folder', 'Suggeriments')
def populate_calendar(obj, event): if obj.has_key('index'): return index = contentapi.create(obj, 'Document', id='index', title=obj.Title()) index.setText(index_text) index.reindexObject() obj.setDefaultPage('index') # create container for missions mission_container = contentapi.create(obj, 'Folder', id='missions', title=u'Missions') # create all missions collection collection = contentapi.create(obj, 'Collection', id='all-missions', title=u'All Missions') collection.setLayout('solgemafullcalendar_view') collection.query = [ {'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.mission']}, {'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions'} ] collection.reindexObject() # create all mission reports collection collection = contentapi.create(obj, 'Collection', id='all-missionreports', title=u'All Mission Reports') collection.query = [ {'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.missionreport']}, {'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions'} ] # create my missions collection collection = contentapi.create(obj, 'Collection', id='my-missions', title=u'My Missions') collection.setLayout('solgemafullcalendar_view') collection.query = [ {'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.mission']}, {'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions'}, {'i': 'Creator', 'o': 'plone.app.querystring.operation.string.currentUser'} ] collection.reindexObject() # create my mission reports collection collection = contentapi.create(obj, 'Collection', id='my-missionreports', title=u'My Mission Reports') collection.query = [ {'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.mission']}, {'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions'}, {'i': 'Creator', 'o': 'plone.app.querystring.operation.string.currentUser'} ] collection.reindexObject() # create my mission reports drafts collection collection = contentapi.create(obj, 'Collection', id='my-missionreport-drafts', title=u'My Mission Report Drafts') collection.query = [ {'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['ploneun.missions.missionreport']}, {'i': 'path', 'o': 'plone.app.querystring.operation.string.relativePath', 'v': '../missions'}, {'i': 'Creator', 'o': 'plone.app.querystring.operation.string.currentUser'}, {'i': 'review_state', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['internal', 'private']} ] collection.reindexObject() # create search collection collection = contentapi.create(obj, 'Topic', id='search-missions', title=u'Search Missions') collection = contentapi.create(obj, 'Topic', id='search-missionreports', title=u'Search Mission Reports') obj.reindexObject() request = getRequest() request.response.redirect(index.absolute_url())