def policy_atom_create(self, operator, name, description, foundation, foundation_date=None): """Adds a new atom and its data. Its can only consist of lowercased, alpha numrice characters and -.""" self.ba.assert_dns_superuser(operator.get_entity_id()) atom = Atom(self.db) # validate data tmp = atom.illegal_attr(description) if tmp: raise CerebrumError('Illegal description: %s' % tmp) tmp = atom.illegal_attr(foundation) if tmp: raise CerebrumError('Illegal foundation: %s' % tmp) foundation_date = self._parse_date(foundation_date) # check that name isn't already in use try: comp = self._get_component(name) except CerebrumError: pass else: raise CerebrumError('A policy already exists with name: %s' % name) atom.populate(name, description, foundation, foundation_date) atom.write_db() return "New atom %s created" % atom.component_name
def policy_list_atoms(self, operator, filter): """Return a list of atoms that match the given filters.""" # This method is available for everyone atom = Atom(self.db) filters = self._parse_filters(filter, { 'name': None, 'date': self._parse_create_date_range, 'create': self._parse_create_date_range, 'desc': None, 'foundation': None, }, default_filter='name', default_value=None) date_start = date_end = None if filters['date']: date_start, date_end = filters['date'] if date_end is NotSet: # only the specific date should be used date_end = date_start create_start = create_end = None if filters['create']: create_start, create_end = filters['create'] if create_end is NotSet: # only the specific date should be used create_end = create_start ret = [] for row in atom.search(name=filters['name'], description=filters['desc'], create_start=create_start, create_end=create_end, foundation_start=date_start, foundation_end=date_end, foundation=filters['foundation']): ret.append({'name': row['name'], 'desc': row['description']}) return sorted(ret, key=lambda r: r['name'])
def process_atoms(stream): """Go through all atoms in the database and send them to the stream.""" logger.info('process_atoms started') db = Factory.get('Database')() atom = Atom(db) for row in atom.search(): stream.write(';'.join( (row['name'], row['description'], row['foundation'] or '', row['created_at'].strftime('%Y-%m-%d')))) stream.write('\n') logger.info('process_atoms done')
def __init__(self, db, logger): """Initialize the sync with hostpolicy objects..""" super(HostpolicySync, self).__init__(db, logger) self.component = PolicyComponent(self.db) self.role = Role(self.db) self.atom = Atom(self.db)