{"id":15091281,"url":"https://github.com/montymi/serialpy","last_synced_at":"2026-02-06T12:20:28.140Z","repository":{"id":185704378,"uuid":"606234791","full_name":"montymi/SerialPy","owner":"montymi","description":"Parse large json, toml, or yaml files to perform search and replace operations","archived":false,"fork":false,"pushed_at":"2024-02-15T02:03:54.000Z","size":109,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-03-15T03:55:21.746Z","etag":null,"topics":["config","json","openapi-spec","toml","yaml"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/SerialPy/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/montymi.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,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-02-24T22:55:25.000Z","updated_at":"2024-01-04T03:17:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"3f74a13f-85c4-4e26-aff3-ed370c059dd7","html_url":"https://github.com/montymi/SerialPy","commit_stats":null,"previous_names":["montymi/datagrep","montymi/serialpy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/montymi%2FSerialPy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/montymi%2FSerialPy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/montymi%2FSerialPy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/montymi%2FSerialPy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/montymi","download_url":"https://codeload.github.com/montymi/SerialPy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244945591,"owners_count":20536296,"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","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":["config","json","openapi-spec","toml","yaml"],"created_at":"2024-09-25T10:36:49.732Z","updated_at":"2026-02-06T12:20:28.095Z","avatar_url":"https://github.com/montymi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv id=\"readme-top\"\u003e\u003c/div\u003e\n\n\u003c!-- PROJECT SHIELDS --\u003e\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![GNU License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003eSerialPy v0.1.0\u003c/h1\u003e\n\n  \u003cp align=\"center\"\u003e\n    Precision Data Format Manager\n    ·\n    \u003ca href=\"https://github.com/montymi/SerialPy/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/montymi/SerialPy/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#tasks\"\u003eTasks\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgments\"\u003eAcknowledgments\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\n*SerialPy* is a Python package designed to streamline search and replace operations on data formats: \u003ca style=\"text-decoration:none\" href='https://yaml.org'\u003eyaml\u003c/a\u003e, \u003ca style=\"text-decoration:none\" href=\"https://toml.io/en/\"\u003etoml\u003c/a\u003e, and \u003ca style=\"text-decoration:none\" href=\"https://www.json.org/json-en.html\"\u003ejson\u003c/a\u003e. \nBuilt to use with additional shell scripting to semi-automate workflows involving OpenAPI and Swagger files, making it ideal for companies aiming to maintain consistency within their specification sheets. \nFeatures include `search` and `replace`, allowing for precise control of serial data. *SerialPy* empowers users to ensure accuracy and reliability, making it an invaluable tool for specification sheet maintenance.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\n### Installation\nSimply run:\n```\npip install SerialPy\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- USAGE EXAMPLES --\u003e\n## Usage\nSerialpy supports the `-h` flag at the main and all subcommands so more details can be found there.\n\n### Command-Line Interface (CLI)\nSearch for any key within the data in the given file path that is \"test\" and return a list of values associated with the key.\n```\nserialpy search path/to/file \"test\" --find=\"key\" --ret=\"value\"\n```\nReplace any instance of \"var1\" from the data in the given file path to \"var2\" and return True if successfully written back to the file.\n```\nserialpy replace path/to/file \"var1\" \"var2\"\n```\n\n### Library\nImport the module at the top of your python script.\n\nThe following snippet of code runs `search` on all *values* in `\"path/to/file\"` for 5 and returns all *keys* associated with the value, 5. \n\nThe next line checks to see if the `replace` function successfully converted all instances of 5 in `\"path/to/file\"` with 6 and wrote the changes back into the file.\n```\nfrom serialpy import search, replace\n\nfound = search.values(\"path/to/file\", \"5\", \"keys\") # add False as last argument to disable console printing\nif (replace.all(\"path/to/file\", \"5\", \"6\"):\n  # code to run after successfully replacing 5 with 6\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- TASKS --\u003e\n## Tasks\n\n- [X] Add `replace` feature\n- [X] Add support for `.toml`\n- [ ] Check for `tomllib` upon install **  \n- [X] Update README.md\n- [ ] `search` and `replace` contained within a `Cereal` object that stores serial data\n- [ ] Add support for multiple documents at once\n- [ ] Add project parser to automatically insert supported file types\n\nSee the [open issues](https://github.com/montymi/SerialPy/issues) for a full list of issues and proposed features.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\n1. [Fork the Project](https://docs.github.com/en/get-started/quickstart/fork-a-repo)\n2. Create your Feature/Update Branch (`git checkout -b feature/NewFeature` or `git checkout -b update/Feature`)\n3. Commit your Changes (`git commit -m 'Add some Feature'`)\n4. Push to the Branch (`git push origin feature/NewFeature` or `git push origin update/Feature`)\n5. [Open a Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the GPL-3.0 License. See [`LICENSE.txt`](https://github.com/montymi/SerialPy/blob/main/LICENSE.txt) for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nMichael Montanaro - [LinkedIn](https://www.linkedin.com/in/michael-montanaro/) - mcmontanaro01@gmail.com\n\nProject Link: [https://github.com/montymi/SerialPy](https://github.com/montymi/SerialPy)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- ACKNOWLEDGMENTS --\u003e\n## Acknowledgments\n\n* [OpenAPI/Swagger Testing](https://apitools.dev/swagger-cli/)\n* [Publishing to PyPi Tutorial](https://realpython.com/pypi-publish-python-package/)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/montymi/SerialPy.svg?style=for-the-badge\n[contributors-url]: https://github.com/montymi/SerialPy/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/montymi/SerialPy.svg?style=for-the-badge\n[forks-url]: https://github.com/montymi/SerialPy/network/members\n[stars-shield]: https://img.shields.io/github/stars/montymi/SerialPy.svg?style=for-the-badge\n[stars-url]: https://github.com/montymi/SerialPy/stargazers\n[issues-shield]: https://img.shields.io/github/issues/montymi/SerialPy.svg?style=for-the-badge\n[issues-url]: https://github.com/montymi/SerialPy/issues\n[license-shield]: https://img.shields.io/github/license/montymi/SerialPy.svg?style=for-the-badge\n[license-url]: https://github.com/montymi/SerialPy/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://linkedin.com/in/michael-montanaro\n[Next.js]: https://img.shields.io/badge/next.js-000000?style=for-the-badge\u0026logo=nextdotjs\u0026logoColor=white\n[Next-url]: https://nextjs.org/\n[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB\n[React-url]: https://reactjs.org/\n[Vue.js]: https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge\u0026logo=vuedotjs\u0026logoColor=4FC08D\n[Vue-url]: https://vuejs.org/\n[Angular.io]: https://img.shields.io/badge/Angular-DD0031?style=for-the-badge\u0026logo=angular\u0026logoColor=white\n[Angular-url]: https://angular.io/\n[Svelte.dev]: https://img.shields.io/badge/Svelte-4A4A55?style=for-the-badge\u0026logo=svelte\u0026logoColor=FF3E00\n[Svelte-url]: https://svelte.dev/\n[Laravel.com]: https://img.shields.io/badge/Laravel-FF2D20?style=for-the-badge\u0026logo=laravel\u0026logoColor=white\n[Laravel-url]: https://laravel.com\n[Bootstrap.com]: https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge\u0026logo=bootstrap\u0026logoColor=white\n[Bootstrap-url]: https://getbootstrap.com\n[JQuery.com]: https://img.shields.io/badge/jQuery-0769AD?style=for-the-badge\u0026logo=jquery\u0026logoColor=white\n[JQuery-url]: https://jquery.com \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmontymi%2Fserialpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmontymi%2Fserialpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmontymi%2Fserialpy/lists"}