12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
14
15
+ # pylint: disable=too-many-lines
15
16
16
17
import logging
17
18
import re
@@ -277,6 +278,47 @@ def test_executemany_comment(self):
277
278
cursor .query ,
278
279
r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
279
280
)
281
+ spans_list = self .memory_exporter .get_finished_spans ()
282
+ self .assertEqual (len (spans_list ), 1 )
283
+ span = spans_list [0 ]
284
+ self .assertEqual (
285
+ span .attributes [SpanAttributes .DB_STATEMENT ],
286
+ "Select 1;" ,
287
+ )
288
+
289
+ def test_executemany_comment_stmt_enabled (self ):
290
+ connect_module = mock .MagicMock ()
291
+ connect_module .__name__ = "test"
292
+ connect_module .__version__ = mock .MagicMock ()
293
+ connect_module .__libpq_version__ = 123
294
+ connect_module .apilevel = 123
295
+ connect_module .threadsafety = 123
296
+ connect_module .paramstyle = "test"
297
+
298
+ db_integration = dbapi .DatabaseApiIntegration (
299
+ "testname" ,
300
+ "postgresql" ,
301
+ enable_commenter = True ,
302
+ commenter_options = {"db_driver" : False , "dbapi_level" : False },
303
+ connect_module = connect_module ,
304
+ enable_attribute_commenter = True ,
305
+ )
306
+ mock_connection = db_integration .wrapped_connection (
307
+ mock_connect , {}, {}
308
+ )
309
+ cursor = mock_connection .cursor ()
310
+ cursor .executemany ("Select 1;" )
311
+ self .assertRegex (
312
+ cursor .query ,
313
+ r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
314
+ )
315
+ spans_list = self .memory_exporter .get_finished_spans ()
316
+ self .assertEqual (len (spans_list ), 1 )
317
+ span = spans_list [0 ]
318
+ self .assertRegex (
319
+ span .attributes [SpanAttributes .DB_STATEMENT ],
320
+ r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
321
+ )
280
322
281
323
def test_executemany_comment_non_pep_249_compliant (self ):
282
324
class MockConnectModule :
@@ -306,8 +348,54 @@ def __getattr__(self, name):
306
348
cursor .query ,
307
349
r"Select 1 /\*dbapi_level='1.0',dbapi_threadsafety='unknown',driver_paramstyle='unknown',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
308
350
)
351
+ spans_list = self .memory_exporter .get_finished_spans ()
352
+ self .assertEqual (len (spans_list ), 1 )
353
+ span = spans_list [0 ]
354
+ self .assertEqual (
355
+ span .attributes [SpanAttributes .DB_STATEMENT ],
356
+ "Select 1;" ,
357
+ )
309
358
310
- def test_executemany_comment_matches_db_statement_attribute (self ):
359
+ def test_executemany_comment_non_pep_249_compliant_stmt_enabled (self ):
360
+ class MockConnectModule :
361
+ def __getattr__ (self , name ):
362
+ if name == "__name__" :
363
+ return "test"
364
+ if name == "__version__" :
365
+ return mock .MagicMock ()
366
+ if name == "__libpq_version__" :
367
+ return 123
368
+ raise AttributeError ("attribute missing" )
369
+
370
+ connect_module = MockConnectModule ()
371
+ db_integration = dbapi .DatabaseApiIntegration (
372
+ "testname" ,
373
+ "postgresql" ,
374
+ enable_commenter = True ,
375
+ connect_module = connect_module ,
376
+ commenter_options = {"db_driver" : False },
377
+ enable_attribute_commenter = True ,
378
+ )
379
+ mock_connection = db_integration .wrapped_connection (
380
+ mock_connect , {}, {}
381
+ )
382
+ cursor = mock_connection .cursor ()
383
+ cursor .executemany ("Select 1;" )
384
+ self .assertRegex (
385
+ cursor .query ,
386
+ r"Select 1 /\*dbapi_level='1.0',dbapi_threadsafety='unknown',driver_paramstyle='unknown',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
387
+ )
388
+ spans_list = self .memory_exporter .get_finished_spans ()
389
+ self .assertEqual (len (spans_list ), 1 )
390
+ span = spans_list [0 ]
391
+ self .assertRegex (
392
+ span .attributes [SpanAttributes .DB_STATEMENT ],
393
+ r"Select 1 /\*dbapi_level='1.0',dbapi_threadsafety='unknown',driver_paramstyle='unknown',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
394
+ )
395
+
396
+ def test_executemany_comment_stmt_enabled_matches_db_statement_attribute (
397
+ self ,
398
+ ):
311
399
connect_module = mock .MagicMock ()
312
400
connect_module .__version__ = mock .MagicMock ()
313
401
connect_module .__libpq_version__ = 123
@@ -321,6 +409,7 @@ def test_executemany_comment_matches_db_statement_attribute(self):
321
409
enable_commenter = True ,
322
410
commenter_options = {"db_driver" : False , "dbapi_level" : False },
323
411
connect_module = connect_module ,
412
+ enable_attribute_commenter = True ,
324
413
)
325
414
mock_connection = db_integration .wrapped_connection (
326
415
mock_connect , {}, {}
@@ -371,6 +460,50 @@ def test_compatible_build_version_psycopg_psycopg2_libpq(self):
371
460
cursor .query ,
372
461
r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
373
462
)
463
+ spans_list = self .memory_exporter .get_finished_spans ()
464
+ self .assertEqual (len (spans_list ), 1 )
465
+ span = spans_list [0 ]
466
+ self .assertEqual (
467
+ span .attributes [SpanAttributes .DB_STATEMENT ],
468
+ "Select 1;" ,
469
+ )
470
+
471
+ def test_compatible_build_version_psycopg_psycopg2_libpq_stmt_enabled (
472
+ self ,
473
+ ):
474
+ connect_module = mock .MagicMock ()
475
+ connect_module .__name__ = "test"
476
+ connect_module .__version__ = mock .MagicMock ()
477
+ connect_module .pq = mock .MagicMock ()
478
+ connect_module .pq .__build_version__ = 123
479
+ connect_module .apilevel = 123
480
+ connect_module .threadsafety = 123
481
+ connect_module .paramstyle = "test"
482
+
483
+ db_integration = dbapi .DatabaseApiIntegration (
484
+ "testname" ,
485
+ "postgresql" ,
486
+ enable_commenter = True ,
487
+ commenter_options = {"db_driver" : False , "dbapi_level" : False },
488
+ connect_module = connect_module ,
489
+ enable_attribute_commenter = True ,
490
+ )
491
+ mock_connection = db_integration .wrapped_connection (
492
+ mock_connect , {}, {}
493
+ )
494
+ cursor = mock_connection .cursor ()
495
+ cursor .executemany ("Select 1;" )
496
+ self .assertRegex (
497
+ cursor .query ,
498
+ r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
499
+ )
500
+ spans_list = self .memory_exporter .get_finished_spans ()
501
+ self .assertEqual (len (spans_list ), 1 )
502
+ span = spans_list [0 ]
503
+ self .assertRegex (
504
+ span .attributes [SpanAttributes .DB_STATEMENT ],
505
+ r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
506
+ )
374
507
375
508
def test_executemany_psycopg2_integration_comment (self ):
376
509
connect_module = mock .MagicMock ()
@@ -397,6 +530,47 @@ def test_executemany_psycopg2_integration_comment(self):
397
530
cursor .query ,
398
531
r"Select 1 /\*db_driver='psycopg2%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
399
532
)
533
+ spans_list = self .memory_exporter .get_finished_spans ()
534
+ self .assertEqual (len (spans_list ), 1 )
535
+ span = spans_list [0 ]
536
+ self .assertEqual (
537
+ span .attributes [SpanAttributes .DB_STATEMENT ],
538
+ "Select 1;" ,
539
+ )
540
+
541
+ def test_executemany_psycopg2_integration_comment_stmt_enabled (self ):
542
+ connect_module = mock .MagicMock ()
543
+ connect_module .__name__ = "psycopg2"
544
+ connect_module .__version__ = "1.2.3"
545
+ connect_module .__libpq_version__ = 123
546
+ connect_module .apilevel = 123
547
+ connect_module .threadsafety = 123
548
+ connect_module .paramstyle = "test"
549
+
550
+ db_integration = dbapi .DatabaseApiIntegration (
551
+ "testname" ,
552
+ "postgresql" ,
553
+ enable_commenter = True ,
554
+ commenter_options = {"db_driver" : True , "dbapi_level" : False },
555
+ connect_module = connect_module ,
556
+ enable_attribute_commenter = True ,
557
+ )
558
+ mock_connection = db_integration .wrapped_connection (
559
+ mock_connect , {}, {}
560
+ )
561
+ cursor = mock_connection .cursor ()
562
+ cursor .executemany ("Select 1;" )
563
+ self .assertRegex (
564
+ cursor .query ,
565
+ r"Select 1 /\*db_driver='psycopg2%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
566
+ )
567
+ spans_list = self .memory_exporter .get_finished_spans ()
568
+ self .assertEqual (len (spans_list ), 1 )
569
+ span = spans_list [0 ]
570
+ self .assertRegex (
571
+ span .attributes [SpanAttributes .DB_STATEMENT ],
572
+ r"Select 1 /\*db_driver='psycopg2%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
573
+ )
400
574
401
575
def test_executemany_psycopg_integration_comment (self ):
402
576
connect_module = mock .MagicMock ()
@@ -424,6 +598,48 @@ def test_executemany_psycopg_integration_comment(self):
424
598
cursor .query ,
425
599
r"Select 1 /\*db_driver='psycopg%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
426
600
)
601
+ spans_list = self .memory_exporter .get_finished_spans ()
602
+ self .assertEqual (len (spans_list ), 1 )
603
+ span = spans_list [0 ]
604
+ self .assertEqual (
605
+ span .attributes [SpanAttributes .DB_STATEMENT ],
606
+ "Select 1;" ,
607
+ )
608
+
609
+ def test_executemany_psycopg_integration_comment_stmt_enabled (self ):
610
+ connect_module = mock .MagicMock ()
611
+ connect_module .__name__ = "psycopg"
612
+ connect_module .__version__ = "1.2.3"
613
+ connect_module .pq = mock .MagicMock ()
614
+ connect_module .pq .__build_version__ = 123
615
+ connect_module .apilevel = 123
616
+ connect_module .threadsafety = 123
617
+ connect_module .paramstyle = "test"
618
+
619
+ db_integration = dbapi .DatabaseApiIntegration (
620
+ "testname" ,
621
+ "postgresql" ,
622
+ enable_commenter = True ,
623
+ commenter_options = {"db_driver" : True , "dbapi_level" : False },
624
+ connect_module = connect_module ,
625
+ enable_attribute_commenter = True ,
626
+ )
627
+ mock_connection = db_integration .wrapped_connection (
628
+ mock_connect , {}, {}
629
+ )
630
+ cursor = mock_connection .cursor ()
631
+ cursor .executemany ("Select 1;" )
632
+ self .assertRegex (
633
+ cursor .query ,
634
+ r"Select 1 /\*db_driver='psycopg%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
635
+ )
636
+ spans_list = self .memory_exporter .get_finished_spans ()
637
+ self .assertEqual (len (spans_list ), 1 )
638
+ span = spans_list [0 ]
639
+ self .assertRegex (
640
+ span .attributes [SpanAttributes .DB_STATEMENT ],
641
+ r"Select 1 /\*db_driver='psycopg%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
642
+ )
427
643
428
644
def test_executemany_mysqlconnector_integration_comment (self ):
429
645
connect_module = mock .MagicMock ()
@@ -450,6 +666,47 @@ def test_executemany_mysqlconnector_integration_comment(self):
450
666
cursor .query ,
451
667
r"Select 1 /\*db_driver='mysql.connector%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='1.2.3',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
452
668
)
669
+ spans_list = self .memory_exporter .get_finished_spans ()
670
+ self .assertEqual (len (spans_list ), 1 )
671
+ span = spans_list [0 ]
672
+ self .assertEqual (
673
+ span .attributes [SpanAttributes .DB_STATEMENT ],
674
+ "Select 1;" ,
675
+ )
676
+
677
+ def test_executemany_mysqlconnector_integration_comment_stmt_enabled (self ):
678
+ connect_module = mock .MagicMock ()
679
+ connect_module .__name__ = "mysql.connector"
680
+ connect_module .__version__ = "1.2.3"
681
+ connect_module .apilevel = 123
682
+ connect_module .threadsafety = 123
683
+ connect_module .paramstyle = "test"
684
+
685
+ db_integration = dbapi .DatabaseApiIntegration (
686
+ "testname" ,
687
+ "mysql" ,
688
+ enable_commenter = True ,
689
+ commenter_options = {"db_driver" : True , "dbapi_level" : False },
690
+ connect_module = connect_module ,
691
+ enable_attribute_commenter = True ,
692
+ )
693
+
694
+ mock_connection = db_integration .wrapped_connection (
695
+ mock_connect , {}, {}
696
+ )
697
+ cursor = mock_connection .cursor ()
698
+ cursor .executemany ("Select 1;" )
699
+ self .assertRegex (
700
+ cursor .query ,
701
+ r"Select 1 /\*db_driver='mysql.connector%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='1.2.3',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
702
+ )
703
+ spans_list = self .memory_exporter .get_finished_spans ()
704
+ self .assertEqual (len (spans_list ), 1 )
705
+ span = spans_list [0 ]
706
+ self .assertRegex (
707
+ span .attributes [SpanAttributes .DB_STATEMENT ],
708
+ r"Select 1 /\*db_driver='mysql.connector%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='1.2.3',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
709
+ )
453
710
454
711
@mock .patch ("opentelemetry.instrumentation.dbapi.util_version" )
455
712
def test_executemany_mysqlclient_integration_comment (
@@ -485,6 +742,56 @@ def test_executemany_mysqlclient_integration_comment(
485
742
cursor .query ,
486
743
r"Select 1 /\*db_driver='MySQLdb%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='123',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
487
744
)
745
+ spans_list = self .memory_exporter .get_finished_spans ()
746
+ self .assertEqual (len (spans_list ), 1 )
747
+ span = spans_list [0 ]
748
+ self .assertEqual (
749
+ span .attributes [SpanAttributes .DB_STATEMENT ],
750
+ "Select 1;" ,
751
+ )
752
+
753
+ @mock .patch ("opentelemetry.instrumentation.dbapi.util_version" )
754
+ def test_executemany_mysqlclient_integration_comment_stmt_enabled (
755
+ self ,
756
+ mock_dbapi_util_version ,
757
+ ):
758
+ mock_dbapi_util_version .return_value = "1.2.3"
759
+ connect_module = mock .MagicMock ()
760
+ connect_module .__name__ = "MySQLdb"
761
+ connect_module .__version__ = "1.2.3"
762
+ connect_module .apilevel = 123
763
+ connect_module .threadsafety = 123
764
+ connect_module .paramstyle = "test"
765
+ connect_module ._mysql = mock .MagicMock ()
766
+ connect_module ._mysql .get_client_info = mock .MagicMock (
767
+ return_value = "123"
768
+ )
769
+
770
+ db_integration = dbapi .DatabaseApiIntegration (
771
+ "testname" ,
772
+ "mysql" ,
773
+ enable_commenter = True ,
774
+ commenter_options = {"db_driver" : True , "dbapi_level" : False },
775
+ connect_module = connect_module ,
776
+ enable_attribute_commenter = True ,
777
+ )
778
+
779
+ mock_connection = db_integration .wrapped_connection (
780
+ mock_connect , {}, {}
781
+ )
782
+ cursor = mock_connection .cursor ()
783
+ cursor .executemany ("Select 1;" )
784
+ self .assertRegex (
785
+ cursor .query ,
786
+ r"Select 1 /\*db_driver='MySQLdb%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='123',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
787
+ )
788
+ spans_list = self .memory_exporter .get_finished_spans ()
789
+ self .assertEqual (len (spans_list ), 1 )
790
+ span = spans_list [0 ]
791
+ self .assertRegex (
792
+ span .attributes [SpanAttributes .DB_STATEMENT ],
793
+ r"Select 1 /\*db_driver='MySQLdb%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='123',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
794
+ )
488
795
489
796
def test_executemany_pymysql_integration_comment (self ):
490
797
connect_module = mock .MagicMock ()
@@ -512,6 +819,48 @@ def test_executemany_pymysql_integration_comment(self):
512
819
cursor .query ,
513
820
r"Select 1 /\*db_driver='pymysql%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='123',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
514
821
)
822
+ spans_list = self .memory_exporter .get_finished_spans ()
823
+ self .assertEqual (len (spans_list ), 1 )
824
+ span = spans_list [0 ]
825
+ self .assertEqual (
826
+ span .attributes [SpanAttributes .DB_STATEMENT ],
827
+ "Select 1;" ,
828
+ )
829
+
830
+ def test_executemany_pymysql_integration_comment_stmt_enabled (self ):
831
+ connect_module = mock .MagicMock ()
832
+ connect_module .__name__ = "pymysql"
833
+ connect_module .__version__ = "1.2.3"
834
+ connect_module .apilevel = 123
835
+ connect_module .threadsafety = 123
836
+ connect_module .paramstyle = "test"
837
+ connect_module .get_client_info = mock .MagicMock (return_value = "123" )
838
+
839
+ db_integration = dbapi .DatabaseApiIntegration (
840
+ "testname" ,
841
+ "mysql" ,
842
+ enable_commenter = True ,
843
+ commenter_options = {"db_driver" : True , "dbapi_level" : False },
844
+ connect_module = connect_module ,
845
+ enable_attribute_commenter = True ,
846
+ )
847
+
848
+ mock_connection = db_integration .wrapped_connection (
849
+ mock_connect , {}, {}
850
+ )
851
+ cursor = mock_connection .cursor ()
852
+ cursor .executemany ("Select 1;" )
853
+ self .assertRegex (
854
+ cursor .query ,
855
+ r"Select 1 /\*db_driver='pymysql%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='123',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
856
+ )
857
+ spans_list = self .memory_exporter .get_finished_spans ()
858
+ self .assertEqual (len (spans_list ), 1 )
859
+ span = spans_list [0 ]
860
+ self .assertRegex (
861
+ span .attributes [SpanAttributes .DB_STATEMENT ],
862
+ r"Select 1 /\*db_driver='pymysql%%3A1.2.3',dbapi_threadsafety=123,driver_paramstyle='test',mysql_client_version='123',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
863
+ )
515
864
516
865
def test_executemany_flask_integration_comment (self ):
517
866
connect_module = mock .MagicMock ()
@@ -544,6 +893,58 @@ def test_executemany_flask_integration_comment(self):
544
893
cursor .query ,
545
894
r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',flask=1,libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
546
895
)
896
+ spans_list = self .memory_exporter .get_finished_spans ()
897
+ self .assertEqual (len (spans_list ), 1 )
898
+ span = spans_list [0 ]
899
+ self .assertEqual (
900
+ span .attributes [SpanAttributes .DB_STATEMENT ],
901
+ "Select 1;" ,
902
+ )
903
+
904
+ clear_context = context .set_value (
905
+ "SQLCOMMENTER_ORM_TAGS_AND_VALUES" , {}, current_context
906
+ )
907
+ context .attach (clear_context )
908
+
909
+ def test_executemany_flask_integration_comment_stmt_enabled (self ):
910
+ connect_module = mock .MagicMock ()
911
+ connect_module .__name__ = "test"
912
+ connect_module .__version__ = mock .MagicMock ()
913
+ connect_module .__libpq_version__ = 123
914
+ connect_module .apilevel = 123
915
+ connect_module .threadsafety = 123
916
+ connect_module .paramstyle = "test"
917
+
918
+ db_integration = dbapi .DatabaseApiIntegration (
919
+ "testname" ,
920
+ "postgresql" ,
921
+ enable_commenter = True ,
922
+ commenter_options = {"db_driver" : False , "dbapi_level" : False },
923
+ connect_module = connect_module ,
924
+ enable_attribute_commenter = True ,
925
+ )
926
+ current_context = context .get_current ()
927
+ sqlcommenter_context = context .set_value (
928
+ "SQLCOMMENTER_ORM_TAGS_AND_VALUES" , {"flask" : 1 }, current_context
929
+ )
930
+ context .attach (sqlcommenter_context )
931
+
932
+ mock_connection = db_integration .wrapped_connection (
933
+ mock_connect , {}, {}
934
+ )
935
+ cursor = mock_connection .cursor ()
936
+ cursor .executemany ("Select 1;" )
937
+ self .assertRegex (
938
+ cursor .query ,
939
+ r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',flask=1,libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
940
+ )
941
+ spans_list = self .memory_exporter .get_finished_spans ()
942
+ self .assertEqual (len (spans_list ), 1 )
943
+ span = spans_list [0 ]
944
+ self .assertRegex (
945
+ span .attributes [SpanAttributes .DB_STATEMENT ],
946
+ r"Select 1 /\*dbapi_threadsafety=123,driver_paramstyle='test',flask=1,libpq_version=123,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;" ,
947
+ )
547
948
548
949
clear_context = context .set_value (
549
950
"SQLCOMMENTER_ORM_TAGS_AND_VALUES" , {}, current_context
@@ -603,6 +1004,7 @@ def test_instrument_connection_kwargs_defaults(self, mock_dbapiint):
603
1004
self .assertEqual (kwargs ["enable_commenter" ], False )
604
1005
self .assertEqual (kwargs ["commenter_options" ], None )
605
1006
self .assertEqual (kwargs ["connect_module" ], None )
1007
+ self .assertEqual (kwargs ["enable_attribute_commenter" ], False )
606
1008
607
1009
@mock .patch ("opentelemetry.instrumentation.dbapi.DatabaseApiIntegration" )
608
1010
def test_instrument_connection_kwargs_provided (self , mock_dbapiint ):
@@ -619,6 +1021,7 @@ def test_instrument_connection_kwargs_provided(self, mock_dbapiint):
619
1021
enable_commenter = True ,
620
1022
commenter_options = {"foo" : "bar" },
621
1023
connect_module = mock_connect_module ,
1024
+ enable_attribute_commenter = True ,
622
1025
)
623
1026
kwargs = mock_dbapiint .call_args [1 ]
624
1027
self .assertEqual (kwargs ["connection_attributes" ], {"foo" : "bar" })
@@ -628,6 +1031,7 @@ def test_instrument_connection_kwargs_provided(self, mock_dbapiint):
628
1031
self .assertEqual (kwargs ["enable_commenter" ], True )
629
1032
self .assertEqual (kwargs ["commenter_options" ], {"foo" : "bar" })
630
1033
self .assertIs (kwargs ["connect_module" ], mock_connect_module )
1034
+ self .assertEqual (kwargs ["enable_attribute_commenter" ], True )
631
1035
632
1036
def test_uninstrument_connection (self ):
633
1037
connection = mock .Mock ()
0 commit comments