{"action":"created","issue":{"url":"https://api.github.com/repos/falconry/falcon/issues/749","repository_url":"https://api.github.com/repos/falconry/falcon","labels_url":"https://api.github.com/repos/falconry/falcon/issues/749/labels{/name}","comments_url":"https://api.github.com/repos/falconry/falcon/issues/749/comments","events_url":"https://api.github.com/repos/falconry/falcon/issues/749/events","html_url":"https://github.com/falconry/falcon/issues/749","id":145356640,"number":749,"title":"Add option to opt-out from comma separated value parsing","user":{"login":"rr-","id":1045476,"avatar_url":"https://avatars.githubusercontent.com/u/1045476?v=3","gravatar_id":"","url":"https://api.github.com/users/rr-","html_url":"https://github.com/rr-","followers_url":"https://api.github.com/users/rr-/followers","following_url":"https://api.github.com/users/rr-/following{/other_user}","gists_url":"https://api.github.com/users/rr-/gists{/gist_id}","starred_url":"https://api.github.com/users/rr-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rr-/subscriptions","organizations_url":"https://api.github.com/users/rr-/orgs","repos_url":"https://api.github.com/users/rr-/repos","events_url":"https://api.github.com/users/rr-/events{/privacy}","received_events_url":"https://api.github.com/users/rr-/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/falconry/falcon/labels/enhancement","name":"enhancement","color":"bfe5bf"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/falconry/falcon/milestones/22","html_url":"https://github.com/falconry/falcon/milestones/Version%201.1","labels_url":"https://api.github.com/repos/falconry/falcon/milestones/22/labels","id":1589033,"number":22,"title":"Version 1.1","description":"","creator":{"login":"kgriffs","id":719939,"avatar_url":"https://avatars.githubusercontent.com/u/719939?v=3","gravatar_id":"","url":"https://api.github.com/users/kgriffs","html_url":"https://github.com/kgriffs","followers_url":"https://api.github.com/users/kgriffs/followers","following_url":"https://api.github.com/users/kgriffs/following{/other_user}","gists_url":"https://api.github.com/users/kgriffs/gists{/gist_id}","starred_url":"https://api.github.com/users/kgriffs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kgriffs/subscriptions","organizations_url":"https://api.github.com/users/kgriffs/orgs","repos_url":"https://api.github.com/users/kgriffs/repos","events_url":"https://api.github.com/users/kgriffs/events{/privacy}","received_events_url":"https://api.github.com/users/kgriffs/received_events","type":"User","site_admin":false},"open_issues":33,"closed_issues":2,"state":"open","created_at":"2016-02-17T17:40:58Z","updated_at":"2016-05-25T16:47:12Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2016-04-02T09:47:32Z","updated_at":"2016-05-25T16:56:15Z","closed_at":null,"body":"I'm porting a project to Falcon and I stumbled upon an issue regarding its parsing of CSV values inside URIs. Let's say I have filtering engine that accepts queries such as this:\r\n\r\n    http://great.dude/api/cars?query=added:yesterday,today+spoilers:red\r\n\r\nI obviously want to make `req.get_param('query')` return `'added:yesterday,today spoilers:red'`, and not `['added:yesterday', 'today spoilers:red']`.\r\n\r\nRight now this [isn't really configurable](https://github.com/falconry/falcon/blob/35987b2be85456f431bbda509e884a8b0b20ed11/falcon/util/uri.py#L312-L328) and I need to check if `get_param()` returns a `list` and then join it back if needed, which looks sort of silly. Fortunately, the ability to use custom request classes alleviates the issue to some extent.\r\n\r\nI see a few ways to improve things upstream:\r\n\r\n1. Offer explicit `get_param_as_string` that will possibly do `','.join(...)` under the hood.\r\n2. Add an option to disable this mechanism as an additional option to `Api`.\r\n3. Add an option to disable this mechanism as an additional option to `add_route()`.\r\n4. Change `get_param` to always return string.\r\n\r\nOption 4 makes the most sense to me, but it breaks BC. If option 4 is not feasible, I'd went with option 1."},"comment":{"url":"https://api.github.com/repos/falconry/falcon/issues/comments/221638536","html_url":"https://github.com/falconry/falcon/issues/749#issuecomment-221638536","issue_url":"https://api.github.com/repos/falconry/falcon/issues/749","id":221638536,"user":{"login":"kgriffs","id":719939,"avatar_url":"https://avatars.githubusercontent.com/u/719939?v=3","gravatar_id":"","url":"https://api.github.com/users/kgriffs","html_url":"https://github.com/kgriffs","followers_url":"https://api.github.com/users/kgriffs/followers","following_url":"https://api.github.com/users/kgriffs/following{/other_user}","gists_url":"https://api.github.com/users/kgriffs/gists{/gist_id}","starred_url":"https://api.github.com/users/kgriffs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kgriffs/subscriptions","organizations_url":"https://api.github.com/users/kgriffs/orgs","repos_url":"https://api.github.com/users/kgriffs/repos","events_url":"https://api.github.com/users/kgriffs/events{/privacy}","received_events_url":"https://api.github.com/users/kgriffs/received_events","type":"User","site_admin":false},"created_at":"2016-05-25T16:56:15Z","updated_at":"2016-05-25T16:56:15Z","body":"We can start with a \"global\" option and add support for per-route options later as needed. \r\n\r\nRegarding form validation rules, it may make sense to be able to attach arbitrary metadata/kwargs to a route that hooks or middleware could then use. Or the validation rules could just be specified directly in a decorators/hook declaration. Sort of like https://github.com/painterjd/stoplight.\r\n\r\n"}}
{"actor":{"display_login":"kgriffs"}}