{"id":37653640,"url":"https://github.com/irvingleonard/simplifiedapp","last_synced_at":"2026-01-16T11:38:09.242Z","repository":{"id":43471693,"uuid":"279488427","full_name":"irvingleonard/simplifiedapp","owner":"irvingleonard","description":"A simple way to run your python code from the CLI.","archived":false,"fork":false,"pushed_at":"2025-06-11T07:05:47.000Z","size":287,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-30T23:36:33.133Z","etag":null,"topics":["cli","ini","json","logging","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/irvingleonard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-07-14T05:11:13.000Z","updated_at":"2024-09-07T15:56:28.000Z","dependencies_parsed_at":"2024-07-23T02:19:20.161Z","dependency_job_id":"d3ff34be-e16f-411b-8f93-2c536bf61ce7","html_url":"https://github.com/irvingleonard/simplifiedapp","commit_stats":{"total_commits":43,"total_committers":1,"mean_commits":43.0,"dds":0.0,"last_synced_commit":"92ac058ed66f2d7cc9f71ac53bbdeddbb57afa66"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/irvingleonard/simplifiedapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irvingleonard%2Fsimplifiedapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irvingleonard%2Fsimplifiedapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irvingleonard%2Fsimplifiedapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irvingleonard%2Fsimplifiedapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/irvingleonard","download_url":"https://codeload.github.com/irvingleonard/simplifiedapp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irvingleonard%2Fsimplifiedapp/sbom","scorecard":{"id":494787,"data":{"date":"2025-08-11","repo":{"name":"github.com/irvingleonard/simplifiedapp","commit":"92c631cbbd59fdb69e3ab898878667b2a2ff5c33"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.5,"checks":[{"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":10,"reason":"no binaries found in the repo","details":null,"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":"Code-Review","score":0,"reason":"Found 0/16 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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:124: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-python-package.dev.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.dev.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-python-package.stable.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/deploy-python-package.stable.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:103: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/validate-package-python.yml:115: update your workflow using https://app.stepsecurity.io/secureworkflow/irvingleonard/simplifiedapp/validate-package-python.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.dev.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.dev.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.dev.yml:100","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.dev.yml:104","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.dev.yml:108","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.stable.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.stable.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.stable.yml:100","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.stable.yml:104","Warn: pipCommand not pinned by hash: .github/workflows/deploy-python-package.stable.yml:108","Warn: pipCommand not pinned by hash: .github/workflows/validate-package-python.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/validate-package-python.yml:38","Warn: pipCommand not pinned by hash: .github/workflows/validate-package-python.yml:42","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  11 third-party GitHubAction dependencies pinned","Info:   0 out of  13 pipCommand dependencies pinned"],"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":"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":"Token-Permissions","score":8,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy-python-package.dev.yml:17","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/deploy-python-package.dev.yml:19","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy-python-package.dev.yml:84","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy-python-package.stable.yml:17","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/deploy-python-package.stable.yml:19","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy-python-package.stable.yml:84","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/validate-package-python.yml:19","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/validate-package-python.yml:20","Warn: jobLevel 'statuses' permission set to 'write': .github/workflows/validate-package-python.yml:21","Warn: no topLevel permission defined: .github/workflows/deploy-python-package.dev.yml:1","Warn: no topLevel permission defined: .github/workflows/deploy-python-package.stable.yml:1","Warn: no topLevel permission defined: .github/workflows/validate-package-python.yml:1"],"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/deploy-python-package.dev.yml:80"],"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.8.0.dev4 not signed: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173975841","Warn: release artifact v0.8.0.dev3 not signed: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173975194","Warn: release artifact v0.8.0.dev2 not signed: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173974435","Warn: release artifact v0.8.0.dev1 not signed: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173974285","Warn: release artifact v0.7.4 not signed: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173976798","Warn: release artifact v0.8.0.dev4 does not have provenance: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173975841","Warn: release artifact v0.8.0.dev3 does not have provenance: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173975194","Warn: release artifact v0.8.0.dev2 does not have provenance: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173974435","Warn: release artifact v0.8.0.dev1 does not have provenance: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173974285","Warn: release artifact v0.7.4 does not have provenance: https://api.github.com/repos/irvingleonard/simplifiedapp/releases/173976798"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T20:12:28.263Z","repository_id":43471693,"created_at":"2025-08-19T20:12:28.263Z","updated_at":"2025-08-19T20:12:28.263Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cli","ini","json","logging","python"],"created_at":"2026-01-16T11:38:09.111Z","updated_at":"2026-01-16T11:38:09.234Z","avatar_url":"https://github.com/irvingleonard.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# simplifiedapp\n\nA simple way to run your python code from the CLI.\n\nThe module uses introspection to try and expose your code to the command line. It won't work in all cases, it depends on the complexity of your code.\n\n### Functions\n\nThe simplest situation is a function (callable). A function might require some parameters and accept other if provided. This is translated into required and optional parameters to argparse. The annotations are translated into type checks otherwise the inputs are expected to be strings (argparse's default behavior). There are some \"parameter names\" that are used internally; if you use such parameter names on your function odds are that there will be issues. Such parameter names include:\n- __simplifiedapp_\n- log_level\n- log_to_syslog\n- input_file\n- json\n\n```\ndef main(self, i_need_this, *args, a_boolean_switch = False, **kwargs):\n\tpass #do stuff\n\nif __name__ == '__main__':\n\tsimplifiedapp.main(main)\n```\n\n### Classes\n\nThe target can also be a class. Subparsers are created for every available and not special method in the class. The class can be \"run\", meaning it will be instantiated and the object returned. While running class subparsers, you must provide the parameters required by `__init__` and the actual method, if any is needed, and you could also provide optional parameters to both.\n\nThe algorithm to detect [class methods](https://docs.python.org/3.10/library/functions.html#classmethod) is rather weak: if your first parameter is called `cls` or `type` (used in the standard library) then it will be treated as a class method; it's not great, it will yield some false possitives and negatives, but is the best we got for the time being. In the same note, \"regular methods\" are expected to have `self` as the first parameter. Every method that doesn't have any of those names in the first parameter will be treated as a [static method](https://docs.python.org/3.10/library/functions.html#staticmethod).\n\n```\nclass MyExampleClass:\n\t'''The example class\n\tThis is the main subject of the module\n\t'''\n\t\n\tdef spring(self, foo, bar = 'initial_value'):\n\t\t'''The spring function\n\t\tSome springing needs to be done\n\t\t'''\n\t\t\n\t\tpass #Do stuff...\n\t\t\n\tdef skip(self, baz = False):\n\t\tpass\n\t\t\n\tdef leap(self, qux = ()):\n\t\tpass\n\nf __name__ == '__main__':\n\tsimplifiedapp.main(MyExampleClass)\n```\n\n### Modules\n\nThe modules can't be \"run\" by themselves, instead they contain subparsers for their classes and functions.\n\nYou just probably want to add something like this in you module's `__main__.py`\n\n\n```\n#!python\n'''An example module\nThis module has an example class for documentation purposes.\n\nThis is the execution module\n'''\n\nimport simplifiedapp\n\ntry:\n\timport mymodule\nexcept ModuleNotFoundError:\n\timport __init__ as mymodule\n\nsimplifiedapp.main(mymodule)\n```\n\n## Docstrings\n\nIt's a good idea to add docstrings to your modules, classes, and functions. Your module's docstrings are parsed to derive descriptions which are used for different purposes. \n\nThe expected format is:\n- the first line in the docstring should be a simple description of your module, just a couple words\n- the second line and up to the first empty line (or the end of the string) could be a paragraph that should include a longer explanation of what the module does.\n\nYou shouldn't use strict line length for the first line (like [PEP 8](https://www.python.org/dev/peps/pep-0008/) suggests) or if you do, make it fit in a single line.\n\n## Versioning\n\nYou should use the `__version__` variable in your module following [PEP 396](https://www.python.org/dev/peps/pep-0396/)\n\nThis will provide the `--version` switch in the command line and can also be used to automate the setuptools call in 'setup.py'.\n\n## Input\n\nThe first step of the run is to build a `configuration` dictionary out of several sources:\n- The CLI arguments -\u003e The module exposes your callable's parameters, which can (or must) be provided via command line\n- The input files -\u003e configuration living in files can be fed via the `--input-file` switch. So far INI and JSON files are supported.\n\n### INI Input\n\nThe code will parse the arguments passed via command line and build a *configuration* dictionary out of it. It will also try to parse the configuration file if it was requested (via `--input-file /path/to/file ini`) which should be a standard [configparser](https://docs.python.org/dev/library/configparser.html) file. If the configuration file is parsed, the **DEFAULT** section values will be converted to a dictionary and merged into the *configuration*; the others sections, if they exist, will be added to the *configuration* under the *section* key, as dictionaries.\n\n### JSON Input\n\nA valid JSON file has an object (`dict`) as the root, which is merged directly into the `configuration` dictionary.\n\n## Execution\n\nWhen you trigger an execution it starts by doing some boilerplate stuff, basically the setup of the logging system (based on the CLI arguments). Then the `configuration` dictionary (with only CLI parameters so far) gets udpated with any `--input-file` provided.\n\nThe configuration values are then fed to the target and a result is expected.\n\nThe result gets a different treatment depending on several factors:\n- If the result is a string, it will be printed \"as is\", not even a line change gets added at the end (default behavior for [print](https://docs.python.org/3/library/functions.html#print)).\n- Otherwise it's printed with [pprint.pprint](https://docs.python.org/dev/library/pprint.html#pprint.pprint)\n- If the `--json` switch was passed, then it gets printed with [json.dumps](https://docs.python.org/dev/library/json.html#json.dumps)\n\n## setuptools\n\nYou can leverage some functions to simplify the packaging of your module. Basically, the `object_metadata` can save you some updating in the `setup.py` file by doing:\n\n```\n#!python\n\"\"\"A setuptools based setup module.\nJust using setuptools to package/install this module\n\"\"\"\n\nimport setuptools\n\nimport simplifiedapp\n\nimport mymodule\n\nsetuptools.setup(\n\turl = 'https://example.com/path/to/my/app/site',\n\tauthor = 'A random coder (me)',\n\tauthor_email = 'arandomcoder@example.com',\n\tlicense='Whatever license you see fits', #You might add some specific license, use the classifiers (next parameter)\n\tclassifiers = [\t#Possible classifiers are documented in https://pypi.org/classifiers/\n\t\t'Some :: Classifier',\n\t\t'Another :: Classifier',\n\t\t'Classifier :: The Third',\n\t\t'Something :: From the PyPI :: URL',\n\t\t'Even :: More :: Weird Looking although Intelligible :: Strings',\n\t],\n\tkeywords = 'some keywords',\n\tpython_requires = '\u003e=3.6',\n\tpackages = setuptools.find_packages(),\n\t\n\t**simplifiedapp.object_metadata(mymodule)\n)\n```\n\nThe name, version, description and long_description parameters are derived from `mymodule`. If those doesn't work odds are that there might be something non-compliant (with the metadata suggestions) in your module.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Firvingleonard%2Fsimplifiedapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Firvingleonard%2Fsimplifiedapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Firvingleonard%2Fsimplifiedapp/lists"}