Пример #1
0
 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)
Пример #2
0
            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
Пример #3
0
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
Пример #4
0
 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
     })
Пример #5
0
 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)
Пример #6
0
 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
Пример #7
0
 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)
Пример #8
0
            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
Пример #9
0
 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,
     )
Пример #10
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,
     )
Пример #11
0
 def has_field_editable(self, field):
     return ModelProtectionProfile.has_editable(get_model_id(self.model), get_user(), field)
Пример #12
0
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
Пример #13
0
 def add_ref(model, ref_model, ref_field):
     model_id = get_model_id(model)
     refs[model_id] += [(ref_model, ref_field)]
Пример #14
0
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