lericson / simples3

Simple, quick Amazon AWS S3 interface in Python
BSD 2-Clause "Simplified" License
96 stars 36 forks source link

`;` as query string separator causes a trouble #14

Closed yoloseem closed 12 years ago

yoloseem commented 12 years ago

S3Request seems to have a problem with handling arguments because of using ; as args separator(https://github.com/lericson/simples3/blob/master/simples3/bucket.py#L138). It works right with & instead of ;, so I carefully guess S3 may does not support ; separator. Did I do anything wrong?

lericson commented 12 years ago

Odd, very odd. What does this affect? Can you show that doing this won't harm? I'm pretty sure the argument separator was set to semicolon for a reason.

yoloseem commented 12 years ago

ah. here's my case.

>>> for item in storage.bucket._get_listing(args={'prefix':'1/'}): 
...     print item
... 
('1/100x100-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 55, 39), '"14b4f7d62aca06f113be84a65b8c0bde"', 5059)
('1/140x140-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 40, 19), '"f7eabc4177f4a4ba542d73e2baacbf60"', 8458)
('1/180x180', datetime.datetime(2012, 3, 4, 3, 40, 6), '"6a1ef466c74071e57f8e5354080153d3"', 14501)
('1/180x180-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 40, 19), '"b2dc93bfa44102c981d9a92e9d6df15b"', 13184)
('1/32x32-0x0-180x180', datetime.datetime(2012, 3, 7, 6, 53, 56), '"a6c5d76151ff506f309af7c40175c136"', 906)
('1/36x36-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 42, 30), '"965a76c4ff9652984625271f64b95d74"', 1238)
('1/48x48-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 55, 19), '"53c2ee7bff7d42587c58748661d65d54"', 1540)
>>> for item in storage.bucket._get_listing(args={'prefix': '1/', 'max-keys': '3'}):
...     print item
... 
>>> 

I guess that 1. ; wasn't recognized as separator so arguments has broken or 2. ; has unexpectedly and weirdly escaped. After replaced it with &, it works. But... I'm also not sure using & as argument separator will not cause any side effects...

>>> for item in storage.bucket._get_listing(args={'prefix': '1/', 'max-keys': '3'}):
...     print item
... 
('1/100x100-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 55, 39), '"14b4f7d62aca06f113be84a65b8c0bde"', 5059)
('1/140x140-0x0-180x180', datetime.datetime(2012, 3, 4, 3, 40, 19), '"f7eabc4177f4a4ba542d73e2baacbf60"', 8458)
('1/180x180', datetime.datetime(2012, 3, 4, 3, 40, 6), '"6a1ef466c74071e57f8e5354080153d3"', 14501)
>>> 
huntrax11 commented 12 years ago

@lericson I wanna know what's going on this issue, because I'm having same trouble like him- And actually, @kimjayd 's patch works for me-

lericson commented 12 years ago

Ok will merge this