Repository: andyil/s3shutil (language: python)

Issue:
update from master



Discussion / hints:

Fix patch:
diff --git a/README.rst b/README.rst
index 7dab0fd..b12098d 100644
--- a/README.rst
+++ b/README.rst
@@ -1,7 +1,7 @@
 ===========================================================
 Python library to copy, sync and move files to and from s3
 ===========================================================
-|Unittests| |License| |Downloads| |Language|
+|Unittests| |License| |Downloads| |Language| |PyVersions|
 
 .. |Unittests| image:: https://github.com/andyil/s3shutil/actions/workflows/unitests.yml/badge.svg
     
@@ -13,6 +13,8 @@ Python library to copy, sync and move files to and from s3
 
 .. |Language| image:: https://img.shields.io/github/languages/top/andyil/s3shutil
 
+.. |PyVersions| image:: https://img.shields.io/pypi/pyversions/s3shutil.svg
+
 **s3shutil is the easiest to use and fastest way of moving around directories and files in s3.**
 
 
@@ -63,14 +65,14 @@ Using s3shutil is super easy:
 .. code-block:: python
 
     # download a tree from s3
-    s3shutil.copytree('s3://bucket/remote/files/', '/home/myuser/my-directory/')
+    s3shutil.copytree('s3://bucket/my/path', '/home/myuser/files/')
 
     # upload a tree to s3
-    s3shutil.copytree('/home/myuser/documents', 's3://bucket/my-files/documents/')
+    s3shutil.copytree('/home/users/pics/', 's3://bucket/path/archive/')
 
     # copy between two s3 locations
     # same or different bucket
-    s3shutil.copytree('s3://other-bucket/source-files/whatever/', 's3://bucket/my-files/documents/')
+    s3shutil.copytree('s3://bucket2/files/someth/', 's3://bucket1/backup/old/')
 
     # delete (recursively) entire prefix
     s3shutil.rmtree('s3://bucket/my-files/documents/')
@@ -85,13 +87,13 @@ Also deletes extra files.
 .. code-block:: python
 
     # sync download
-    s3shutil.tree_sync('s3://bucket/my-files/documents/', '/home/myuser/documents')
+    s3shutil.tree_sync('s3://bucket/files/docs/', '/home/myuser/docs')
 
     # sync upload
-    s3shutil.tree_sync('/home/myuser/documents', 's3://bucket/my-files/documents/')
+    s3shutil.tree_sync('/home/myuser/files/', 's3://bucket/files/docs-v2/')
 
     # sync two bucket locations
-    s3shutil.tree_sync('s3://bucket/my-files/documents/', 's3://another-bucket/a/b/c')
+    s3shutil.tree_sync('s3://bucket/files/docs/', 's3://bucket2/a/b/c')
 
 
 Conclusions
@@ -99,6 +101,32 @@ Conclusions
 s3shutil will notice alone if the location is s3 (starts with s3://) or not
 All operations have a similar string based API of powerfull one liners
 
+
+Test Matrix
+~~~~~~~~~~~~~~
+s3shutil is thoroughly unit tested in all the combinations of:
+
+Python Versions:
+
++ 3.12
++ 3.11 
++ 3.10
++ 3.9
++ 3.8
++ 3.7
+
+And boto3 Versions: 
+
++ 1.33
++ 1.30
++ 1.28
++ 1.27
++ 1.26
++ 1.25
++ 1.24
++ 1.23
+
+
 Contact
 ~~~~~~~~~~~~~~
 Just use it! You can send an email as well `andyworms@gmail.com`.
diff --git a/setup.py b/setup.py
index 398a73f..6f70fa3 100644
--- a/setup.py
+++ b/setup.py
@@ -14,20 +14,17 @@
   keywords = ['aws', 's3', 'cloud', 'storage', 'shutil', 'network'],
   install_requires=['boto3'],
   classifiers=[
-    'Development Status :: 3 - Alpha',
+    'Development Status :: 4 - Beta',
     'Intended Audience :: Developers',
     'Intended Audience :: Information Technology',
     'Intended Audience :: System Administrators',
     'Topic :: Internet',
     'License :: OSI Approved :: MIT License',
-    'Programming Language :: Python :: 3',
-    'Programming Language :: Python :: 3.4',
-    'Programming Language :: Python :: 3.5',
-    'Programming Language :: Python :: 3.6',
+    'Programming Language :: Python :: 3.7',
     'Programming Language :: Python :: 3.8',
     'Programming Language :: Python :: 3.9',
     'Programming Language :: Python :: 3.10',
     'Programming Language :: Python :: 3.11',
     'Programming Language :: Python :: 3.12',
   ],
-)
\ No newline at end of file
+)
diff --git a/touch b/touch
new file mode 100644
index 0000000..e9ee724
--- /dev/null
+++ b/touch
@@ -0,0 +1,1 @@
+touch 2
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..752102d
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,20 @@
+# content of: tox.ini , put in same dir as setup.py
+[tox]
+envlist = py3{7,8,9,10,11,12}-boto3{33,28,27,26,25,24,23}
+
+[testenv]
+# install pytest in the virtualenv where commands will be executed
+deps = 
+    deepdiff
+    boto333: boto3~=1.33.0
+    boto330: boto3~=1.30.0
+    boto328: boto3~=1.28.0
+    boto327: boto3~=1.27.0
+    boto326: boto3~=1.26.0
+    boto325: boto3~=1.25.0
+    boto324: boto3~=1.24.0
+    boto323: boto3~=1.23.0
+
+
+commands =
+    python -m unittests.short_tests


Test patch:
diff --git a/.github/workflows/unitests.yml b/.github/workflows/unitests.yml
index ecf26c3..bb94db9 100644
--- a/.github/workflows/unitests.yml
+++ b/.github/workflows/unitests.yml
@@ -25,14 +25,34 @@ jobs:
         role-to-assume: arn:aws:iam::175267656368:role/github-actions-Role-AClkp2fLHlq1
         aws-region: us-east-2
     - uses: actions/checkout@v3
+    - name: Set up Python 3.12
+      uses: actions/setup-python@v3
+      with:
+        python-version: "3.12"
+    - name: Set up Python 3.11
+      uses: actions/setup-python@v3
+      with:
+        python-version: "3.11"
     - name: Set up Python 3.10
       uses: actions/setup-python@v3
       with:
         python-version: "3.10"
+    - name: Set up Python 3.9
+      uses: actions/setup-python@v3
+      with:
+        python-version: "3.9"
+    - name: Set up Python 3.8
+      uses: actions/setup-python@v3
+      with:
+        python-version: "3.8"
+    - name: Set up Python 3.7
+      uses: actions/setup-python@v3
+      with:
+        python-version: "3.7"
     - name: Install dependencies
       run: |
-        python -m pip install boto3 deepdiff
-
-    - name: Run unit tests
+        python -m pip install tox
+    - name: tox
       run: |
-        python -m unittests.tests
+        tox --parallel 20
+    
diff --git a/unittests/short_tests.py b/unittests/short_tests.py
new file mode 100644
index 0000000..6577c44
--- /dev/null
+++ b/unittests/short_tests.py
@@ -0,0 +1,43 @@
+import unittest
+import s3shutil
+from unittests import s3testhelp
+import tempfile
+import shutil
+import deepdiff
+import os
+import random
+import logging
+import sys
+
+eng = logging.getLogger('eng')
+logging.getLogger().setLevel(logging.WARN)
+eng.setLevel(logging.INFO)
+logging.basicConfig(stream=sys.stdout, format='%(levelname)s:%(threadName)s:%(message)s')
+
+class ShortTestS3Shutil(unittest.TestCase):
+
+    def setUp(self):
+        print('setup')
+        
+    
+
+    def tearDown(self):
+        print('teardown')
+
+
+        
+
+    def testA(self):
+        print('test-a')
+
+    def testB(self):
+        print('test-b')
+
+
+
+        
+
+   
+
+if __name__ == '__main__':
+    unittest.main()