@@ -148,6 +148,27 @@ def test_select_with_named_params(self):
148148
149149        self .assertEqual (rows , [(500 ,)])
150150
151+     def  test_select_with_named_params_public_bucket (self ):
152+         create_bucket ('my-public-bucket' )
153+         disable_auth ('my-public-bucket' )
154+         with  get_db ([
155+             ("CREATE TABLE my_table (my_col_a text, my_col_b text);" , ())
156+         ] +  [
157+             ("INSERT INTO my_table VALUES "  +  ',' .join (["('some-text-a', 'some-text-b')" ] *  500 ), ()),
158+             ("INSERT INTO my_table VALUES "  +  ',' .join (["('some-text-c', 'some-text-d')" ] *  100 ), ()),
159+         ]) as  db :
160+             put_object_with_versioning ('my-public-bucket' , 'my.db' , db )
161+ 
162+         with  sqlite_s3_query (
163+                 'http://localhost:9000/my-public-bucket/my.db' ,
164+                 get_credentials = None ,
165+                 get_libsqlite3 = get_libsqlite3 
166+         ) as  query :
167+             with  query ('SELECT COUNT(*) FROM my_table WHERE my_col_a = :first' , named_params = ((':first' , 'some-text-a' ),)) as  (columns , rows ):
168+                 rows  =  list (rows )
169+ 
170+         self .assertEqual (rows , [(500 ,)])
171+ 
151172    def  test_select_large (self ):
152173        empty  =  (bytes (4050 ),)
153174
@@ -840,6 +861,36 @@ def enable_versioning(bucket):
840861    response  =  httpx .put (url , content = content , headers = headers )
841862    response .raise_for_status ()
842863
864+ def  disable_auth (bucket ):
865+     content  =  f''' 
866+         {{ 
867+             "Version": "2012-10-17", 
868+             "Statement": [ 
869+                 {{ 
870+                     "Sid": "Stmt1405592139000", 
871+                     "Effect": "Allow", 
872+                     "Principal": "*", 
873+                     "Action": [ 
874+                         "s3:GetObject", 
875+                         "s3:GetObjectVersion" 
876+                     ], 
877+                     "Resource": [ 
878+                         "arn:aws:s3:::{ bucket }  
879+                     ] 
880+                 }} 
881+             ] 
882+         }} 
883+     ''' .encode ()
884+     url  =  f'http://127.0.0.1:9000/{ bucket }  
885+     body_hash  =  hashlib .sha256 (content ).hexdigest ()
886+     parsed_url  =  urllib .parse .urlsplit (url )
887+ 
888+     headers  =  aws_sigv4_headers (
889+         'AKIAIOSFODNN7EXAMPLE' , 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' ,
890+         (), 's3' , 'us-east-1' , parsed_url .netloc , 'PUT' , parsed_url .path , (('policy' , '' ),), body_hash ,
891+     )
892+     response  =  httpx .put (url , content = content , headers = headers )
893+     response .raise_for_status ()
843894
844895def  aws_sigv4_headers (access_key_id , secret_access_key , pre_auth_headers ,
845896                      service , region , host , method , path , params , body_hash ):
0 commit comments