Skip to content

plugin

Creator plugin for Marvelous Designer.

MDCreator

Bases: Creator

Marvelous Designer Creator.

Source code in client/ayon_marvelousdesigner/api/plugin.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
93
94
95
96
97
98
99
class MDCreator(Creator):
    """Marvelous Designer Creator."""
    settings_category = "marvelous_designer"
    skip_discovery = True

    def create(
        self,
        product_name: str,
        instance_data: dict,
        pre_create_data: dict,
    ) -> None:
        """Create a new instance in the current context."""
        instance = self.create_instance_in_context(product_name,
                                                   instance_data)
        set_instance(
            instance_id=instance["instance_id"],
            instance_data=instance.data_to_store()
        )

    def collect_instances(self) -> None:
        """Collect existing instances from MD and add them to the context.

        This method retrieves instances that match the current creator's
        identifier or product type and creates context instances from the
        existing data.
        """
        for instance in get_instances_values():
            if (
                instance.get("creator_identifier") == self.identifier
                # Backwards compatibility
                or instance.get("productType") == self.product_base_type
            ):
                self.create_instance_in_context_from_existing(instance)

    def update_instances(self, update_list: list) -> None:  # noqa: PLR6301
        """Update existing instances with new data."""
        instance_data_by_id = {}
        for instance, _changes in update_list:
            # Persist the data
            instance_id = instance.get("instance_id")
            instance_data = instance.data_to_store()
            instance_data_by_id[instance_id] = instance_data
        set_instances(instance_data_by_id, update=True)

    def remove_instances(self, instances: list) -> None:
        """Remove instances from MD and the current context."""
        for instance in instances:
            remove_instance(instance["instance_id"])
            self._remove_instance_from_context(instance)

    # Helper methods (this might get moved into Creator class)
    def create_instance_in_context(
            self, product_name: str, data: dict) -> CreatedInstance:
        """Create a new instance in the current context.

        Args:
            product_name (str): Name of the product.
            data (dict): Data associated with the instance.

        Returns:
            CreatedInstance: The created instance.
        """
        product_type = data.get("productType")
        if not product_type:
            product_type = self.product_base_type
        instance = CreatedInstance(
            product_base_type=self.product_base_type,
            product_type=product_type,
            product_name=product_name,
            data=data,
            creator=self
        )
        self.create_context.creator_adds_instance(instance)
        return instance

    def create_instance_in_context_from_existing(
            self, data: dict) -> CreatedInstance:
        """Create an instance in the current context from existing data.

        Args:
            data (dict): Existing instance data.

        Returns:
            CreatedInstance: The created instance.
        """
        instance = CreatedInstance.from_existing(data, self)
        self.create_context.creator_adds_instance(instance)
        return instance

collect_instances()

Collect existing instances from MD and add them to the context.

This method retrieves instances that match the current creator's identifier or product type and creates context instances from the existing data.

Source code in client/ayon_marvelousdesigner/api/plugin.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def collect_instances(self) -> None:
    """Collect existing instances from MD and add them to the context.

    This method retrieves instances that match the current creator's
    identifier or product type and creates context instances from the
    existing data.
    """
    for instance in get_instances_values():
        if (
            instance.get("creator_identifier") == self.identifier
            # Backwards compatibility
            or instance.get("productType") == self.product_base_type
        ):
            self.create_instance_in_context_from_existing(instance)

create(product_name, instance_data, pre_create_data)

Create a new instance in the current context.

Source code in client/ayon_marvelousdesigner/api/plugin.py
17
18
19
20
21
22
23
24
25
26
27
28
29
def create(
    self,
    product_name: str,
    instance_data: dict,
    pre_create_data: dict,
) -> None:
    """Create a new instance in the current context."""
    instance = self.create_instance_in_context(product_name,
                                               instance_data)
    set_instance(
        instance_id=instance["instance_id"],
        instance_data=instance.data_to_store()
    )

create_instance_in_context(product_name, data)

Create a new instance in the current context.

Parameters:

Name Type Description Default
product_name str

Name of the product.

required
data dict

Data associated with the instance.

required

Returns:

Name Type Description
CreatedInstance CreatedInstance

The created instance.

Source code in client/ayon_marvelousdesigner/api/plugin.py
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
def create_instance_in_context(
        self, product_name: str, data: dict) -> CreatedInstance:
    """Create a new instance in the current context.

    Args:
        product_name (str): Name of the product.
        data (dict): Data associated with the instance.

    Returns:
        CreatedInstance: The created instance.
    """
    product_type = data.get("productType")
    if not product_type:
        product_type = self.product_base_type
    instance = CreatedInstance(
        product_base_type=self.product_base_type,
        product_type=product_type,
        product_name=product_name,
        data=data,
        creator=self
    )
    self.create_context.creator_adds_instance(instance)
    return instance

create_instance_in_context_from_existing(data)

Create an instance in the current context from existing data.

Parameters:

Name Type Description Default
data dict

Existing instance data.

required

Returns:

Name Type Description
CreatedInstance CreatedInstance

The created instance.

Source code in client/ayon_marvelousdesigner/api/plugin.py
87
88
89
90
91
92
93
94
95
96
97
98
99
def create_instance_in_context_from_existing(
        self, data: dict) -> CreatedInstance:
    """Create an instance in the current context from existing data.

    Args:
        data (dict): Existing instance data.

    Returns:
        CreatedInstance: The created instance.
    """
    instance = CreatedInstance.from_existing(data, self)
    self.create_context.creator_adds_instance(instance)
    return instance

remove_instances(instances)

Remove instances from MD and the current context.

Source code in client/ayon_marvelousdesigner/api/plugin.py
56
57
58
59
60
def remove_instances(self, instances: list) -> None:
    """Remove instances from MD and the current context."""
    for instance in instances:
        remove_instance(instance["instance_id"])
        self._remove_instance_from_context(instance)

update_instances(update_list)

Update existing instances with new data.

Source code in client/ayon_marvelousdesigner/api/plugin.py
46
47
48
49
50
51
52
53
54
def update_instances(self, update_list: list) -> None:  # noqa: PLR6301
    """Update existing instances with new data."""
    instance_data_by_id = {}
    for instance, _changes in update_list:
        # Persist the data
        instance_id = instance.get("instance_id")
        instance_data = instance.data_to_store()
        instance_data_by_id[instance_id] = instance_data
    set_instances(instance_data_by_id, update=True)