{"id":19124741,"url":"https://github.com/mitinarseny/flask-request-args-parser","last_synced_at":"2026-01-22T05:32:58.297Z","repository":{"id":57430642,"uuid":"97637772","full_name":"mitinarseny/flask-request-args-parser","owner":"mitinarseny","description":"Pyhton3 package, that implements flask.request args parsing.","archived":false,"fork":false,"pushed_at":"2018-10-31T10:06:24.000Z","size":13,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-22T15:13:47.649Z","etag":null,"topics":["argument-parser","argument-parsing","arguments","flask","flask-restful","parser","parsing","python","python3","request"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mitinarseny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-07-18T19:50:20.000Z","updated_at":"2019-01-10T12:41:47.000Z","dependencies_parsed_at":"2022-08-27T18:33:08.946Z","dependency_job_id":null,"html_url":"https://github.com/mitinarseny/flask-request-args-parser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mitinarseny/flask-request-args-parser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitinarseny%2Fflask-request-args-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitinarseny%2Fflask-request-args-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitinarseny%2Fflask-request-args-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitinarseny%2Fflask-request-args-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitinarseny","download_url":"https://codeload.github.com/mitinarseny/flask-request-args-parser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitinarseny%2Fflask-request-args-parser/sbom","scorecard":{"id":650412,"data":{"date":"2025-08-11","repo":{"name":"github.com/mitinarseny/flask-request-args-parser","commit":"0f6cc3664ebdbeed2f37eef162a60948432f89e4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/15 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: dist/flask_request_args_parser-1.1.0-py2.py3-none-any.whl:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-21T13:22:43.989Z","repository_id":57430642,"created_at":"2025-08-21T13:22:43.990Z","updated_at":"2025-08-21T13:22:43.990Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28656276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argument-parser","argument-parsing","arguments","flask","flask-restful","parser","parsing","python","python3","request"],"created_at":"2024-11-09T05:30:21.150Z","updated_at":"2026-01-22T05:32:58.283Z","avatar_url":"https://github.com/mitinarseny.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flask-request-args-parser\nPython3 package implementing flask.request args parsing.\n\n## Table of Contents\n* [Installiation](#installiation)\n* [Dependencies](#dependencies)\n* [How to use](#how-to-use)\n* [Attributes definition](#attributes-definition)\n* [Example of usage](#example-of-usage)\n\n## Installiation\nUsing pip:\n```bash\npip install flask-request-args-parser\n```\n## Dependencies\n* [Flask](http://flask.pocoo.org)  \n\n## How to use\nSomewhere in your code:\n```python\nfrom flask_request_args_parser import parse_params\n\ndef _param1_validator(v):\n    if v \u003c= 0:\n        return None, '\\'param1\\' must be greater than 0'\n    return v\n\nPARAMS = {\n    'param_name_1': {\n        'type': int,\n        'default': 10,\n        'validators': [\n            _param1_validator,\n            lambda v: v**2\n        ],\n        'locations': ['args'],\n        'required': True,\n    },\n    'param_name_2': {\n        # ...\n    },\n    'param_name_3': {} # just a param without any attributes\n}\n\n\nparams = parse_params(PARAMS)\nparam1 = params['param_name_1']\n```\n## Attributes definition\n\n### Order\nThe order checking attributes is:\n1. [`locations`](#locations)\n1. [`required`](#required)\n1. [`type`](#type)\n1. [`default`](#default)\n1. [`validators`](#validators)\n\n### `locations`\nType: `list[str]`  \nDefault: `['args','json']`  \nThis attribute tells where to look for a param.\nPossible locations: `'args' | 'json' | 'headers' | 'cookies'`.  \nYou can combine locations: `'locations': ['args', 'headers']`.  \n\n### `required`\nType: `bool`  \nIf `required` is `True` and param is missing in given `locations`, Flask will `abort` with `400`, `Missing required param: \u003cparam_name\u003e in \u003clocations\u003e.`.\n    \n### `type`\nType: `class`  \nIf `type` is specified, parser will try to convert param into given type. Otherwise Flask will `abort` with `400`, `Invalid param type: \u003cparam_name\u003e must be \u003cparam_type\u003e, not \u003cinput_type\u003e.`.\n\n### `default`\nType: `object`  \nIf param isn't required and it is not listed in required locations the `default` value will be assigned to this param.\n\n### `validators`  \nType: `list[function | lambda]`\nIf param has `validators`, the input param value will go through all validators in given order and return value of last given validator will be assigned to this param. If at least one of validators returns None and error message, Flask will `abort` with `400`, `Invalid \u003cparam_name\u003e param: \u003c\u003e.`. Here is the illustration:\n```python\ndef v1(v): \n    if v%2!=0:\n        return None, 'must be even'\n    return v\n    \ndef v2(v):\n    if v \u003c= 0:\n        return None, 'must be positive'\n    return v\n\ndef v3(v):\n    return v + 1\n    \nPARAMS = {\n    'p1': {\n        'type': int,\n        'validators': [v1, v2, v3]\n    }\n}\n\nparams = parse_params(PARAMS)\n```\nThis validation will return `v3(v2(v1(\u003cinput_param\u003e)))`  \n\n## Example of usage\n```python\nfrom flask_restful import Resource\nfrom flask_request_args_parser import parse_params\n\n\ndef _limit_validator(v):\n    if not 0 \u003c= v \u003c= 100:\n      return None, '\\'limit\\' must be in [0, 100]'\n    return v\n\ndef _split_validator(v):\n    return v.split(',')\n\n\nclass R(Resource):\n\n    PARAMS = {\n        'GET': {\n            'limit': {\n                'type': int,\n                'default': 20,\n                'valudators: [_limit_validator],\n                'locations': ['args']\n            },\n            'ids': {\n                'type': str,\n                'validators': [\n                    _split_validator,\n                    lambda v: list(map(int,v))\n                ],\n                'locations': ['args']\n            }\n        },\n        'POST': {\n            'headline': {\n                'type': str,\n                'vaildators': [\n                    lambda v: v.lower(),\n                ],\n                'locations': ['json'],\n                'required': True\n            }\n        }\n    }\n\n    def get(self):\n        params = parse_params(self.PARAMS['GET'])\n        limit = params['limit']\n        # do smth\n        return {'response': limit}\n\n    def post(self):\n        params = parse_params(self.PARAMS['POST'])\n        headline = params['headline']\n        # do smth\n        return {\n            'response': {\n                'headline': headline\n            }\n        }\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitinarseny%2Fflask-request-args-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitinarseny%2Fflask-request-args-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitinarseny%2Fflask-request-args-parser/lists"}