{"id":32139546,"url":"https://github.com/marshallward/f90nml","last_synced_at":"2025-10-21T05:56:22.845Z","repository":{"id":553174,"uuid":"17232139","full_name":"marshallward/f90nml","owner":"marshallward","description":"A Python module and command line tool for working with Fortran namelists","archived":false,"fork":false,"pushed_at":"2025-10-07T15:04:38.000Z","size":782,"stargazers_count":145,"open_issues_count":27,"forks_count":56,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-10-10T18:06:27.821Z","etag":null,"topics":["fortran","namelist","parser","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marshallward.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG","contributing":null,"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":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-02-27T01:20:48.000Z","updated_at":"2025-10-10T16:29:41.000Z","dependencies_parsed_at":"2024-06-11T17:06:35.610Z","dependency_job_id":"27c687bb-bfe0-42d9-8b50-df107c9cd742","html_url":"https://github.com/marshallward/f90nml","commit_stats":{"total_commits":744,"total_committers":26,"mean_commits":"28.615384615384617","dds":0.2231182795698925,"last_synced_commit":"a6556fb2c57e1b178be44c8c1731ba0d3f3a259f"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/marshallward/f90nml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marshallward%2Ff90nml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marshallward%2Ff90nml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marshallward%2Ff90nml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marshallward%2Ff90nml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marshallward","download_url":"https://codeload.github.com/marshallward/f90nml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marshallward%2Ff90nml/sbom","scorecard":{"id":621210,"data":{"date":"2025-08-11","repo":{"name":"github.com/marshallward/f90nml","commit":"91558fed510a3b8e8496239029d23edd08557568"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.5,"checks":[{"name":"Maintained","score":6,"reason":"6 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Code-Review","score":1,"reason":"Found 3/25 approved changesets -- score normalized to 1","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/testing.yaml:1","Info: no jobLevel write permissions found"],"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":"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":"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/testing.yaml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/marshallward/f90nml/testing.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/testing.yaml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/marshallward/f90nml/testing.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/testing.yaml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/marshallward/f90nml/testing.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/testing.yaml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/marshallward/f90nml/testing.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/testing.yaml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/marshallward/f90nml/testing.yaml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/testing.yaml:21","Warn: pipCommand not pinned by hash: .github/workflows/testing.yaml:22","Warn: pipCommand not pinned by hash: .github/workflows/testing.yaml:23","Warn: downloadThenRun not pinned by hash: .github/workflows/testing.yaml:31","Warn: pipCommand not pinned by hash: .github/workflows/testing.yaml:68","Warn: pipCommand not pinned by hash: .github/workflows/testing.yaml:69","Warn: pipCommand not pinned by hash: .github/workflows/testing.yaml:70","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   6 pipCommand dependencies pinned","Info:   0 out of   1 downloadThenRun 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":"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":"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: Apache License 2.0: 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":"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":"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":"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 10 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-21T05:16:26.950Z","repository_id":553174,"created_at":"2025-08-21T05:16:26.950Z","updated_at":"2025-08-21T05:16:26.950Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006772,"owners_count":26084178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"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":["fortran","namelist","parser","python"],"created_at":"2025-10-21T05:56:18.526Z","updated_at":"2025-10-21T05:56:22.828Z","avatar_url":"https://github.com/marshallward.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"=========================================================\nf90nml - A Fortran namelist parser, generator, and editor\n=========================================================\n\nA Python module and command line tool for parsing Fortran namelist files\n\n.. image:: https://github.com/marshallward/f90nml/actions/workflows/testing.yaml/badge.svg?branch=main\n   :target: https://github.com/marshallward/f90nml/actions/workflows/testing.yaml\n\n.. image:: https://codecov.io/gh/marshallward/f90nml/graph/badge.svg?token=Ljh25jSMay\n   :target: https://codecov.io/gh/marshallward/f90nml\n\n.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3245482.svg\n   :target: https://doi.org/10.5281/zenodo.3245482\n\n\nDocumentation\n=============\n\nThe documentation for ``f90nml`` is available from Read The Docs.\n\n   http://f90nml.readthedocs.org/en/latest/\n\n\nAbout f90nml\n============\n\n``f90nml`` is a Python module and command line tool that provides a simple\ninterface for the reading, writing, and modifying Fortran namelist files.\n\nA namelist file is parsed and converted into a ``Namelist`` object, which\nbehaves like a Python ``dict``.  Values are converted from Fortran data types\nto equivalent primitive Python types.\n\nThe command line tool ``f90nml`` can be used to modify individual values inside\nof a shell environment.  It can also be used to convert the data between\nnamelists and other configuration formats.  JSON and YAML formats are currently\nsupported.\n\n\nQuick usage guide\n=================\n\nTo read a namelist file ``sample.nml`` which contains the following namelists:\n\n.. code-block:: fortran\n\n   \u0026config_nml\n      input = 'wind.nc'\n      steps = 864\n      layout = 8, 16\n      visc = 1.0e-4\n      use_biharmonic = .false.\n   /\n\nwe would use the following script:\n\n.. code:: python\n\n   import f90nml\n   nml = f90nml.read('sample.nml')\n\nwhich would would point ``nml`` to the following ``dict``:\n\n.. code:: python\n\n   nml = {\n       'config_nml': {\n           'input': 'wind.nc',\n           'steps': 864,\n           'layout': [8, 16],\n           'visc': 0.0001,\n           'use_biharmonic': False\n       }\n   }\n\nFile objects can also be used as inputs:\n\n.. code:: python\n\n   with open('sample.nml') as nml_file:\n       nml = f90nml.read(nml_file)\n\nTo modify one of the values, say ``steps``, and save the output, manipulate the\n``nml`` contents and write to disk using the ``write`` function:\n\n.. code:: python\n\n   nml['config_nml']['steps'] = 432\n   nml.write('new_sample.nml')\n\nNamelists can also be saved to file objects:\n\n.. code:: python\n\n   with open('target.nml') as nml_file:\n      nml.write(nml_file)\n\nTo modify a namelist but preserve its comments and formatting, create a\nnamelist patch and apply it to a target file using the ``patch`` function:\n\n.. code:: python\n\n   patch_nml = {'config_nml': {'visc': 1e-6}}\n   f90nml.patch('sample.nml', patch_nml, 'new_sample.nml')\n\n\nCommand line interface\n----------------------\n\nA command line tool is provided to manipulate namelist files within the shell:\n\n.. code:: sh\n\n   $ f90nml config.nml -g config_nml -v steps=432\n\n.. code-block:: fortran\n\n   \u0026config_nml\n      input = 'wind.nc'\n      steps = 432\n      layout = 8, 16\n      visc = 1.0e-4\n      use_biharmonic = .false.\n   /\n\nSee the documentation for details.\n\n\nInstallation\n============\n\n``f90nml`` is available on PyPI and can be installed via pip::\n\n   $ pip install f90nml\n\nThe latest version of ``f90nml`` can be installed from source::\n\n   $ git clone https://github.com/marshallward/f90nml.git\n   $ cd f90nml\n   $ pip install .\n\nconda\n-----\n\nThere is a conda-forge feedstock (not maintained by the author)::\n\n    $ conda install -c conda-forge f90nml\n\nInformation on supported versions and platforms, and detailed installation\ninstructions using ``conda`` and ``conda-forge`` is available here:\n\n   https://github.com/conda-forge/f90nml-feedstock\n\n\nPackage distribution\n--------------------\n\n``f90nml`` is not distributed through any official packaging tools, but it is\navailable on Arch Linux via the AUR::\n\n   $ git clone https://aur.archlinux.org/python-f90nml.git\n   $ cd python-f90nml\n   $ makepkg -sri\n\nVolunteers are welcome to submit and maintain ``f90nml`` on other\ndistributions.\n\n\nLocal install\n-------------\n\nUsers without install privileges can append the ``--user`` flag to ``pip`` from\nthe top ``f90nml`` directory::\n\n   $ pip install --user .\n\nIf pip is not available, then ``setup.py`` can still be used::\n\n   $ python setup.py install --user\n\nWhen using ``setup.py`` locally, some users have reported that ``--prefix=``\nmay need to be appended to the command::\n\n   $ python setup.py install --user --prefix=\n\n\nYAML support\n------------\n\nThe command line tool offers support for conversion between namelists and YAML\nformatted output.  If PyYAML is already installed, then no other steps are\nrequired.  To require YAML support, install the ``yaml`` extras package::\n\n   $ pip install f90nml[yaml]\n\nTo install as a user::\n\n   $ pip install --user .[yaml]\n\n\nContributing to ``f90nml``\n==========================\n\nUsers are welcome to submit bug reports, feature requests, and code\ncontributions to this project through GitHub.  More information is available in\nthe `Contributing`_ guidelines.\n\n.. _Contributing: http://f90nml.readthedocs.org/en/latest/contributing.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarshallward%2Ff90nml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarshallward%2Ff90nml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarshallward%2Ff90nml/lists"}