SmugMug的命令行工具
smugcli的Python项目详细描述
蓝精灵
SmugMug的命令行工具,用于自动将本地文件夹层次结构与SmugMug帐户同步。
使用smugmug v2 api实现。
使用Python2.7、3.4、3.5、3.6、3.7和3.8进行测试。
安装
pip install smugcli
示例用法
要使用此命令行工具,您需要通过访问https://api.smugmug.com/api/developer/apply来请求自己的api密钥。使用您的密钥和密钥,使用以下命令登录smugcli:
$ ./smugcli.py login --key=<key> --secret=<secret>
这是一次性手术。从现在起,smugcli将能够访问您的smugmug帐户。要注销,请运行命令:$ ./smugcli.py logout
您可以通过以下操作列出SmugMug帐户的内容:
$ ./smugcli.py ls
Photography
Portfolio
Other
$ ./smugcli.py ls Photography
2014
2015
2016
$ ./smugcli.py ls Photography/2015
Photoshoot with Dave
请注意,smugcli还可以通过使用--user
参数来访问其他公共smugmug帐户:
$ ./smugcli.py ls -u <username>
可以使用mkdir
命令创建文件夹:
$ ./smugcli.py mkdir Photography/2017
同样,可以通过以下操作创建相册:
$ ./smugcli.py mkalbum 'Photography/2017/My new album'
要将照片上载到相册,请运行:
$ ./smugcli.py upload local/folder/*.jpg 'Photography/2017/My new album'
最后,最棒的特性是,您可以使用sync
命令将整个本地文件夹层次结构同步到smugmug帐户:
$ ./smugcli.py sync local/folder remote/folder
Creating Folder "remote/folder/2015".
Creating Album "remote/folder/2015/2015-08-03, Mary's Wedding".
Uploading "local/folder/2015/2015-08-03, Mary's Wedding/DSC_0001.JPG"
Uploading "local/folder/2015/2015-08-03, Mary's Wedding/DSC_0002.JPG"
Uploading "local/folder/2015/2015-08-03, Mary's Wedding/DSC_0003.JPG"
...
Creating Album "remote/folder/2015/2015-09-10, Andy's Photoshoot"
Uploading "local/folder/2015/2015-09-10, Andy's Photoshoot/DSC_0043.JPG"
Uploading "local/folder/2015/2015-09-10, Andy's Photoshoot/DSC_0052.JPG"
...
如果本地文件可能已更新,则可以重新执行sync命令来更新远程相册。只会重新上载更改的文件。
可以在同一操作中同步多个源,最后一个参数是目标文件夹,其他参数是源:
$ ./smugcli.py sync 2016 2017 2018 remote/folder
Syncing:
2016
2017
2018
to SmugMug folder "remote/folder"',
...
$ ./smugcli.py sync 201* remote/folder
...
源文件同步到目标SmugMug相册,源文件夹递归同步到目标SmugMug文件夹。对于具有尾随路径分隔符(“/”或“\”取决于操作系统)的源文件夹,只同步文件夹的内容,跳过文件夹本身(相当于执行folder/*
)。这意味着smugcli.py sync src/album dst
等同于smugcli.py sync src/album/ dst/album
。如果没有指定源或目标,smugcli默认将当前文件夹同步到smugmug用户的根目录。
sync命令使用多个线程来加速文件扫描和上载。 您可能需要调整smugcli使用的线程数,具体取决于 机器的性能。例如:
$ ./smugcli.py sync local/folder remote/folder --folder_threads=4 --file_threads=8 --upload_threads=2
folder_threads
控制在中处理的相册文件夹数
平行的。file_threads
指定从磁盘读取的文件数
并与服务器端版本进行了并行比较。upload_threads
控件
将内容发送到时允许的并行上载操作数
蓝精灵。请记住,过多或过少的线程可能会对
表演。还要记住增加文件线程或上传线程
意味着更多的文件将同时加载到内存中。如果你有
许多大的视频文件,同时加载太多可能会占用系统的
资源。
当您对使用某些线程计数的性能感到满意时,可以 保存这些首选项,以便下次将其用作默认设置:
$ ./smugcli.py sync --set_defaults --folder_threads=4 --file_threads=8 --upload_threads=2
要从同步操作中排除路径,请运行命令:
$ ./smugcli.py ignore local/folder/export-tmp
要撤消此操作,您可以运行:
$ ./smugcli.py include local/folder/export-tmp
运行测试
请阅读,自行承担风险运行单元测试:smugcli的单元测试使用登录的用户帐户在smugmug上运行实际的命令。所有操作都应该在smugmug帐户根目录中的__smugcli_unit_tests__
子文件夹中执行。当/如果测试完成,应该自动删除此文件夹。如果有疑问,请执行smugcli.py logout && smugcli.py login
,并使用测试帐户。
smugcli使用所有支持的python解释器版本来运行测试。通过运行:
$ tox
要只运行一个特定的python版本,例如python 3.7,请执行以下操作:
$ tox -e py37
可以通过执行以下操作来运行个别测试:
$ tox -- tests/module[.class_name[.test_name]]
例如:
$ tox -e p37 -- tests/end_to_end_test.py # Runs all tests in tests/end_to_end_test.py.
$ tox -e p37 -- tests/end_to_end_test.py::EndToEndTest # Runs all tests in class EndToEndTest.
$ tox -e p37 -- tests/end_to_end_test.py::EndToEndTest::test_sync # Runs a single test.
由于单元测试在SmugMug上执行实际操作,因此速度相当慢。加快速度所有http请求都缓存在磁盘上,并在后续运行时重播。第一次测试运行需要一段时间,但下一次应该运行得更快。但是,在更改代码时,缓存的http请求可能不再与新实现匹配。通过将reset_cache环境变量设置为true,重置要运行的下一个测试的缓存。若要仅重置下次运行的缓存,请执行以下操作:
$ RESET_CACHE=True tox -e py37
Windows用户可以通过执行以下操作来执行同等操作:
C:\smugcli> cmd /C "set RESET_CACHE=True && tox -e py37"