aws-cdk-lib 2.188.0__py3-none-any.whl → 2.189.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aws-cdk-lib might be problematic. Click here for more details.

@@ -0,0 +1,366 @@
1
+ r'''
2
+ # AWS::DSQL Construct Library
3
+
4
+ <!--BEGIN STABILITY BANNER-->---
5
+
6
+
7
+ ![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)
8
+
9
+ > All classes with the `Cfn` prefix in this module ([CFN Resources](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) are always stable and safe to use.
10
+
11
+ ---
12
+ <!--END STABILITY BANNER-->
13
+
14
+ This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.
15
+
16
+ ```python
17
+ import aws_cdk.aws_dsql as dsql
18
+ ```
19
+
20
+ <!--BEGIN CFNONLY DISCLAIMER-->
21
+
22
+ There are no official hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. Here are some suggestions on how to proceed:
23
+
24
+ * Search [Construct Hub for DSQL construct libraries](https://constructs.dev/search?q=dsql)
25
+ * Use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, in the same way you would use [the CloudFormation AWS::DSQL resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DSQL.html) directly.
26
+
27
+ <!--BEGIN CFNONLY DISCLAIMER-->
28
+
29
+ There are no hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet.
30
+ However, you can still use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, and use this service exactly as you would using CloudFormation directly.
31
+
32
+ For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::DSQL](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DSQL.html).
33
+
34
+ (Read the [CDK Contributing Guide](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and submit an RFC if you are interested in contributing to this construct library.)
35
+
36
+ <!--END CFNONLY DISCLAIMER-->
37
+ '''
38
+ from pkgutil import extend_path
39
+ __path__ = extend_path(__path__, __name__)
40
+
41
+ import abc
42
+ import builtins
43
+ import datetime
44
+ import enum
45
+ import typing
46
+
47
+ import jsii
48
+ import publication
49
+ import typing_extensions
50
+
51
+ import typeguard
52
+ from importlib.metadata import version as _metadata_package_version
53
+ TYPEGUARD_MAJOR_VERSION = int(_metadata_package_version('typeguard').split('.')[0])
54
+
55
+ def check_type(argname: str, value: object, expected_type: typing.Any) -> typing.Any:
56
+ if TYPEGUARD_MAJOR_VERSION <= 2:
57
+ return typeguard.check_type(argname=argname, value=value, expected_type=expected_type) # type:ignore
58
+ else:
59
+ if isinstance(value, jsii._reference_map.InterfaceDynamicProxy): # pyright: ignore [reportAttributeAccessIssue]
60
+ pass
61
+ else:
62
+ if TYPEGUARD_MAJOR_VERSION == 3:
63
+ typeguard.config.collection_check_strategy = typeguard.CollectionCheckStrategy.ALL_ITEMS # type:ignore
64
+ typeguard.check_type(value=value, expected_type=expected_type) # type:ignore
65
+ else:
66
+ typeguard.check_type(value=value, expected_type=expected_type, collection_check_strategy=typeguard.CollectionCheckStrategy.ALL_ITEMS) # type:ignore
67
+
68
+ from .._jsii import *
69
+
70
+ import constructs as _constructs_77d1e7e8
71
+ from .. import (
72
+ CfnResource as _CfnResource_9df397a6,
73
+ CfnTag as _CfnTag_f6864754,
74
+ IInspectable as _IInspectable_c2943556,
75
+ IResolvable as _IResolvable_da3f097b,
76
+ ITaggableV2 as _ITaggableV2_4e6798f8,
77
+ TagManager as _TagManager_0a598cb3,
78
+ TreeInspector as _TreeInspector_488e0dd5,
79
+ )
80
+
81
+
82
+ @jsii.implements(_IInspectable_c2943556, _ITaggableV2_4e6798f8)
83
+ class CfnCluster(
84
+ _CfnResource_9df397a6,
85
+ metaclass=jsii.JSIIMeta,
86
+ jsii_type="aws-cdk-lib.aws_dsql.CfnCluster",
87
+ ):
88
+ '''Resource Type definition for AWS::DSQL::Cluster.
89
+
90
+ :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html
91
+ :cloudformationResource: AWS::DSQL::Cluster
92
+ :exampleMetadata: fixture=_generated
93
+
94
+ Example::
95
+
96
+ # The code below shows an example of how to instantiate this type.
97
+ # The values are placeholders you should change.
98
+ from aws_cdk import aws_dsql as dsql
99
+
100
+ cfn_cluster = dsql.CfnCluster(self, "MyCfnCluster",
101
+ deletion_protection_enabled=False,
102
+ tags=[CfnTag(
103
+ key="key",
104
+ value="value"
105
+ )]
106
+ )
107
+ '''
108
+
109
+ def __init__(
110
+ self,
111
+ scope: _constructs_77d1e7e8.Construct,
112
+ id: builtins.str,
113
+ *,
114
+ deletion_protection_enabled: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
115
+ tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
116
+ ) -> None:
117
+ '''
118
+ :param scope: Scope in which this resource is defined.
119
+ :param id: Construct identifier for this resource (unique in its scope).
120
+ :param deletion_protection_enabled: Whether deletion protection is enabled in this cluster.
121
+ :param tags:
122
+ '''
123
+ if __debug__:
124
+ type_hints = typing.get_type_hints(_typecheckingstub__b82b76673b1942e60f823768c857e13a61b0491cdd1ca21c1f2a574e980d253e)
125
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
126
+ check_type(argname="argument id", value=id, expected_type=type_hints["id"])
127
+ props = CfnClusterProps(
128
+ deletion_protection_enabled=deletion_protection_enabled, tags=tags
129
+ )
130
+
131
+ jsii.create(self.__class__, self, [scope, id, props])
132
+
133
+ @jsii.member(jsii_name="inspect")
134
+ def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
135
+ '''Examines the CloudFormation resource and discloses attributes.
136
+
137
+ :param inspector: tree inspector to collect and process attributes.
138
+ '''
139
+ if __debug__:
140
+ type_hints = typing.get_type_hints(_typecheckingstub__b05414cc6a0a47d76a5604395b89b41d7f04f08f9b28ec25471d8d9dfd914483)
141
+ check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
142
+ return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))
143
+
144
+ @jsii.member(jsii_name="renderProperties")
145
+ def _render_properties(
146
+ self,
147
+ props: typing.Mapping[builtins.str, typing.Any],
148
+ ) -> typing.Mapping[builtins.str, typing.Any]:
149
+ '''
150
+ :param props: -
151
+ '''
152
+ if __debug__:
153
+ type_hints = typing.get_type_hints(_typecheckingstub__89daa5d24060578a1ef99b50292d70f5dc9e43d808d9f1f6ce09b7a3dac27778)
154
+ check_type(argname="argument props", value=props, expected_type=type_hints["props"])
155
+ return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))
156
+
157
+ @jsii.python.classproperty
158
+ @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
159
+ def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
160
+ '''The CloudFormation resource type name for this resource class.'''
161
+ return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))
162
+
163
+ @builtins.property
164
+ @jsii.member(jsii_name="attrCreationTime")
165
+ def attr_creation_time(self) -> builtins.str:
166
+ '''The time of when the cluster was created in ISO-8601 format.
167
+
168
+ :cloudformationAttribute: CreationTime
169
+ '''
170
+ return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))
171
+
172
+ @builtins.property
173
+ @jsii.member(jsii_name="attrIdentifier")
174
+ def attr_identifier(self) -> builtins.str:
175
+ '''The ID of the created cluster.
176
+
177
+ :cloudformationAttribute: Identifier
178
+ '''
179
+ return typing.cast(builtins.str, jsii.get(self, "attrIdentifier"))
180
+
181
+ @builtins.property
182
+ @jsii.member(jsii_name="attrResourceArn")
183
+ def attr_resource_arn(self) -> builtins.str:
184
+ '''The Amazon Resource Name (ARN) for the cluster.
185
+
186
+ :cloudformationAttribute: ResourceArn
187
+ '''
188
+ return typing.cast(builtins.str, jsii.get(self, "attrResourceArn"))
189
+
190
+ @builtins.property
191
+ @jsii.member(jsii_name="attrStatus")
192
+ def attr_status(self) -> builtins.str:
193
+ '''The status of the cluster.
194
+
195
+ :cloudformationAttribute: Status
196
+ '''
197
+ return typing.cast(builtins.str, jsii.get(self, "attrStatus"))
198
+
199
+ @builtins.property
200
+ @jsii.member(jsii_name="cdkTagManager")
201
+ def cdk_tag_manager(self) -> _TagManager_0a598cb3:
202
+ '''Tag Manager which manages the tags for this resource.'''
203
+ return typing.cast(_TagManager_0a598cb3, jsii.get(self, "cdkTagManager"))
204
+
205
+ @builtins.property
206
+ @jsii.member(jsii_name="cfnProperties")
207
+ def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
208
+ return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))
209
+
210
+ @builtins.property
211
+ @jsii.member(jsii_name="deletionProtectionEnabled")
212
+ def deletion_protection_enabled(
213
+ self,
214
+ ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
215
+ '''Whether deletion protection is enabled in this cluster.'''
216
+ return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "deletionProtectionEnabled"))
217
+
218
+ @deletion_protection_enabled.setter
219
+ def deletion_protection_enabled(
220
+ self,
221
+ value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
222
+ ) -> None:
223
+ if __debug__:
224
+ type_hints = typing.get_type_hints(_typecheckingstub__393f500a888707295be5db6ececab65a69f1c1889e02c7043d1d8ad0ec5e7636)
225
+ check_type(argname="argument value", value=value, expected_type=type_hints["value"])
226
+ jsii.set(self, "deletionProtectionEnabled", value) # pyright: ignore[reportArgumentType]
227
+
228
+ @builtins.property
229
+ @jsii.member(jsii_name="tags")
230
+ def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
231
+ return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tags"))
232
+
233
+ @tags.setter
234
+ def tags(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
235
+ if __debug__:
236
+ type_hints = typing.get_type_hints(_typecheckingstub__c9eb2f89b2e4104fba43d8d14808715e2f3435951317df69258fecf9b606d598)
237
+ check_type(argname="argument value", value=value, expected_type=type_hints["value"])
238
+ jsii.set(self, "tags", value) # pyright: ignore[reportArgumentType]
239
+
240
+
241
+ @jsii.data_type(
242
+ jsii_type="aws-cdk-lib.aws_dsql.CfnClusterProps",
243
+ jsii_struct_bases=[],
244
+ name_mapping={
245
+ "deletion_protection_enabled": "deletionProtectionEnabled",
246
+ "tags": "tags",
247
+ },
248
+ )
249
+ class CfnClusterProps:
250
+ def __init__(
251
+ self,
252
+ *,
253
+ deletion_protection_enabled: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
254
+ tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
255
+ ) -> None:
256
+ '''Properties for defining a ``CfnCluster``.
257
+
258
+ :param deletion_protection_enabled: Whether deletion protection is enabled in this cluster.
259
+ :param tags:
260
+
261
+ :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html
262
+ :exampleMetadata: fixture=_generated
263
+
264
+ Example::
265
+
266
+ # The code below shows an example of how to instantiate this type.
267
+ # The values are placeholders you should change.
268
+ from aws_cdk import aws_dsql as dsql
269
+
270
+ cfn_cluster_props = dsql.CfnClusterProps(
271
+ deletion_protection_enabled=False,
272
+ tags=[CfnTag(
273
+ key="key",
274
+ value="value"
275
+ )]
276
+ )
277
+ '''
278
+ if __debug__:
279
+ type_hints = typing.get_type_hints(_typecheckingstub__c99b78beafe41f2e25cbcc0b8a8aff58ff66a77464bef06dbf9128ff75ebd08c)
280
+ check_type(argname="argument deletion_protection_enabled", value=deletion_protection_enabled, expected_type=type_hints["deletion_protection_enabled"])
281
+ check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
282
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
283
+ if deletion_protection_enabled is not None:
284
+ self._values["deletion_protection_enabled"] = deletion_protection_enabled
285
+ if tags is not None:
286
+ self._values["tags"] = tags
287
+
288
+ @builtins.property
289
+ def deletion_protection_enabled(
290
+ self,
291
+ ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
292
+ '''Whether deletion protection is enabled in this cluster.
293
+
294
+ :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html#cfn-dsql-cluster-deletionprotectionenabled
295
+ '''
296
+ result = self._values.get("deletion_protection_enabled")
297
+ return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)
298
+
299
+ @builtins.property
300
+ def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
301
+ '''
302
+ :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html#cfn-dsql-cluster-tags
303
+ '''
304
+ result = self._values.get("tags")
305
+ return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)
306
+
307
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
308
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
309
+
310
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
311
+ return not (rhs == self)
312
+
313
+ def __repr__(self) -> str:
314
+ return "CfnClusterProps(%s)" % ", ".join(
315
+ k + "=" + repr(v) for k, v in self._values.items()
316
+ )
317
+
318
+
319
+ __all__ = [
320
+ "CfnCluster",
321
+ "CfnClusterProps",
322
+ ]
323
+
324
+ publication.publish()
325
+
326
+ def _typecheckingstub__b82b76673b1942e60f823768c857e13a61b0491cdd1ca21c1f2a574e980d253e(
327
+ scope: _constructs_77d1e7e8.Construct,
328
+ id: builtins.str,
329
+ *,
330
+ deletion_protection_enabled: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
331
+ tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
332
+ ) -> None:
333
+ """Type checking stubs"""
334
+ pass
335
+
336
+ def _typecheckingstub__b05414cc6a0a47d76a5604395b89b41d7f04f08f9b28ec25471d8d9dfd914483(
337
+ inspector: _TreeInspector_488e0dd5,
338
+ ) -> None:
339
+ """Type checking stubs"""
340
+ pass
341
+
342
+ def _typecheckingstub__89daa5d24060578a1ef99b50292d70f5dc9e43d808d9f1f6ce09b7a3dac27778(
343
+ props: typing.Mapping[builtins.str, typing.Any],
344
+ ) -> None:
345
+ """Type checking stubs"""
346
+ pass
347
+
348
+ def _typecheckingstub__393f500a888707295be5db6ececab65a69f1c1889e02c7043d1d8ad0ec5e7636(
349
+ value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
350
+ ) -> None:
351
+ """Type checking stubs"""
352
+ pass
353
+
354
+ def _typecheckingstub__c9eb2f89b2e4104fba43d8d14808715e2f3435951317df69258fecf9b606d598(
355
+ value: typing.Optional[typing.List[_CfnTag_f6864754]],
356
+ ) -> None:
357
+ """Type checking stubs"""
358
+ pass
359
+
360
+ def _typecheckingstub__c99b78beafe41f2e25cbcc0b8a8aff58ff66a77464bef06dbf9128ff75ebd08c(
361
+ *,
362
+ deletion_protection_enabled: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
363
+ tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
364
+ ) -> None:
365
+ """Type checking stubs"""
366
+ pass
@@ -2872,7 +2872,7 @@ class CfnGlobalTable(
2872
2872
 
2873
2873
  These are in addition to the primary key attributes and index key attributes, which are automatically projected.
2874
2874
 
2875
- :param non_key_attributes: Represents the non-key attribute names which will be projected into the index. For local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the local secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.
2875
+ :param non_key_attributes: Represents the non-key attribute names which will be projected into the index. For global and local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of ``INCLUDE`` . You still can specify the ProjectionType of ``ALL`` to project all attributes from the source table, even if the table has more than 100 attributes.
2876
2876
  :param projection_type: The set of attributes that are projected into the index:. - ``KEYS_ONLY`` - Only the index and primary keys are projected into the index. - ``INCLUDE`` - In addition to the attributes described in ``KEYS_ONLY`` , the secondary index will include other non-key attributes that you specify. - ``ALL`` - All of the table attributes are projected into the index. When using the DynamoDB console, ``ALL`` is selected by default.
2877
2877
 
2878
2878
  :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-projection.html
@@ -2903,7 +2903,7 @@ class CfnGlobalTable(
2903
2903
  def non_key_attributes(self) -> typing.Optional[typing.List[builtins.str]]:
2904
2904
  '''Represents the non-key attribute names which will be projected into the index.
2905
2905
 
2906
- For local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the local secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.
2906
+ For global and local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of ``INCLUDE`` . You still can specify the ProjectionType of ``ALL`` to project all attributes from the source table, even if the table has more than 100 attributes.
2907
2907
 
2908
2908
  :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-projection.html#cfn-dynamodb-globaltable-projection-nonkeyattributes
2909
2909
  '''
@@ -6493,7 +6493,7 @@ class CfnTable(
6493
6493
 
6494
6494
  These are in addition to the primary key attributes and index key attributes, which are automatically projected.
6495
6495
 
6496
- :param non_key_attributes: Represents the non-key attribute names which will be projected into the index. For local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the local secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.
6496
+ :param non_key_attributes: Represents the non-key attribute names which will be projected into the index. For global and local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of ``INCLUDE`` . You still can specify the ProjectionType of ``ALL`` to project all attributes from the source table, even if the table has more than 100 attributes.
6497
6497
  :param projection_type: The set of attributes that are projected into the index:. - ``KEYS_ONLY`` - Only the index and primary keys are projected into the index. - ``INCLUDE`` - In addition to the attributes described in ``KEYS_ONLY`` , the secondary index will include other non-key attributes that you specify. - ``ALL`` - All of the table attributes are projected into the index. When using the DynamoDB console, ``ALL`` is selected by default.
6498
6498
 
6499
6499
  :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-projection.html
@@ -6524,7 +6524,7 @@ class CfnTable(
6524
6524
  def non_key_attributes(self) -> typing.Optional[typing.List[builtins.str]]:
6525
6525
  '''Represents the non-key attribute names which will be projected into the index.
6526
6526
 
6527
- For local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the local secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.
6527
+ For global and local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of ``INCLUDE`` . You still can specify the ProjectionType of ``ALL`` to project all attributes from the source table, even if the table has more than 100 attributes.
6528
6528
 
6529
6529
  :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-projection.html#cfn-dynamodb-table-projection-nonkeyattributes
6530
6530
  '''