rclone-api 1.1.29__tar.gz → 1.1.30__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. {rclone_api-1.1.29 → rclone_api-1.1.30}/PKG-INFO +1 -1
  2. {rclone_api-1.1.29 → rclone_api-1.1.30}/pyproject.toml +1 -1
  3. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/rclone.py +10 -1
  4. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api.egg-info/PKG-INFO +1 -1
  5. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api.egg-info/SOURCES.txt +1 -1
  6. rclone_api-1.1.29/tests/test_copy_range.py → rclone_api-1.1.30/tests/test_copy_bytes.py +22 -0
  7. {rclone_api-1.1.29 → rclone_api-1.1.30}/.aiderignore +0 -0
  8. {rclone_api-1.1.29 → rclone_api-1.1.30}/.github/workflows/lint.yml +0 -0
  9. {rclone_api-1.1.29 → rclone_api-1.1.30}/.github/workflows/push_macos.yml +0 -0
  10. {rclone_api-1.1.29 → rclone_api-1.1.30}/.github/workflows/push_ubuntu.yml +0 -0
  11. {rclone_api-1.1.29 → rclone_api-1.1.30}/.github/workflows/push_win.yml +0 -0
  12. {rclone_api-1.1.29 → rclone_api-1.1.30}/.gitignore +0 -0
  13. {rclone_api-1.1.29 → rclone_api-1.1.30}/.pylintrc +0 -0
  14. {rclone_api-1.1.29 → rclone_api-1.1.30}/.vscode/launch.json +0 -0
  15. {rclone_api-1.1.29 → rclone_api-1.1.30}/.vscode/settings.json +0 -0
  16. {rclone_api-1.1.29 → rclone_api-1.1.30}/.vscode/tasks.json +0 -0
  17. {rclone_api-1.1.29 → rclone_api-1.1.30}/LICENSE +0 -0
  18. {rclone_api-1.1.29 → rclone_api-1.1.30}/MANIFEST.in +0 -0
  19. {rclone_api-1.1.29 → rclone_api-1.1.30}/README.md +0 -0
  20. {rclone_api-1.1.29 → rclone_api-1.1.30}/clean +0 -0
  21. {rclone_api-1.1.29 → rclone_api-1.1.30}/install +0 -0
  22. {rclone_api-1.1.29 → rclone_api-1.1.30}/lint +0 -0
  23. {rclone_api-1.1.29 → rclone_api-1.1.30}/requirements.testing.txt +0 -0
  24. {rclone_api-1.1.29 → rclone_api-1.1.30}/setup.cfg +0 -0
  25. {rclone_api-1.1.29 → rclone_api-1.1.30}/setup.py +0 -0
  26. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/__init__.py +0 -0
  27. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/assets/example.txt +0 -0
  28. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/cli.py +0 -0
  29. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  30. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/cmd/list_files.py +0 -0
  31. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/completed_process.py +0 -0
  32. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/config.py +0 -0
  33. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/convert.py +0 -0
  34. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/deprecated.py +0 -0
  35. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/diff.py +0 -0
  36. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/dir.py +0 -0
  37. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/dir_listing.py +0 -0
  38. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/exec.py +0 -0
  39. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/experimental/flags.py +0 -0
  40. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/experimental/flags_base.py +0 -0
  41. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/file.py +0 -0
  42. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/filelist.py +0 -0
  43. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/group_files.py +0 -0
  44. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/mount.py +0 -0
  45. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/process.py +0 -0
  46. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/remote.py +0 -0
  47. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/rpath.py +0 -0
  48. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/api.py +0 -0
  49. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/basic_ops.py +0 -0
  50. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/chunk_file.py +0 -0
  51. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/chunk_types.py +0 -0
  52. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/create.py +0 -0
  53. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/types.py +0 -0
  54. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/s3/upload_file_multipart.py +0 -0
  55. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/scan_missing_folders.py +0 -0
  56. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/types.py +0 -0
  57. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/util.py +0 -0
  58. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api/walk.py +0 -0
  59. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  60. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api.egg-info/entry_points.txt +0 -0
  61. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api.egg-info/requires.txt +0 -0
  62. {rclone_api-1.1.29 → rclone_api-1.1.30}/src/rclone_api.egg-info/top_level.txt +0 -0
  63. {rclone_api-1.1.29 → rclone_api-1.1.30}/test +0 -0
  64. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/archive/test_paramiko.py.disabled +0 -0
  65. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_cmd_list_files.py +0 -0
  66. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_copy.py +0 -0
  67. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_copy_file_resumable_s3.py +0 -0
  68. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_copy_files.py +0 -0
  69. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_diff.py +0 -0
  70. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_group_files.py +0 -0
  71. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_is_synced.py +0 -0
  72. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_ls.py +0 -0
  73. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_mount.py +0 -0
  74. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_mount_s3.py +0 -0
  75. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_obscure.py +0 -0
  76. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_rclone_config.py +0 -0
  77. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_remote_control.py +0 -0
  78. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_remotes.py +0 -0
  79. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_s3.py +0 -0
  80. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_scan_missing_folders.py +0 -0
  81. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_size_files.py +0 -0
  82. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_size_suffix.py +0 -0
  83. {rclone_api-1.1.29 → rclone_api-1.1.30}/tests/test_walk.py +0 -0
  84. {rclone_api-1.1.29 → rclone_api-1.1.30}/tox.ini +0 -0
  85. {rclone_api-1.1.29 → rclone_api-1.1.30}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.29
3
+ Version: 1.1.30
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -22,7 +22,7 @@ dependencies = [
22
22
  ]
23
23
 
24
24
  # Change this with the version number bump.
25
- version = "1.1.29"
25
+ version = "1.1.30"
26
26
 
27
27
  [tool.setuptools]
28
28
  package-dir = {"" = "src"}
@@ -817,6 +817,9 @@ class Rclone:
817
817
  offset: int,
818
818
  length: int,
819
819
  transfers: int = 16,
820
+ outfile: (
821
+ Path | None
822
+ ) = None, # If supplied then bytes are written to this file and success returns bytes(0)
820
823
  ) -> bytes | Exception:
821
824
  """Copy bytes from a file to another file."""
822
825
  from rclone_api.util import random_str
@@ -851,7 +854,13 @@ class Rclone:
851
854
  with open(src_file_mnt, "rb") as f:
852
855
  f.seek(offset)
853
856
  data = f.read(length)
854
- return data
857
+ if outfile is None:
858
+ return data
859
+ with open(outfile, "wb") as out:
860
+ out.write(data)
861
+ del data
862
+ return bytes(0)
863
+
855
864
  except Exception as e:
856
865
  return e
857
866
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.29
3
+ Version: 1.1.30
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -62,9 +62,9 @@ src/rclone_api/s3/types.py
62
62
  src/rclone_api/s3/upload_file_multipart.py
63
63
  tests/test_cmd_list_files.py
64
64
  tests/test_copy.py
65
+ tests/test_copy_bytes.py
65
66
  tests/test_copy_file_resumable_s3.py
66
67
  tests/test_copy_files.py
67
- tests/test_copy_range.py
68
68
  tests/test_diff.py
69
69
  tests/test_group_files.py
70
70
  tests/test_is_synced.py
@@ -3,7 +3,9 @@ Unit test file.
3
3
  """
4
4
 
5
5
  import os
6
+ import tempfile
6
7
  import unittest
8
+ from pathlib import Path
7
9
 
8
10
  from dotenv import load_dotenv
9
11
 
@@ -70,6 +72,26 @@ class RcloneCopyBytesTester(unittest.TestCase):
70
72
  len(bytes_or_err), 1024 * 1024
71
73
  ) # , f"Length: {len(bytes_or_err)}"
72
74
 
75
+ def test_copy_bytes_to_temp_file(self) -> None:
76
+
77
+ with tempfile.TemporaryDirectory() as tmpdir:
78
+ tmp = Path(tmpdir) / "tmp.mp4"
79
+ rclone = Rclone(_generate_rclone_config())
80
+ bytes_or_err: bytes | Exception = rclone.copy_bytes(
81
+ src="dst:rclone-api-unit-test/zachs_video/breaking_ai_mind.mp4",
82
+ offset=0,
83
+ length=1024 * 1024,
84
+ outfile=tmp,
85
+ )
86
+ if isinstance(bytes_or_err, Exception):
87
+ print(bytes_or_err)
88
+ self.fail(f"Error: {bytes_or_err}")
89
+ assert isinstance(bytes_or_err, bytes)
90
+ self.assertEqual(len(bytes_or_err), 0)
91
+ self.assertTrue(tmp.exists())
92
+ tmp_size = tmp.stat().st_size
93
+ self.assertEqual(tmp_size, 1024 * 1024)
94
+
73
95
 
74
96
  if __name__ == "__main__":
75
97
  unittest.main()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes