Models - Nautobot ChatOps Documentation

Skip to content

# Models

## `nautobot_chatops.models`

Django models for recording user interactions with Nautobot.

### `AccessGrant`

Bases: `BaseModel`, `ChangeLoggedModel`

Record of a single form of access granted to the chatbot.

Source code in `nautobot_chatops/models.py`

     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    class AccessGrant(BaseModel, ChangeLoggedModel):
        """Record of a single form of access granted to the chatbot."""

        command = models.CharField(max_length=64, help_text=ACCESS_GRANT_COMMAND_HELP_TEXT)
        subcommand = models.CharField(
            max_length=64,
            help_text=ACCESS_GRANT_SUBCOMMAND_HELP_TEXT,
        )

        grant_type = models.CharField(max_length=32, choices=AccessGrantTypeChoices)

        name = models.CharField(max_length=255, help_text=ACCESS_GRANT_NAME_HELP_TEXT)
        value = models.CharField(
            max_length=255,
            help_text=ACCESS_GRANT_VALUE_HELP_TEXT,
        )

        def clean(self):
            """Model validation logic."""
            super().clean()
            if self.command == "*" and self.subcommand != "*":
                raise ValidationError("Use of a command wildcard with a non-wildcard subcommand is not permitted")

        def __str__(self):
            """String representation of an AccessGrant."""
            return f'cmd: "{self.command} {self.subcommand}", {self.grant_type}: "{self.name}" ({self.value})'

        class Meta:
            """Meta-attributes of an AccessGrant."""

            ordering = ["command", "subcommand", "grant_type"]

#### `Meta`

Meta-attributes of an AccessGrant.

Source code in `nautobot_chatops/models.py`

    122
    123
    124
    125
    class Meta:
        """Meta-attributes of an AccessGrant."""

        ordering = ["command", "subcommand", "grant_type"]

#### `__str__()`

String representation of an AccessGrant.

Source code in `nautobot_chatops/models.py`

    118
    119
    120
    def __str__(self):
        """String representation of an AccessGrant."""
        return f'cmd: "{self.command} {self.subcommand}", {self.grant_type}: "{self.name}" ({self.value})'

#### `clean()`

Model validation logic.

Source code in `nautobot_chatops/models.py`

    112
    113
    114
    115
    116
    def clean(self):
        """Model validation logic."""
        super().clean()
        if self.command == "*" and self.subcommand != "*":
            raise ValidationError("Use of a command wildcard with a non-wildcard subcommand is not permitted")

### `CommandLog`

Bases: `BaseModel`

Record of a single fully-executed Nautobot command.

Incomplete commands (those requiring additional user input) should not be recorded, nor should any "help" commands or invalid command entries.

Source code in `nautobot_chatops/models.py`

    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    class CommandLog(BaseModel):
        """Record of a single fully-executed Nautobot command.

        Incomplete commands (those requiring additional user input) should not be recorded,
        nor should any "help" commands or invalid command entries.
        """

        start_time = models.DateTimeField(null=True)
        runtime = models.DurationField(null=True)

        user_name = models.CharField(max_length=255, help_text=COMMAND_LOG_USER_NAME_HELP_TEXT)
        user_id = models.CharField(max_length=255, help_text=COMMAND_LOG_USER_ID_HELP_TEXT)
        platform = models.CharField(max_length=64, help_text=COMMAND_LOG_PLATFORM_HELP_TEXT)
        platform_color = ColorField()

        command = models.CharField(max_length=64, help_text=COMMAND_LOG_COMMAND_TEXT)
        subcommand = models.CharField(max_length=64, help_text=COMMAND_LOG_SUBCOMMAND_HELP_TEXT)

        params = models.JSONField(default=list, help_text=COMMAND_LOG_PARAMS_HELP_TEXT)

        status = models.CharField(
            max_length=32,
            choices=CommandStatusChoices,
            default=CommandStatusChoices.STATUS_SUCCEEDED,
        )
        details = models.CharField(max_length=255, default="")

        csv_headers = ["Start Time", "Username", "Command", "Subcommand", "Params", "Status"]

        def to_csv(self):
            """Indicates model fields to return as csv."""
            return (
                self.start_time,
                self.user_name,
                self.command,
                self.subcommand,
                self.params if self.params else "",
                self.status,
            )

        @property
        def status_label_class(self):
            """Bootstrap CSS label class for each status value."""
            # pylint: disable=no-else-return
            if self.status == CommandStatusChoices.STATUS_SUCCEEDED:
                return "success"
            elif self.status == CommandStatusChoices.STATUS_BLOCKED:
                return "default"
            elif self.status == CommandStatusChoices.STATUS_FAILED:
                return "warning"
            else:  # STATUS_ERRORED, STATUS_UNKNOWN
                return "danger"

        def __str__(self):
            """String representation of a CommandLog entry."""
            return f"{self.user_name} on {self.platform}: {self.command} {self.subcommand} {self.params} ({self.status})"

        class Meta:
            """Meta-attributes of a CommandLog."""

            ordering = ["start_time"]

#### `status_label_class` `property`

Bootstrap CSS label class for each status value.

#### `Meta`

Meta-attributes of a CommandLog.

Source code in `nautobot_chatops/models.py`

    89
    90
    91
    92
    class Meta:
        """Meta-attributes of a CommandLog."""

        ordering = ["start_time"]

#### `__str__()`

String representation of a CommandLog entry.

Source code in `nautobot_chatops/models.py`

    85
    86
    87
    def __str__(self):
        """String representation of a CommandLog entry."""
        return f"{self.user_name} on {self.platform}: {self.command} {self.subcommand} {self.params} ({self.status})"

#### `to_csv()`

Indicates model fields to return as csv.

Source code in `nautobot_chatops/models.py`

    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    def to_csv(self):
        """Indicates model fields to return as csv."""
        return (
            self.start_time,
            self.user_name,
            self.command,
            self.subcommand,
            self.params if self.params else "",
            self.status,
        )

### `CommandToken`

Bases: `BaseModel`, `ChangeLoggedModel`

Record of a Token granted for the chat platform and chat command.

Source code in `nautobot_chatops/models.py`

    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    class CommandToken(BaseModel, ChangeLoggedModel):
        """Record of a Token granted for the chat platform and chat command."""

        comment = models.CharField(max_length=255, help_text=COMMAND_TOKEN_COMMENT_HELP_TEXT, blank=True, default="")
        platform = models.CharField(max_length=32, choices=CommandTokenPlatformChoices)
        token = models.CharField(max_length=255, help_text=COMMAND_TOKEN_TOKEN_HELP_TEXT)

        def __str__(self):
            """String representation of a CommandToken."""
            return f'platform: "{self.platform}", token: "{self.token}", comment: "{self.comment}"'

        class Meta:
            """Meta-attributes of a CommandToken."""

            ordering = ["platform", "token", "comment"]

#### `Meta`

Meta-attributes of a CommandToken.

Source code in `nautobot_chatops/models.py`

    139
    140
    141
    142
    class Meta:
        """Meta-attributes of a CommandToken."""

        ordering = ["platform", "token", "comment"]

#### `__str__()`

String representation of a CommandToken.

Source code in `nautobot_chatops/models.py`

    135
    136
    137
    def __str__(self):
        """String representation of a CommandToken."""
        return f'platform: "{self.platform}", token: "{self.token}", comment: "{self.comment}"'