diff --git a/bg_utils/mongo/models.py b/bg_utils/mongo/models.py index 2b9b7c5..2e386e5 100644 --- a/bg_utils/mongo/models.py +++ b/bg_utils/mongo/models.py @@ -27,6 +27,7 @@ StringField, CASCADE, PULL, + FileField, ) from mongoengine.errors import DoesNotExist @@ -39,6 +40,7 @@ Instance as BrewtilsInstance, Parameter as BrewtilsParameter, Request as BrewtilsRequest, + RequestFile as BrewtilsRequestFile, System as BrewtilsSystem, Event as BrewtilsEvent, Principal as BrewtilsPrincipal, @@ -62,6 +64,7 @@ "Role", "RefreshToken", "Job", + "RequestFile", "RequestTemplate", "DateTrigger", "CronTrigger", @@ -131,7 +134,7 @@ def clean(self): class Parameter(EmbeddedDocument, BrewtilsParameter): - """Mongo-Backed BREWMASTER Parameter Object""" + """Mongo-Backed brewtils parameter object""" key = StringField(required=True) type = StringField(required=True, default="Any", choices=BrewtilsParameter.TYPES) @@ -149,6 +152,7 @@ class Parameter(EmbeddedDocument, BrewtilsParameter): required=False, choices=BrewtilsParameter.FORM_INPUT_TYPES ) parameters = ListField(EmbeddedDocumentField("Parameter")) + type_info = DictField(required=False) # If no display name was set, it will default it to the same thing as the key def __init__(self, *args, **kwargs): @@ -409,6 +413,18 @@ def find_or_none(system_id): return None +class RequestFile(Document, BrewtilsRequestFile): + """Mongo backed request file resource""" + + STORAGE_ENGINES = ["gridfs"] + + storage_type = StringField(required=True, default="gridfs") + filename = StringField(required=True) + body = FileField(required=True) + created_at = DateTimeField(default=datetime.datetime.utcnow, required=True) + request = ReferenceField("Request", reverse_delete_rule=CASCADE) + + class System(Document, BrewtilsSystem): """Mongo-Backed BREWMASTER System Object""" diff --git a/bg_utils/mongo/parser.py b/bg_utils/mongo/parser.py index 15a764c..361de54 100644 --- a/bg_utils/mongo/parser.py +++ b/bg_utils/mongo/parser.py @@ -15,6 +15,7 @@ RefreshToken, Job, RequestTemplate, + RequestFile, DateTrigger, IntervalTrigger, CronTrigger, @@ -34,6 +35,7 @@ class MongoParser(SchemaParser): "CommandSchema": Command, "ParameterSchema": Parameter, "RequestSchema": Request, + "RequestFileSchema": RequestFile, "RequestTemplateSchema": RequestTemplate, "ChoicesSchema": Choices, "EventSchema": Event, diff --git a/bg_utils/mongo/util.py b/bg_utils/mongo/util.py index 436fc1e..975fd9f 100644 --- a/bg_utils/mongo/util.py +++ b/bg_utils/mongo/util.py @@ -111,6 +111,7 @@ def _ensure_roles(): name="bg-plugin", description="Allows actions necessary for plugins to function", permissions=[ + "bg-file-read", "bg-instance-update", "bg-job-create", "bg-job-update", diff --git a/test/unit/init_test.py b/test/unit/init_test.py index 143d42d..df586b2 100644 --- a/test/unit/init_test.py +++ b/test/unit/init_test.py @@ -226,9 +226,9 @@ def test_correctness(self, tmpdir, spec): config_file = os.path.join(str(tmpdir), "config.yaml") logging_config_file = os.path.join(str(tmpdir), "logging.json") - bg_utils.generate_config_file(spec, [ - "-c", config_file, "-l", logging_config_file - ]) + bg_utils.generate_config_file( + spec, ["-c", config_file, "-l", logging_config_file] + ) spec.add_source(label="config_file", source_type="yaml", filename=config_file) config = spec.load_config("config_file")