class ModelForm(forms.Form): model = forms.ChoiceField( choices=[ (get_model_id(m), get_model_id(m)) for m in sorted(d_apps.get_models(), key=lambda x: x._meta.db_table) ] ) action = forms.CharField(widget=forms.HiddenInput)
def import_check_perms(): accepted_row = [] forbidden_row = [] if get_model_id(m) == 'ip.Address': accepted_prefixes = get_model( 'ip.PrefixAccess').objects.filter( user=request.user, can_change=True).values_list('prefix', 'vrf_id') csv_reader = csv.DictReader(request.FILES['file']) keys = None for row in csv_reader: if not keys: keys = row.keys() for prefix in accepted_prefixes: if self.address_in_network(row['address'], prefix[0])\ and get_model('ip.VRF').objects.get(id=prefix[1]).name == row['vrf']: accepted_row.append(row) if row['address'] in forbidden_row: forbidden_row.remove(row['address']) else: forbidden_row.append(row['address']) forbidden_ip = list(set(forbidden_row)) new_csv_file = StringIO.StringIO() dict_writer = csv.DictWriter(new_csv_file, keys) dict_writer.writeheader() dict_writer.writerows(accepted_row) check_msg = ", \n\nskipped because of PrefixAccess - %d IP: \n%s" % ( len(forbidden_ip), "\n".join(forbidden_ip)) else: new_csv_file = request.FILES["file"] check_msg = "" return new_csv_file, check_msg
def test_model_id(model_id): """ Check model has same model_id as referred """ model = get_model(model_id) if model: real_model_id = get_model_id(model) assert real_model_id == model_id
def delete_index(cls, sender, instance): model_id = get_model_id(sender) object_id = str(instance.id) logger.info("Remove FTS index for %s:%s", model_id, object_id) TextIndex._get_collection().delete_one({ "model": model_id, "object": object_id })
def on_new_model(cls, sender, **kwargs): if str(sender._meta) in cls.EXCLUDE: return # Ignore model model_id = get_model_id(sender) ttl = cls.get_model_ttl(model_id) if not ttl: return # Disabled cls._model_ttls[model_id] = ttl django_signals.post_save.connect(cls.on_update_model, sender=sender) django_signals.post_delete.connect(cls.on_delete_model, sender=sender) django_signals.post_init.connect(cls.on_init_model, sender=sender)
def get_launch_info(self, request): li = super().get_launch_info(request) cf = self.get_custom_fields() if cf: li["params"].update( { "cust_model_fields": [f.ext_model_field for f in cf], "cust_grid_columns": [f.ext_grid_column for f in cf], "cust_form_fields": [f.ext_form_field for f in cf if not f.is_hidden], } ) if self.model: li["params"]["protected_field"] = ModelProtectionProfile.get_effective_permissions( model_id=get_model_id(self.model), user=request.user ) return li
def on_enter_state(self, obj): """ Called when object enters state :param obj: :return: """ # Process on enter handlers if self.on_enter_handlers: logger.debug("[%s|%s] Running on_enter_handlers", obj, obj.state.name) for hn in self.on_enter_handlers: try: h = get_handler(str(hn)) except ImportError as e: logger.error("Error import on_enter handler: %s" % e) h = None if h: logger.debug("[%s|%s] Running %s", obj, self.name, hn) h(obj) # @todo: Catch exceptions else: logger.debug("[%s|%s] Invalid handler %s, skipping", obj, self.name, hn) # Run Job handler when necessary if self.job_handler: logger.debug("[%s|%s] Running job handler %s", obj.self.name, self.job_handler) try: h = get_handler(self.job_handler) except ImportError as e: logger.error("Error import state job handler: %s" % e) h = None if h: call_later(STATE_JOB, handler=self.job_handler, model=get_model_id(obj), object=str(obj.pk)) else: logger.debug("[%s|%s] Invalid job handler %s, skipping", obj, self.name, self.job_handler)
def import_check_perms(): accepted_row = [] forbidden_row = [] if get_model_id(m) == "ip.Address": accepted_prefixes = ( get_model("ip.PrefixAccess") .objects.filter(user=request.user, can_change=True) .values_list("prefix", "vrf_id") ) csv_reader = csv.DictReader(request.FILES["file"]) keys = None for row in csv_reader: if not keys: keys = list(row) for prefix in accepted_prefixes: if ( self.address_in_network(row["address"], prefix[0]) and get_model("ip.VRF").objects.get(id=prefix[1]).name == row["vrf"] ): accepted_row.append(row) if row["address"] in forbidden_row: forbidden_row.remove(row["address"]) else: forbidden_row.append(row["address"]) forbidden_ip = list(set(forbidden_row)) new_csv_file = StringIO() dict_writer = csv.DictWriter(new_csv_file, keys) dict_writer.writeheader() dict_writer.writerows(accepted_row) check_msg = ", \n\nskipped because of PrefixAccess - %d IP: \n%s" % ( len(forbidden_ip), "\n".join(forbidden_ip), ) else: new_csv_file = StringIO(request.FILES["file"].read().decode()) check_msg = "" return new_csv_file, check_msg
def log(cls, sender, instance, op, changes): """ Log into audit trail """ user = get_user() # Retrieve user from thread local storage if not user or not user.is_authenticated(): return # No user initialized, no audit trail if not changes: logger.debug("Nothing to log for %s", instance) return now = datetime.datetime.now() model_id = get_model_id(sender) cls._get_collection().insert( { "timestamp": now, "user": user.username, "model_id": model_id, "object": str(instance.pk), "op": op, "changes": changes, "expires": now + cls._model_ttls[model_id], }, w=0, )
def update_index(cls, sender, instance): data = instance.get_index() if not data: return model_id = get_model_id(sender) object_id = str(instance.id) logger.info("Update FTS index for %s:%s", model_id, object_id) TextIndex._get_collection().update_one( { "model": model_id, "object": object_id }, { "$set": { "title": data.get("title"), "content": data.get("content"), "card": data.get("card"), "tags": data.get("labels"), "language": "english", "changed": datetime.datetime.now(), } }, upsert=True, )
def has_field_editable(self, field): return ModelProtectionProfile.has_editable(get_model_id(self.model), get_user(), field)
def get_fields(): r = [] for model in get_models(): for f in model._meta.fields: r += [(get_model_id(model), f.name, f)] return r
def add_ref(model, ref_model, ref_field): model_id = get_model_id(model) refs[model_id] += [(ref_model, ref_field)]
def _apply_dynamic_client_groups(obj): dynamic_client_groups = [] if hasattr(obj, "effective_labels"): dynamic_client_groups = ResourceGroup.get_dynamic_client_groups( obj.effective_labels, get_model_id(obj)) return (obj.static_client_groups or []) + dynamic_client_groups