{"id":15940946,"url":"https://github.com/ofek/spry","last_synced_at":"2025-10-05T16:15:16.198Z","repository":{"id":32935252,"uuid":"36531224","full_name":"ofek/spry","owner":"ofek","description":"Modern file transfer utility supporting HTTPS \u0026 SFTP.","archived":false,"fork":false,"pushed_at":"2016-10-17T01:56:19.000Z","size":24,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-08T01:29:29.819Z","etag":null,"topics":[],"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/ofek.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.txt","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":"2015-05-29T21:56:06.000Z","updated_at":"2023-05-24T11:51:08.000Z","dependencies_parsed_at":"2022-08-07T18:30:10.870Z","dependency_job_id":null,"html_url":"https://github.com/ofek/spry","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ofek/spry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofek%2Fspry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofek%2Fspry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofek%2Fspry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofek%2Fspry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ofek","download_url":"https://codeload.github.com/ofek/spry/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofek%2Fspry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278479627,"owners_count":25993893,"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-05T02:00:06.059Z","response_time":54,"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":[],"created_at":"2024-10-07T07:01:47.366Z","updated_at":"2025-10-05T16:15:16.171Z","avatar_url":"https://github.com/ofek.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Spry - The protocols you know, made better.\n===========================================\n\nSpry provides a cross-platform API, and corresponding CLI, for getting \u0026 sending\nfiles over HTTP(S) \u0026 SFTP. Building on top of `Requests`_ and `Paramiko`_, it adds many\nconvenient features such as accelerated and parallel transfers, speed limiting,\nand session management allowing pause/resume functionally and the ability to\ncontinue incomplete or previously stopped transfers.\n\nWhy?\n----\n\n* **Sessions:** *The web is fragile and wire time is precious.* Anything can happen\n  during file transfers, especially when dealing with large files or directories.\n  Therefore, it is useful to continue a failed transfer from right where it left off.\n  This saves the redundant transfer of data and, in many cases, money.\n\n* **Acceleration:** *Your time is also precious.* Due to such things as the bandwidth-delay\n  product, latency, server imposed connection limits, etc., you are unlikely to be utilizing\n  the majority of your bandwidth. There are some hacky remedies such as manipulating the TCP\n  window scale option, but those are complicated and generally do more harm than good. It\n  turns out the optimal solution is simply leveraging server's `byte serving`_ capabilities\n  and request parts concurrently. The same holds true for SFTP via seeking.\n\nQuickstart\n----------\n\nLet's see how we would get the latest Ubuntu desktop release:\n\nAPI\n^^^\n\n.. code-block:: python\n\n    \u003e\u003e\u003e from spry import HTTPSession\n    \u003e\u003e\u003e http = HTTPSession()\n    \u003e\u003e\u003e ubuntu_iso = http.get(\n            'http://releases.ubuntu.com/16.04.1/ubuntu-16.04.1-desktop-amd64.iso',\n            './ubuntu.iso'\n        )\n    \u003e\u003e\u003e http.run()\n\n.. _Requests: https://github.com/kennethreitz/requests\n.. _Paramiko: https://github.com/paramiko/paramiko/\n.. _byte serving: https://en.wikipedia.org/wiki/Byte_serving\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fofek%2Fspry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fofek%2Fspry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fofek%2Fspry/lists"}