Skip to content

Commit

Permalink
Merge branch 'pants-pylint_plugins_test' into pants-ci-test
Browse files Browse the repository at this point in the history
  • Loading branch information
cognifloyd committed Dec 16, 2022
2 parents 102d70e + c8d6715 commit edbe2b6
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 3 deletions.
1 change: 1 addition & 0 deletions pylint_plugins/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ python_sources()
python_tests(
name="tests",
dependencies=[
"./fixtures",
"!//conftest.py:test_utils",
],
)
Expand Down
15 changes: 12 additions & 3 deletions pylint_plugins/api_models_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,16 @@
try:
# TODO: remove this once we remove the Makefile
from . import api_models

FIXTURE_MODULE_ACTION = "pylint_plugins.fixtures.api_models"
FIXTURE_MODULE_TRIGGER = "pylint_plugins.fixtures.api_models"
except ImportError:
# pylint_plugins is on PYTHONPATH
import api_models

FIXTURE_MODULE_ACTION = "fixtures.api_models"
FIXTURE_MODULE_TRIGGER = "fixtures.api_models"


def test_skiplist_class_gets_skipped():
# roughly based on st2api/st2api/controllers/v1/actionexecutions.py
Expand Down Expand Up @@ -135,12 +141,13 @@ class ActionCreateAPI(object):
def test_copied_imported_schema():
code = """
import copy
from st2common.models.api.action import ActionAPI
from %s import ActionAPI
class ActionCreateAPI(object):
schema = copy.deepcopy(ActionAPI.schema)
schema["properties"]["default_files"] = {}
"""
code = code % FIXTURE_MODULE_ACTION

res = parse(code)

Expand All @@ -163,13 +170,14 @@ class ActionCreateAPI(object):
def test_indirect_copied_schema():
code = """
import copy
from st2common.models.api.action import ActionAPI
from %s import ActionAPI
REQUIRED_ATTR_SCHEMAS = {"action": copy.deepcopy(ActionAPI.schema)}
class ExecutionAPI(object):
schema = {"properties": {"action": REQUIRED_ATTR_SCHEMAS["action"]}}
"""
code = code % FIXTURE_MODULE_ACTION

res = parse(code)

Expand All @@ -187,11 +195,12 @@ class ExecutionAPI(object):

def test_inlined_schema():
code = """
from st2common.models.api.trigger import TriggerAPI
from %s import TriggerAPI
class ActionExecutionAPI(object):
schema = {"properties": {"trigger": TriggerAPI.schema}}
"""
code = code % FIXTURE_MODULE_TRIGGER

res = parse(code)

Expand Down
4 changes: 4 additions & 0 deletions pylint_plugins/fixtures/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
python_test_utils(
sources=["*.py"],
skip_pylint=True,
)
Empty file.
159 changes: 159 additions & 0 deletions pylint_plugins/fixtures/api_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
# Copyright 2022 The StackStorm Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


import abc

DEFAULT_PACK_NAME = "default"


NotificationSubSchemaAPI = {
"type": "object",
"properties": {
"message": {"type": "string", "description": "Message to use for notification"},
"data": {
"type": "object",
"description": "Data to be sent as part of notification",
},
"routes": {
"type": "array",
"description": "Channels to post notifications to.",
},
"channels": { # Deprecated. Only here for backward compatibility.
"type": "array",
"description": "Channels to post notifications to.",
},
},
"additionalProperties": False,
}


def get_schema(**kwargs):
return {}


# copied from st2common.models.api.base
class BaseAPI(abc.ABC):
schema = abc.abstractproperty
name = None


# copied from st2common.models.api.action
class ActionAPI(BaseAPI):
"""
The system entity that represents a Stack Action/Automation in the system.
"""

schema = {
"title": "Action",
"description": "An activity that happens as a response to the external event.",
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for the action.",
"type": "string",
},
"ref": {
"description": "System computed user friendly reference for the action. \
Provided value will be overridden by computed value.",
"type": "string",
},
"uid": {"type": "string"},
"name": { # used in test
"description": "The name of the action.",
"type": "string",
"required": True,
},
"description": { # used in test
"description": "The description of the action.",
"type": "string",
},
"enabled": {
"description": "Enable or disable the action from invocation.",
"type": "boolean",
"default": True,
},
"runner_type": { # used in test
"description": "The type of runner that executes the action.",
"type": "string",
"required": True,
},
"entry_point": {
"description": "The entry point for the action.",
"type": "string",
"default": "",
},
"pack": {
"description": "The content pack this action belongs to.",
"type": "string",
"default": DEFAULT_PACK_NAME,
},
"parameters": {
"description": "Input parameters for the action.",
"type": "object",
"patternProperties": {r"^\w+$": get_schema()},
"additionalProperties": False,
"default": {},
},
"output_schema": get_schema(description="Action Output Schema"),
"tags": {
"description": "User associated metadata assigned to this object.",
"type": "array",
"items": {"type": "object"},
},
"notify": {
"description": "Notification settings for action.",
"type": "object",
"properties": {
"on-complete": NotificationSubSchemaAPI,
"on-failure": NotificationSubSchemaAPI,
"on-success": NotificationSubSchemaAPI,
},
"additionalProperties": False,
},
"metadata_file": {
"description": "Path to the metadata file relative to the pack directory.",
"type": "string",
"default": "",
},
},
"additionalProperties": False,
}


class TriggerTypeAPI(BaseAPI):
schema = {
"type": "object",
"properties": {
"id": {"type": "string", "default": None},
"ref": {"type": "string"},
"uid": {"type": "string"},
"name": {"type": "string", "required": True},
"pack": {"type": "string"},
"description": {"type": "string"},
"payload_schema": {"type": "object", "default": {}},
"parameters_schema": {"type": "object", "default": {}},
"tags": {
"description": "User associated metadata assigned to this object.",
"type": "array",
"items": {"type": "object"},
},
"metadata_file": {
"description": "Path to the metadata file relative to the pack directory.",
"type": "string",
"default": "",
},
},
"additionalProperties": False,
}

0 comments on commit edbe2b6

Please sign in to comment.