def _get_group(self, domain, in_revision=True): group = Group.by_name(domain) if not group: if not in_revision: model.repo.new_revision() group = Group(name=domain, description=domain) setup_default_user_roles(group) group.save() if not in_revision: model.repo.commit() return group
def initdb(self): kata = Group.get('KATA') if not kata: repo.new_revision() kata = Group(name="KATA", title="Tieteenalat") kata.save() for tiede in tieteet.tieteet: t = Group(description=tiede['description'], name=tiede['name'], title=tiede['title']) t.save() m = Member(group=kata, table_id=t.id, table_name="group") m.save() setup()
def add_to_group(key, data, errors, context): ''' Add a new group if it doesn't yet exist. :param key: key :param data: data :param errors: validation errors :param context: context ''' val = data.get(key) if val: repo.new_revision() grp = Group.get(val) # UI code needs group created if it does not match. Hence do so. if not grp: grp = Group(name=val, description=val, title=val) setup_default_user_roles(grp) grp.save() repo.commit()
def _fetch_import_set(self, harvest_object, master_data, client, group): # Could be genuine fetch or retry of set insertions. if 'set' in master_data: # Fetch stage. args = {self.metadata_prefix_key: self.metadata_prefix_value, 'set': master_data['set']} if 'from_' in master_data: args['from_'] = self._datetime_from_str(master_data['from_']) if 'until' in master_data: args['until'] = self._datetime_from_str(master_data['until']) ids = [] try: for identity in client.listIdentifiers(**args): ids.append(identity.identifier()) except NoRecordsMatchError: return False # Ok, empty set. Nothing to do. except socket.error: errno, errstr = sys.exc_info()[:2] self._save_object_error( 'Socket error OAI-PMH %s, details:\n%s' % (errno, errstr,), harvest_object, stage='Fetch') return False except httplib.BadStatusLine: self._save_object_error( 'Bad HTTP response status line.', harvest_object, stage='Fetch') return False master_data['record_ids'] = ids else: log.debug('Reinsert: %s %i' % (master_data['set_name'], len(master_data['record_ids']),)) # Do not save to DB because we can't. # Import stage. model.repo.new_revision() subg_name = '%s - %s' % (group.name, master_data['set_name'],) subgroup = Group.by_name(subg_name) if not subgroup: subgroup = Group(name=subg_name, description=subg_name) setup_default_user_roles(subgroup) subgroup.save() missed = [] for ident in master_data['record_ids']: pkg_name = self._package_name_from_identifier(ident) # Package may have been omitted due to missing metadata. pkg = Package.get(pkg_name) if pkg: subgroup.add_package_by_name(pkg_name) subgroup.save() if 'set' not in master_data: log.debug('Inserted %s into %s' % (pkg_name, subg_name,)) else: # Either omitted due to missing metadata or fetch error. # In the latter case, we want to add record later once the # fetch succeeds after retry. missed.append(ident) if 'set' not in master_data: log.debug('Omitted %s from %s' % (pkg_name, subg_name,)) if len(missed): # Store missing names for retry. master_data['record_ids'] = missed if 'set' in master_data: del master_data['set'] # Omit fetch later. harvest_object.content = json.dumps(master_data) log.debug('Missed %s %i' % (master_data['set_name'], len(missed),)) else: harvest_object.content = None # Clear data. model.repo.commit() return True