@@ -1837,6 +1837,95 @@ def get_secret_value_response(self):
1837
1837
self ._add_data_to_metadata ('Response' , response_data )
1838
1838
1839
1839
1840
+ class BotocoreAuroraServerlessEvent (BotocoreEvent ):
1841
+ """
1842
+ Represents data API (aurora serverless) botocore event.
1843
+ """
1844
+
1845
+ RESOURCE_TYPE = 'rdsdataservice'
1846
+ RESOURCE_TYPE_UPDATE = 'database'
1847
+ EXECUTE_STATEMENT_OPERATION = 'ExecuteStatement'
1848
+ DATABASE_FIELD = 'database'
1849
+ RESOURCE_ARN_FIELD = 'resourceArn'
1850
+
1851
+ def _get_resource_name (self ):
1852
+ """
1853
+ Gets the relevant resource name - the managed RDS name
1854
+ """
1855
+ resource_arn = self .request_data .get (self .RESOURCE_ARN_FIELD , '' )
1856
+ return resource_arn .split (':' )[- 1 ]
1857
+
1858
+
1859
+ def __init__ (self , wrapped , instance , args , kwargs , start_time , response ,
1860
+ exception ):
1861
+ """
1862
+ Initialize.
1863
+ :param wrapped: wrapt's wrapped
1864
+ :param instance: wrapt's instance
1865
+ :param args: wrapt's args
1866
+ :param kwargs: wrapt's kwargs
1867
+ :param start_time: Start timestamp (epoch)
1868
+ :param response: response data
1869
+ :param exception: Exception (if happened)
1870
+ """
1871
+ self .OPERATION_TO_FUNC .update ({
1872
+ self .EXECUTE_STATEMENT_OPERATION : self .execute_statement_op ,
1873
+ })
1874
+
1875
+ self .RESPONSE_TO_FUNC .update ({
1876
+ self .EXECUTE_STATEMENT_OPERATION : self .execute_statement_response ,
1877
+ })
1878
+ _ , request_data = args
1879
+ self .request_data = request_data
1880
+ self .response = response
1881
+
1882
+ super (BotocoreAuroraServerlessEvent , self ).__init__ (
1883
+ wrapped ,
1884
+ instance ,
1885
+ args ,
1886
+ kwargs ,
1887
+ start_time ,
1888
+ response ,
1889
+ exception
1890
+ )
1891
+ self .resource ['name' ] = self ._get_resource_name ()
1892
+ self .resource ['type' ] = self .RESOURCE_TYPE_UPDATE
1893
+ self .OPERATION_TO_FUNC .get (self .resource ['operation' ], empty_func )()
1894
+
1895
+ def update_response (self , response ):
1896
+ """
1897
+ Adds response data to event.
1898
+ :param response: Response from botocore
1899
+ """
1900
+ super (BotocoreAuroraServerlessEvent , self ).update_response (response )
1901
+ self .RESPONSE_TO_FUNC .get (self .resource ['operation' ], empty_func )()
1902
+
1903
+ def execute_statement_op (self ):
1904
+ """
1905
+ Handles execute statement operation.
1906
+ """
1907
+ self .resource ['metadata' ]['database' ] = self .request_data .get (
1908
+ self .DATABASE_FIELD
1909
+ )
1910
+ self .resource ['metadata' ]['Secret Arn' ] = self .request_data .get (
1911
+ 'secretArn'
1912
+ )
1913
+ add_data_if_needed (
1914
+ self .resource ['metadata' ], 'sql' , self .request_data .get ('sql' )
1915
+ )
1916
+
1917
+ def execute_statement_response (self ):
1918
+ """
1919
+ Handles execute statement response.
1920
+ """
1921
+ add_data_if_needed (
1922
+ self .resource ['metadata' ], 'records' , self .response .get ('records' )
1923
+ )
1924
+ self .resource ['metadata' ]['number of records updated' ] = (
1925
+ self .response .get ('numberOfRecordsUpdated' )
1926
+ )
1927
+
1928
+
1840
1929
class BotocoreEventFactory (object ):
1841
1930
"""
1842
1931
Factory class, generates botocore event.
@@ -1866,7 +1955,6 @@ def create_event(wrapped, instance, args, kwargs, start_time, response,
1866
1955
instance_type ,
1867
1956
None
1868
1957
)
1869
-
1870
1958
if event_class is not None :
1871
1959
event = event_class (
1872
1960
wrapped ,
0 commit comments