@@ -148,6 +148,27 @@ def test_select_with_named_params(self):
148
148
149
149
self .assertEqual (rows , [(500 ,)])
150
150
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
+
151
172
def test_select_large (self ):
152
173
empty = (bytes (4050 ),)
153
174
@@ -840,6 +861,36 @@ def enable_versioning(bucket):
840
861
response = httpx .put (url , content = content , headers = headers )
841
862
response .raise_for_status ()
842
863
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 ()
843
894
844
895
def aws_sigv4_headers (access_key_id , secret_access_key , pre_auth_headers ,
845
896
service , region , host , method , path , params , body_hash ):
0 commit comments