ariatosca-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ARIA-105) Integrate new models into parser
Date Wed, 08 Mar 2017 17:31:37 GMT

    [ https://issues.apache.org/jira/browse/ARIA-105?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15901619#comment-15901619
] 

ASF GitHub Bot commented on ARIA-105:
-------------------------------------

Github user ran-z commented on a diff in the pull request:

    https://github.com/apache/incubator-ariatosca/pull/72#discussion_r104974006
  
    --- Diff: aria/modeling/service.py ---
    @@ -0,0 +1,1529 @@
    +# Licensed to the Apache Software Foundation (ASF) under one or more
    +# contributor license agreements.  See the NOTICE file distributed with
    +# this work for additional information regarding copyright ownership.
    +# The ASF licenses this file to You 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.
    +
    +# pylint: disable=no-self-argument, no-member, abstract-method
    +
    +from sqlalchemy import (
    +    Column,
    +    Text,
    +    Integer
    +)
    +from sqlalchemy import DateTime
    +from sqlalchemy.ext.associationproxy import association_proxy
    +from sqlalchemy.ext.declarative import declared_attr
    +
    +from .bases import InstanceModelMixin
    +from ..parser import validation
    +from ..utils import collections, formatting, console
    +
    +from . import (
    +    utils,
    +    types as modeling_types
    +)
    +
    +
    +class ServiceBase(InstanceModelMixin): # pylint: disable=too-many-public-methods
    +    """
    +    A service is usually an instance of a :class:`ServiceTemplate`.
    +
    +    You will usually not create it programmatically, but instead instantiate it from
a service
    +    template.
    +
    +    :ivar name: Name (unique for this ARIA installation)
    +    :vartype name: basestring
    +    :ivar service_template: Template from which this service was instantiated (optional)
    +    :vartype service_template: :class:`ServiceTemplate`
    +    :ivar description: Human-readable description
    +    :vartype description: string
    +    :ivar meta_data: Custom annotations
    +    :vartype meta_data: {basestring: :class:`Metadata`}
    +    :ivar node: Nodes
    +    :vartype node: [:class:`Node`]
    +    :ivar groups: Groups of nodes
    +    :vartype groups: [:class:`Group`]
    +    :ivar policies: Policies
    +    :vartype policies: [:class:`Policy`]
    +    :ivar substitution: The entire service can appear as a node
    +    :vartype substitution: :class:`Substitution`
    +    :ivar inputs: Externally provided parameters
    +    :vartype inputs: {basestring: :class:`Parameter`}
    +    :ivar outputs: These parameters are filled in after service installation
    +    :vartype outputs: {basestring: :class:`Parameter`}
    +    :ivar operations: Custom operations that can be performed on the service
    +    :vartype operations: {basestring: :class:`Operation`}
    +    :ivar plugins: Plugins required to be installed
    +    :vartype plugins: {basestring: :class:`Plugin`}
    +    :ivar created_at: Creation timestamp
    +    :vartype created_at: :class:`datetime.datetime`
    +    :ivar updated_at: Update timestamp
    +    :vartype updated_at: :class:`datetime.datetime`
    +
    +    :ivar permalink: ??
    +    :vartype permalink: basestring
    +    :ivar scaling_groups: ??
    +    :vartype scaling_groups: {}
    +
    +    :ivar modifications: Modifications of this service
    +    :vartype modifications: [:class:`ServiceModification`]
    +    :ivar updates: Updates of this service
    +    :vartype updates: [:class:`ServiceUpdate`]
    +    :ivar executions: Executions on this service
    +    :vartype executions: [:class:`Execution`]
    +    """
    +
    +    __tablename__ = 'service'
    +
    +    @declared_attr
    +    def service_template(cls):
    +        return cls.many_to_one_relationship('service_template')
    +
    +    description = Column(Text)
    +
    +    @declared_attr
    +    def meta_data(cls):
    +        # Warning! We cannot use the attr name "metadata" because it's used by SqlAlchemy!
    +        return cls.many_to_many_relationship('metadata', dict_key='name')
    +
    +    @declared_attr
    +    def nodes(cls):
    +        return cls.one_to_many_relationship('node')
    +
    +    @declared_attr
    +    def groups(cls):
    +        return cls.one_to_many_relationship('group')
    +
    +    @declared_attr
    +    def policies(cls):
    +        return cls.one_to_many_relationship('policy')
    +
    +    @declared_attr
    +    def substitution(cls):
    +        return cls.one_to_one_relationship('substitution')
    +
    +    @declared_attr
    +    def inputs(cls):
    +        return cls.many_to_many_relationship('parameter', table_prefix='inputs',
    +                                             dict_key='name')
    +
    +    @declared_attr
    +    def outputs(cls):
    +        return cls.many_to_many_relationship('parameter', table_prefix='outputs',
    +                                             dict_key='name')
    +
    +    @declared_attr
    +    def operations(cls):
    +        return cls.one_to_many_relationship('operation', dict_key='name')
    +
    +    @declared_attr
    +    def plugins(cls):
    +        return cls.many_to_many_relationship('plugin')
    +
    +    created_at = Column(DateTime, nullable=False, index=True)
    +    updated_at = Column(DateTime)
    +
    +    # region orchestration
    +
    +    permalink = Column(Text)
    +    scaling_groups = Column(modeling_types.Dict)
    +
    +    # endregion
    +
    +    # region foreign keys
    +
    +    __private_fields__ = ['substituion_fk',
    +                          'service_template_fk']
    +
    +    # Service one-to-one to Substitution
    +    @declared_attr
    +    def substitution_fk(cls):
    +        return cls.foreign_key('substitution', nullable=True)
    +
    +    # Service many-to-one to ServiceTemplate
    +    @declared_attr
    +    def service_template_fk(cls):
    +        return cls.foreign_key('service_template', nullable=True)
    +
    +    # endregion
    +
    +    def satisfy_requirements(self, context):
    +        satisfied = True
    +        for node in self.nodes:
    +            if not node.satisfy_requirements(context):
    +                satisfied = False
    +        return satisfied
    +
    +    def validate_capabilities(self, context):
    +        satisfied = True
    +        for node in self.nodes:
    +            if not node.validate_capabilities(context):
    +                satisfied = False
    +        return satisfied
    +
    +    def find_nodes(self, node_template_name):
    +        nodes = []
    +        for node in self.nodes:
    +            if node.node_template.name == node_template_name:
    +                nodes.append(node)
    +        return collections.FrozenList(nodes)
    +
    +    def get_node_ids(self, node_template_name):
    +        return collections.FrozenList((node.name for node in self.find_nodes(node_template_name)))
    +
    +    def find_groups(self, group_template_name):
    +        groups = []
    +        for group in self.groups:
    +            if group.template_name == group_template_name:
    +                groups.append(group)
    +        return collections.FrozenList(groups)
    +
    +    def get_group_ids(self, group_template_name):
    +        return collections.FrozenList((group.name
    +                                       for group in self.find_groups(group_template_name)))
    +
    +    def is_node_a_target(self, context, target_node):
    +        for node in self.nodes:
    +            if self._is_node_a_target(context, node, target_node):
    +                return True
    +        return False
    +
    +    def _is_node_a_target(self, context, source_node, target_node):
    --- End diff --
    
    need to get rid of context throughout the models..


> Integrate new models into parser
> --------------------------------
>
>                 Key: ARIA-105
>                 URL: https://issues.apache.org/jira/browse/ARIA-105
>             Project: AriaTosca
>          Issue Type: Task
>            Reporter: Ran Ziv
>            Assignee: Tal Liron
>




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message