@@ -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 } /?policy'
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