2020
2121"""
2222
23+ from __future__ import annotations
24+
25+ from imaplib import Commands
26+ from typing import TYPE_CHECKING
27+
28+ if TYPE_CHECKING :
29+ from troposphere import Template
30+
31+ from ecs_composex .common .settings import ComposeXSettings
32+
2333import copy
2434
2535from compose_x_common .compose_x_common import keyisset
3747from ecs_composex .common .troposphere_tools import add_parameters
3848
3949
40- def define_tag_parameter_title (tag_name ) :
50+ def define_tag_parameter_title (tag_name : str ) -> str :
4151 """
4252 Returns the formatted name title for a given tag
43-
44- :param tag_name: name of the tag as defined in the ComposeX file
45- :type tag_name: str
46- :return: reformatted tag name to work on CFN
47- :rtype: str
4853 """
4954 return f"{ NONALPHANUM .sub ('' , tag_name ).strip ().title ()} Tag"
5055
5156
52- def define_extended_tags (tags ) :
57+ def define_extended_tags (tags : list | dict ) -> Tags | None :
5358 """
5459 Function to generate the tags to be added to objects from x-tags
55-
56- :param tags: tags as defined in composex file
57- :type tags: list or dict
58- :return: Tags() or None
59- :rtype: troposphere.Tags or None
6060 """
6161 rendered_tags = []
6262 if isinstance (tags , list ):
@@ -72,12 +72,9 @@ def define_extended_tags(tags):
7272 return None
7373
7474
75- def generate_tags_parameters (tags ) :
75+ def generate_tags_parameters (tags : list | dict ) -> list [ Parameter ] :
7676 """
7777 Function to generate a list of parameters used for the tags values
78-
79- :return: list of parameters and tags to add to objects
80- :rtype: tuple
8178 """
8279 parameters = []
8380 for tag in tags :
@@ -100,14 +97,9 @@ def generate_tags_parameters(tags):
10097 return parameters
10198
10299
103- def expand_launch_template_tags_specs (lt , tags ) :
100+ def expand_launch_template_tags_specs (lt : LaunchTemplate , tags : Tags ) -> None :
104101 """
105102 Function to expand the LaunchTemplate TagSpecifications with defined x-tags.
106-
107- :param lt: the LaunchTemplate object
108- :type: troposphere.ec2.LaunchTemplate
109- :param tags: the Tags as built from x-tags
110- :type tags: troposphere.Tags
111103 """
112104 LOG .debug ("Setting tags to LaunchTemplate" )
113105 try :
@@ -169,13 +161,15 @@ def add_object_tags(obj, tags):
169161 setattr (obj , "Tags" , clean_tags )
170162
171163
172- def default_tags () :
164+ def default_tags (settings : ComposeXSettings ) -> Tags :
173165 """
174166 Function to return default tags to set on resource
175167 :return: default compose-x tags
176168 :rtype: troposphere.Tags
177169 """
178- return Tags (CreatedByComposeX = True , ** {"compose-x:version" : version })
170+ return Tags (
171+ ** {"compose-x::version" : version , "compose-x::project-name" : settings .name }
172+ )
179173
180174
181175def apply_tags_to_resources (settings , resource , params , xtags ):
@@ -203,28 +197,31 @@ def apply_tags_to_resources(settings, resource, params, xtags):
203197 add_object_tags (stack_resource , xtags )
204198
205199
206- def add_all_tags (root_template , settings , params = None , xtags = None ):
200+ def add_all_tags (
201+ root_template : Template ,
202+ settings : ComposeXSettings ,
203+ params : list = None ,
204+ xtags : Tags = None ,
205+ ) -> None :
207206 """
208207 Function to go through all stacks of a given template and update the template
209208 It will recursively render sub stacks defined.
210209 If there are no substacks, it will go over the resources of the template add the tags.
211210
212- :param troposphere.Template root_template: the root template to iterate over the resources.
213- :param ecs_composex.common.settings.ComposeXSettings settings: Execution settings
214- :param list params: Parameters to add to template if any
215- :param troposphere.Tags xtags: List of Tags to add to the resources.
216211 """
217212 if not params or not xtags :
218213 if not keyisset ("x-tags" , settings .compose_content ):
219- xtags = default_tags ()
214+ xtags = default_tags (settings )
220215 params = None
221216 else :
222217 tags = settings .compose_content ["x-tags" ]
223218 params = generate_tags_parameters (tags )
224219 xtags = define_extended_tags (tags )
225- xtags += default_tags ()
220+ xtags += default_tags (settings )
226221
227- resources = root_template .resources if root_template else []
228- for resource_name in resources :
229- resource = resources [resource_name ]
222+ resources = root_template .resources if root_template else {}
223+ for resource_name , resource in resources .items ():
224+ LOG .debug (
225+ "Applying tags to resource {}: {}" .format (resource_name , type (resource ))
226+ )
230227 apply_tags_to_resources (settings , resource , params , xtags )
0 commit comments