We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Add support for high resolution metrics in CloudWatch
Cloudwatch API supports high-resolution metrics, AWS CLI does not.

https://aws.amazon.com/blogs/aws/new-high-resolution-custom-metrics-and-alarms-for-amazon-cloudwatch/

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `awscli/customizations/putmetricdata.py`
Content:
```
1 # Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License"). You
4 # may not use this file except in compliance with the License. A copy of
5 # the License is located at
6 #
7 #     http://aws.amazon.com/apache2.0/
8 #
9 # or in the "license" file accompanying this file. This file is
10 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11 # ANY KIND, either express or implied. See the License for the specific
12 # language governing permissions and limitations under the License.
13 """
14 This customization adds the following scalar parameters to the
15 cloudwatch put-metric-data operation:
16 
17 * --metric-name
18 * --dimensions
19 * --timestamp
20 * --value
21 * --statistic-values
22 * --unit
23 
24 """
25 import decimal
26 
27 from awscli.arguments import CustomArgument
28 from awscli.utils import split_on_commas
29 from awscli.customizations.utils import validate_mutually_exclusive_handler
30 
31 
32 def register_put_metric_data(event_handler):
33     event_handler.register('building-argument-table.cloudwatch.put-metric-data',
34                            _promote_args)
35     event_handler.register(
36         'operation-args-parsed.cloudwatch.put-metric-data',
37         validate_mutually_exclusive_handler(
38             ['metric_data'], ['metric_name', 'timestamp', 'unit', 'value',
39                               'dimensions', 'statistic_values']))
40 
41 
42 def _promote_args(argument_table, **kwargs):
43     # We're providing top level params for metric-data.  This means
44     # that metric-data is now longer a required arg.  We do need
45     # to check that either metric-data or the complex args we've added
46     # have been provided.
47     argument_table['metric-data'].required = False
48 
49     argument_table['metric-name'] = PutMetricArgument(
50         'metric-name', help_text='The name of the metric.')
51     argument_table['timestamp'] = PutMetricArgument(
52         'timestamp', help_text='The time stamp used for the metric.  '
53                                'If not specified, the default value is '
54                                'set to the time the metric data was '
55                                'received.')
56     argument_table['unit'] = PutMetricArgument(
57         'unit', help_text='The unit of metric.')
58     argument_table['value'] = PutMetricArgument(
59         'value', help_text='The value for the metric.  Although the --value '
60                            'parameter accepts numbers of type Double, '
61                            'Amazon CloudWatch truncates values with very '
62                            'large exponents.  Values with base-10 exponents '
63                            'greater than 126 (1 x 10^126) are truncated.  '
64                            'Likewise, values with base-10 exponents less '
65                            'than -130 (1 x 10^-130) are also truncated.')
66 
67     argument_table['dimensions'] = PutMetricArgument(
68         'dimensions', help_text=(
69             'The --dimensions argument further expands '
70             'on the identity of a metric using a Name=Value '
71             'pair, separated by commas, for example: '
72             '<code>--dimensions InstanceID=1-23456789 InstanceType=m1.small</code>. '
73             'Note that the <code>--dimensions</code> argument has a different '
74             'format when used in <code>get-metric-data</code>, where for the same example you would '
75             'use the format <code>--dimensions Name=InstanceID,Value=i-aaba32d4 Name=InstanceType,value=m1.small </code>.'))
76     argument_table['statistic-values'] = PutMetricArgument(
77         'statistic-values', help_text='A set of statistical values describing '
78                                       'the metric.')
79 
80 
81 def insert_first_element(name):
82     def _wrap_add_to_params(func):
83         def _add_to_params(self, parameters, value):
84             if value is None:
85                 return
86             if name not in parameters:
87                 # We're taking a shortcut here and assuming that the first
88                 # element is a struct type, hence the default value of
89                 # a dict.  If this was going to be more general we'd need
90                 # to have this paramterized, i.e. you pass in some sort of
91                 # factory function that creates the initial starting value.
92                 parameters[name] = [{}]
93             first_element = parameters[name][0]
94             return func(self, first_element, value)
95         return _add_to_params
96     return _wrap_add_to_params
97 
98 
99 class PutMetricArgument(CustomArgument):
100     def add_to_params(self, parameters, value):
101         method_name = '_add_param_%s' % self.name.replace('-', '_')
102         return getattr(self, method_name)(parameters, value)
103 
104     @insert_first_element('MetricData')
105     def _add_param_metric_name(self, first_element, value):
106         first_element['MetricName'] = value
107 
108     @insert_first_element('MetricData')
109     def _add_param_unit(self, first_element, value):
110         first_element['Unit'] = value
111 
112     @insert_first_element('MetricData')
113     def _add_param_timestamp(self, first_element, value):
114         first_element['Timestamp'] = value
115 
116     @insert_first_element('MetricData')
117     def _add_param_value(self, first_element, value):
118         # Use a Decimal to avoid loss in precision.
119         first_element['Value'] = decimal.Decimal(value)
120 
121     @insert_first_element('MetricData')
122     def _add_param_dimensions(self, first_element, value):
123         # Dimensions needs a little more processing.  We support
124         # the key=value,key2=value syntax so we need to parse
125         # that.
126         dimensions = []
127         for pair in split_on_commas(value):
128             key, value = pair.split('=')
129             dimensions.append({'Name': key, 'Value': value})
130         first_element['Dimensions'] = dimensions
131 
132     @insert_first_element('MetricData')
133     def _add_param_statistic_values(self, first_element, value):
134         # StatisticValues is a struct type so we are parsing
135         # a csv keyval list into a dict.
136         statistics = {}
137         for pair in split_on_commas(value):
138             key, value = pair.split('=')
139             # There are four supported values: Maximum, Minimum, SampleCount,
140             # and Sum.  All of them are documented as a type double so we can
141             # convert these to a decimal value to preserve precision.
142             statistics[key] = decimal.Decimal(value)
143         first_element['StatisticValues'] = statistics
144
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/awscli/customizations/putmetricdata.py b/awscli/customizations/putmetricdata.py
--- a/awscli/customizations/putmetricdata.py
+++ b/awscli/customizations/putmetricdata.py
@@ -20,6 +20,7 @@
 * --value
 * --statistic-values
 * --unit
+* --storage-resolution
 
 """
 import decimal
@@ -30,8 +31,8 @@
 
 
 def register_put_metric_data(event_handler):
-    event_handler.register('building-argument-table.cloudwatch.put-metric-data',
-                           _promote_args)
+    event_handler.register(
+        'building-argument-table.cloudwatch.put-metric-data', _promote_args)
     event_handler.register(
         'operation-args-parsed.cloudwatch.put-metric-data',
         validate_mutually_exclusive_handler(
@@ -39,7 +40,7 @@
                               'dimensions', 'statistic_values']))
 
 
-def _promote_args(argument_table, **kwargs):
+def _promote_args(argument_table, operation_model, **kwargs):
     # We're providing top level params for metric-data.  This means
     # that metric-data is now longer a required arg.  We do need
     # to check that either metric-data or the complex args we've added
@@ -69,14 +70,25 @@
             'The --dimensions argument further expands '
             'on the identity of a metric using a Name=Value '
             'pair, separated by commas, for example: '
-            '<code>--dimensions InstanceID=1-23456789 InstanceType=m1.small</code>. '
-            'Note that the <code>--dimensions</code> argument has a different '
-            'format when used in <code>get-metric-data</code>, where for the same example you would '
-            'use the format <code>--dimensions Name=InstanceID,Value=i-aaba32d4 Name=InstanceType,value=m1.small </code>.'))
+            '<code>--dimensions InstanceID=1-23456789 '
+            'InstanceType=m1.small</code>. Note that the '
+            '<code>--dimensions</code> argument has a different format when '
+            'used in <code>get-metric-data</code>, where for the same example '
+            'you would use the format <code>--dimensions '
+            'Name=InstanceID,Value=i-aaba32d4 '
+            'Name=InstanceType,value=m1.small </code>.'
+        )
+    )
     argument_table['statistic-values'] = PutMetricArgument(
         'statistic-values', help_text='A set of statistical values describing '
                                       'the metric.')
 
+    metric_data = operation_model.input_shape.members['MetricData'].member
+    storage_resolution = metric_data.members['StorageResolution']
+    argument_table['storage-resolution'] = PutMetricArgument(
+        'storage-resolution', help_text=storage_resolution.documentation
+    )
+
 
 def insert_first_element(name):
     def _wrap_add_to_params(func):
@@ -141,3 +153,7 @@
             # convert these to a decimal value to preserve precision.
             statistics[key] = decimal.Decimal(value)
         first_element['StatisticValues'] = statistics
+
+    @insert_first_element('MetricData')
+    def _add_param_storage_resolution(self, first_element, value):
+        first_element['StorageResolution'] = int(value)

{"golden_diff": "diff --git a/awscli/customizations/putmetricdata.py b/awscli/customizations/putmetricdata.py\n--- a/awscli/customizations/putmetricdata.py\n+++ b/awscli/customizations/putmetricdata.py\n@@ -20,6 +20,7 @@\n * --value\n * --statistic-values\n * --unit\n+* --storage-resolution\n \n \"\"\"\n import decimal\n@@ -30,8 +31,8 @@\n \n \n def register_put_metric_data(event_handler):\n-    event_handler.register('building-argument-table.cloudwatch.put-metric-data',\n-                           _promote_args)\n+    event_handler.register(\n+        'building-argument-table.cloudwatch.put-metric-data', _promote_args)\n     event_handler.register(\n         'operation-args-parsed.cloudwatch.put-metric-data',\n         validate_mutually_exclusive_handler(\n@@ -39,7 +40,7 @@\n                               'dimensions', 'statistic_values']))\n \n \n-def _promote_args(argument_table, **kwargs):\n+def _promote_args(argument_table, operation_model, **kwargs):\n     # We're providing top level params for metric-data.  This means\n     # that metric-data is now longer a required arg.  We do need\n     # to check that either metric-data or the complex args we've added\n@@ -69,14 +70,25 @@\n             'The --dimensions argument further expands '\n             'on the identity of a metric using a Name=Value '\n             'pair, separated by commas, for example: '\n-            '<code>--dimensions InstanceID=1-23456789 InstanceType=m1.small</code>. '\n-            'Note that the <code>--dimensions</code> argument has a different '\n-            'format when used in <code>get-metric-data</code>, where for the same example you would '\n-            'use the format <code>--dimensions Name=InstanceID,Value=i-aaba32d4 Name=InstanceType,value=m1.small </code>.'))\n+            '<code>--dimensions InstanceID=1-23456789 '\n+            'InstanceType=m1.small</code>. Note that the '\n+            '<code>--dimensions</code> argument has a different format when '\n+            'used in <code>get-metric-data</code>, where for the same example '\n+            'you would use the format <code>--dimensions '\n+            'Name=InstanceID,Value=i-aaba32d4 '\n+            'Name=InstanceType,value=m1.small </code>.'\n+        )\n+    )\n     argument_table['statistic-values'] = PutMetricArgument(\n         'statistic-values', help_text='A set of statistical values describing '\n                                       'the metric.')\n \n+    metric_data = operation_model.input_shape.members['MetricData'].member\n+    storage_resolution = metric_data.members['StorageResolution']\n+    argument_table['storage-resolution'] = PutMetricArgument(\n+        'storage-resolution', help_text=storage_resolution.documentation\n+    )\n+\n \n def insert_first_element(name):\n     def _wrap_add_to_params(func):\n@@ -141,3 +153,7 @@\n             # convert these to a decimal value to preserve precision.\n             statistics[key] = decimal.Decimal(value)\n         first_element['StatisticValues'] = statistics\n+\n+    @insert_first_element('MetricData')\n+    def _add_param_storage_resolution(self, first_element, value):\n+        first_element['StorageResolution'] = int(value)\n", "issue": "Add support for high resolution metrics in CloudWatch\nCloudwatch API supports high-resolution metrics, AWS CLI does not.\r\n\r\nhttps://aws.amazon.com/blogs/aws/new-high-resolution-custom-metrics-and-alarms-for-amazon-cloudwatch/\n", "before_files": [{"content": "# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"). You\n# may not use this file except in compliance with the License. A copy of\n# the License is located at\n#\n#     http://aws.amazon.com/apache2.0/\n#\n# or in the \"license\" file accompanying this file. This file is\n# distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n# ANY KIND, either express or implied. See the License for the specific\n# language governing permissions and limitations under the License.\n\"\"\"\nThis customization adds the following scalar parameters to the\ncloudwatch put-metric-data operation:\n\n* --metric-name\n* --dimensions\n* --timestamp\n* --value\n* --statistic-values\n* --unit\n\n\"\"\"\nimport decimal\n\nfrom awscli.arguments import CustomArgument\nfrom awscli.utils import split_on_commas\nfrom awscli.customizations.utils import validate_mutually_exclusive_handler\n\n\ndef register_put_metric_data(event_handler):\n    event_handler.register('building-argument-table.cloudwatch.put-metric-data',\n                           _promote_args)\n    event_handler.register(\n        'operation-args-parsed.cloudwatch.put-metric-data',\n        validate_mutually_exclusive_handler(\n            ['metric_data'], ['metric_name', 'timestamp', 'unit', 'value',\n                              'dimensions', 'statistic_values']))\n\n\ndef _promote_args(argument_table, **kwargs):\n    # We're providing top level params for metric-data.  This means\n    # that metric-data is now longer a required arg.  We do need\n    # to check that either metric-data or the complex args we've added\n    # have been provided.\n    argument_table['metric-data'].required = False\n\n    argument_table['metric-name'] = PutMetricArgument(\n        'metric-name', help_text='The name of the metric.')\n    argument_table['timestamp'] = PutMetricArgument(\n        'timestamp', help_text='The time stamp used for the metric.  '\n                               'If not specified, the default value is '\n                               'set to the time the metric data was '\n                               'received.')\n    argument_table['unit'] = PutMetricArgument(\n        'unit', help_text='The unit of metric.')\n    argument_table['value'] = PutMetricArgument(\n        'value', help_text='The value for the metric.  Although the --value '\n                           'parameter accepts numbers of type Double, '\n                           'Amazon CloudWatch truncates values with very '\n                           'large exponents.  Values with base-10 exponents '\n                           'greater than 126 (1 x 10^126) are truncated.  '\n                           'Likewise, values with base-10 exponents less '\n                           'than -130 (1 x 10^-130) are also truncated.')\n\n    argument_table['dimensions'] = PutMetricArgument(\n        'dimensions', help_text=(\n            'The --dimensions argument further expands '\n            'on the identity of a metric using a Name=Value '\n            'pair, separated by commas, for example: '\n            '<code>--dimensions InstanceID=1-23456789 InstanceType=m1.small</code>. '\n            'Note that the <code>--dimensions</code> argument has a different '\n            'format when used in <code>get-metric-data</code>, where for the same example you would '\n            'use the format <code>--dimensions Name=InstanceID,Value=i-aaba32d4 Name=InstanceType,value=m1.small </code>.'))\n    argument_table['statistic-values'] = PutMetricArgument(\n        'statistic-values', help_text='A set of statistical values describing '\n                                      'the metric.')\n\n\ndef insert_first_element(name):\n    def _wrap_add_to_params(func):\n        def _add_to_params(self, parameters, value):\n            if value is None:\n                return\n            if name not in parameters:\n                # We're taking a shortcut here and assuming that the first\n                # element is a struct type, hence the default value of\n                # a dict.  If this was going to be more general we'd need\n                # to have this paramterized, i.e. you pass in some sort of\n                # factory function that creates the initial starting value.\n                parameters[name] = [{}]\n            first_element = parameters[name][0]\n            return func(self, first_element, value)\n        return _add_to_params\n    return _wrap_add_to_params\n\n\nclass PutMetricArgument(CustomArgument):\n    def add_to_params(self, parameters, value):\n        method_name = '_add_param_%s' % self.name.replace('-', '_')\n        return getattr(self, method_name)(parameters, value)\n\n    @insert_first_element('MetricData')\n    def _add_param_metric_name(self, first_element, value):\n        first_element['MetricName'] = value\n\n    @insert_first_element('MetricData')\n    def _add_param_unit(self, first_element, value):\n        first_element['Unit'] = value\n\n    @insert_first_element('MetricData')\n    def _add_param_timestamp(self, first_element, value):\n        first_element['Timestamp'] = value\n\n    @insert_first_element('MetricData')\n    def _add_param_value(self, first_element, value):\n        # Use a Decimal to avoid loss in precision.\n        first_element['Value'] = decimal.Decimal(value)\n\n    @insert_first_element('MetricData')\n    def _add_param_dimensions(self, first_element, value):\n        # Dimensions needs a little more processing.  We support\n        # the key=value,key2=value syntax so we need to parse\n        # that.\n        dimensions = []\n        for pair in split_on_commas(value):\n            key, value = pair.split('=')\n            dimensions.append({'Name': key, 'Value': value})\n        first_element['Dimensions'] = dimensions\n\n    @insert_first_element('MetricData')\n    def _add_param_statistic_values(self, first_element, value):\n        # StatisticValues is a struct type so we are parsing\n        # a csv keyval list into a dict.\n        statistics = {}\n        for pair in split_on_commas(value):\n            key, value = pair.split('=')\n            # There are four supported values: Maximum, Minimum, SampleCount,\n            # and Sum.  All of them are documented as a type double so we can\n            # convert these to a decimal value to preserve precision.\n            statistics[key] = decimal.Decimal(value)\n        first_element['StatisticValues'] = statistics\n", "path": "awscli/customizations/putmetricdata.py"}], "after_files": [{"content": "# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"). You\n# may not use this file except in compliance with the License. A copy of\n# the License is located at\n#\n#     http://aws.amazon.com/apache2.0/\n#\n# or in the \"license\" file accompanying this file. This file is\n# distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n# ANY KIND, either express or implied. See the License for the specific\n# language governing permissions and limitations under the License.\n\"\"\"\nThis customization adds the following scalar parameters to the\ncloudwatch put-metric-data operation:\n\n* --metric-name\n* --dimensions\n* --timestamp\n* --value\n* --statistic-values\n* --unit\n* --storage-resolution\n\n\"\"\"\nimport decimal\n\nfrom awscli.arguments import CustomArgument\nfrom awscli.utils import split_on_commas\nfrom awscli.customizations.utils import validate_mutually_exclusive_handler\n\n\ndef register_put_metric_data(event_handler):\n    event_handler.register(\n        'building-argument-table.cloudwatch.put-metric-data', _promote_args)\n    event_handler.register(\n        'operation-args-parsed.cloudwatch.put-metric-data',\n        validate_mutually_exclusive_handler(\n            ['metric_data'], ['metric_name', 'timestamp', 'unit', 'value',\n                              'dimensions', 'statistic_values']))\n\n\ndef _promote_args(argument_table, operation_model, **kwargs):\n    # We're providing top level params for metric-data.  This means\n    # that metric-data is now longer a required arg.  We do need\n    # to check that either metric-data or the complex args we've added\n    # have been provided.\n    argument_table['metric-data'].required = False\n\n    argument_table['metric-name'] = PutMetricArgument(\n        'metric-name', help_text='The name of the metric.')\n    argument_table['timestamp'] = PutMetricArgument(\n        'timestamp', help_text='The time stamp used for the metric.  '\n                               'If not specified, the default value is '\n                               'set to the time the metric data was '\n                               'received.')\n    argument_table['unit'] = PutMetricArgument(\n        'unit', help_text='The unit of metric.')\n    argument_table['value'] = PutMetricArgument(\n        'value', help_text='The value for the metric.  Although the --value '\n                           'parameter accepts numbers of type Double, '\n                           'Amazon CloudWatch truncates values with very '\n                           'large exponents.  Values with base-10 exponents '\n                           'greater than 126 (1 x 10^126) are truncated.  '\n                           'Likewise, values with base-10 exponents less '\n                           'than -130 (1 x 10^-130) are also truncated.')\n\n    argument_table['dimensions'] = PutMetricArgument(\n        'dimensions', help_text=(\n            'The --dimensions argument further expands '\n            'on the identity of a metric using a Name=Value '\n            'pair, separated by commas, for example: '\n            '<code>--dimensions InstanceID=1-23456789 '\n            'InstanceType=m1.small</code>. Note that the '\n            '<code>--dimensions</code> argument has a different format when '\n            'used in <code>get-metric-data</code>, where for the same example '\n            'you would use the format <code>--dimensions '\n            'Name=InstanceID,Value=i-aaba32d4 '\n            'Name=InstanceType,value=m1.small </code>.'\n        )\n    )\n    argument_table['statistic-values'] = PutMetricArgument(\n        'statistic-values', help_text='A set of statistical values describing '\n                                      'the metric.')\n\n    metric_data = operation_model.input_shape.members['MetricData'].member\n    storage_resolution = metric_data.members['StorageResolution']\n    argument_table['storage-resolution'] = PutMetricArgument(\n        'storage-resolution', help_text=storage_resolution.documentation\n    )\n\n\ndef insert_first_element(name):\n    def _wrap_add_to_params(func):\n        def _add_to_params(self, parameters, value):\n            if value is None:\n                return\n            if name not in parameters:\n                # We're taking a shortcut here and assuming that the first\n                # element is a struct type, hence the default value of\n                # a dict.  If this was going to be more general we'd need\n                # to have this paramterized, i.e. you pass in some sort of\n                # factory function that creates the initial starting value.\n                parameters[name] = [{}]\n            first_element = parameters[name][0]\n            return func(self, first_element, value)\n        return _add_to_params\n    return _wrap_add_to_params\n\n\nclass PutMetricArgument(CustomArgument):\n    def add_to_params(self, parameters, value):\n        method_name = '_add_param_%s' % self.name.replace('-', '_')\n        return getattr(self, method_name)(parameters, value)\n\n    @insert_first_element('MetricData')\n    def _add_param_metric_name(self, first_element, value):\n        first_element['MetricName'] = value\n\n    @insert_first_element('MetricData')\n    def _add_param_unit(self, first_element, value):\n        first_element['Unit'] = value\n\n    @insert_first_element('MetricData')\n    def _add_param_timestamp(self, first_element, value):\n        first_element['Timestamp'] = value\n\n    @insert_first_element('MetricData')\n    def _add_param_value(self, first_element, value):\n        # Use a Decimal to avoid loss in precision.\n        first_element['Value'] = decimal.Decimal(value)\n\n    @insert_first_element('MetricData')\n    def _add_param_dimensions(self, first_element, value):\n        # Dimensions needs a little more processing.  We support\n        # the key=value,key2=value syntax so we need to parse\n        # that.\n        dimensions = []\n        for pair in split_on_commas(value):\n            key, value = pair.split('=')\n            dimensions.append({'Name': key, 'Value': value})\n        first_element['Dimensions'] = dimensions\n\n    @insert_first_element('MetricData')\n    def _add_param_statistic_values(self, first_element, value):\n        # StatisticValues is a struct type so we are parsing\n        # a csv keyval list into a dict.\n        statistics = {}\n        for pair in split_on_commas(value):\n            key, value = pair.split('=')\n            # There are four supported values: Maximum, Minimum, SampleCount,\n            # and Sum.  All of them are documented as a type double so we can\n            # convert these to a decimal value to preserve precision.\n            statistics[key] = decimal.Decimal(value)\n        first_element['StatisticValues'] = statistics\n\n    @insert_first_element('MetricData')\n    def _add_param_storage_resolution(self, first_element, value):\n        first_element['StorageResolution'] = int(value)\n", "path": "awscli/customizations/putmetricdata.py"}]}