Beispiel #1
0
class TestInstanceSchema(ResourceMetadataSchema):
    __envelope__ = {"single": None, "many": None}
    __model__ = models.TestInstance

    class Meta:
        model = models.TestInstance

    uuid = ma.auto_field()
    roc_instance = ma.auto_field()
    name = ma.auto_field()
    resource = ma.auto_field()
    managed = fields.Boolean(attribute="managed")
    service = fields.Method("get_testing_service")

    def get_testing_service(self, obj):
        logger.debug("Test current obj: %r", obj)
        assert obj.testing_service, "Missing testing service"
        return {
            'uuid': obj.testing_service.uuid,
            'url': obj.testing_service.url,
            'type': obj.testing_service._type.replace('_testing_service', '')
        }

    @post_dump
    def remove_skip_values(self, data, **kwargs):
        return {key: value for key, value in data.items() if value is not None}
Beispiel #2
0
class WorkflowSchema(ResourceMetadataSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.WorkflowVersion

    class Meta:
        model = models.WorkflowVersion

    uuid = ma.auto_field()
    name = ma.auto_field()
Beispiel #3
0
class WorkflowRegistrySchema(BaseSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.WorkflowRegistry

    class Meta:
        model = models.WorkflowRegistry

    uuid = ma.auto_field()
    uri = ma.auto_field()
    type = ma.auto_field()
    name = fields.String(attributes="server_credentials.name")
Beispiel #4
0
class UserSchema(BaseSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.User

    class Meta:
        model = models.User

    id = ma.auto_field()
    username = ma.auto_field()
    # Uncomment to include all identities
    identities = fields.Dict(attribute="current_identity",
                             keys=fields.String(),
                             values=fields.Nested(IdentitySchema()))
Beispiel #5
0
class WorkflowRegistrySchema(ResourceMetadataSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.WorkflowRegistry

    class Meta:
        model = models.WorkflowRegistry

    uuid = ma.auto_field()
    uri = ma.auto_field()
    type = fields.Method("get_type")
    name = fields.String(attribute="server_credentials.name")

    def get_type(self, obj):
        return obj.type.replace('_registry', '')
Beispiel #6
0
class WorkflowVersionSchema(ResourceSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.WorkflowVersion

    class Meta:
        model = models.WorkflowVersion
        ordered = True

    uuid = fields.String(attribute="workflow.uuid")
    name = ma.auto_field()
    version = fields.Method("get_version")
    registry = ma.Nested(WorkflowRegistrySchema(exclude=('meta', )),
                         attribute="workflow_registry")

    rocrate_metadata = False

    def __init__(self, *args, rocrate_metadata=False, **kwargs):
        super().__init__(*args, **kwargs)
        self.rocrate_metadata = rocrate_metadata

    def get_version(self, obj):
        exclude = ('rocrate_metadata', ) if not self.rocrate_metadata else ()
        return VersionDetailsSchema(exclude=exclude).dump(obj)

    @post_dump
    def remove_skip_values(self, data, **kwargs):
        return {key: value for key, value in data.items() if value is not None}
Beispiel #7
0
class UserSchema(ResourceMetadataSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.User

    class Meta:
        model = models.User

    id = ma.auto_field()
    username = ma.auto_field()
    # identities = fields.Dict(attribute="current_identity",
    #                          keys=fields.String(),
    #                          values=fields.Nested(IdentitySchema()))
    identities = fields.Method("current_identity")

    def current_identity(self, user):
        # TODO:  these should probably defined in a Model somewhere
        lm_identity_provider = {
            "name": "LifeMonitor",
            "type": "oauth2_identity_provider",
            "uri": get_external_server_url(),
            "userinfo_endpoint": get_external_server_url() + "/users/current"
        }
        lm_user_identity = {
            "sub": str(user.id),
            "username": user.username,
            "picture": user.picture,
            "provider": lm_identity_provider,
        }

        identities = {"lifemonitor": lm_user_identity}

        # Add any other identities that the user has
        if user.current_identity:
            for k, v in user.current_identity.items():
                if k == 'lifemonitor':
                    raise RuntimeError(
                        "BUG: user has a second lifemonitor identity")
                try:
                    identities[k] = IdentitySchema().dump(v)
                except Exception as e:
                    logger.error(
                        "Unable to retrieve profile"
                        "of user % r from provider % r: % r", user.id, k,
                        str(e))
        return identities
Beispiel #8
0
class TestInstanceSchema(BaseSchema):
    __envelope__ = {"single": None, "many": None}
    __model__ = models.TestInstance

    class Meta:
        model = models.TestInstance

    uuid = ma.auto_field()
    name = ma.auto_field()
    service = fields.Method("get_testing_service")

    def get_testing_service(self, obj):
        logger.debug("Test current obj: %r", obj)
        return {
            'uuid': obj.testing_service.uuid,
            'url': obj.testing_service.url,
            'type': obj.testing_service._type,
            'resource': obj.resource
        }
Beispiel #9
0
class SuiteSchema(BaseSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.TestSuite

    class Meta:
        model = models.TestSuite

    uuid = ma.auto_field()
    test_suite_metadata = fields.Dict(
        attribute="test_definition")  # TODO: rename the property to metadata
    instances = fields.Nested(TestInstanceSchema(),
                              attribute="test_instances",
                              many=True)
Beispiel #10
0
class WorkflowVersionSchema(ResourceSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.WorkflowVersion

    class Meta:
        model = models.WorkflowVersion
        ordered = True

    uuid = fields.String(attribute="workflow.uuid")
    name = ma.auto_field()
    version = fields.Method("get_version")

    def get_version(self, obj):
        return VersionDetailsSchema().dump(obj)
Beispiel #11
0
class SuiteSchema(ResourceMetadataSchema):
    __envelope__ = {"single": None, "many": "items"}
    __model__ = models.TestSuite

    class Meta:
        model = models.TestSuite

    uuid = ma.auto_field()
    roc_suite = fields.String(attribute="roc_suite")
    definition = fields.Method("get_definition")
    instances = fields.Nested(TestInstanceSchema(exclude=('meta', )),
                              attribute="test_instances",
                              many=True)

    def get_definition(self, obj):
        to_skip = ['path']
        return {k: v for k, v in obj.definition.items() if k not in to_skip}

    @post_dump
    def remove_skip_values(self, data, **kwargs):
        return {key: value for key, value in data.items() if value is not None}