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"

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用文件路径获取文件位置?   java XPath从某个元素后的元素获取文本   具有多个名称空间的JavaDOM   使用hibernate在表别名处出现java意外令牌错误   springdatajpa中的java交叉连接   在firebase中循环时使用java空指针   如何使用java驱动程序执行mongodb getShardDistribution()   swing Java GUI在另一个方法的新窗口中显示文本   java如何使用Google Guava为每个新地图条目设置不同的过期超时?   在视图寻呼机中将数据从活动传递到片段时,找不到id片段的java视图   Java 8 Lambda流筛选器更改值   java为什么在程序中不使用main方法时Eclipse不会显示错误。   java JavaFX文件选择器显示自定义选项   swing Java程序在MAC上未正确运行   java使用Twitter4j发布twitter线程   JMS请求访问被拒绝后,java jedis无法连接到redis   java GETSTATE weblogic命令花费的时间太长,有什么建议吗?   java如何将此代码转换为Racket/Scheme   java如何使用经度和纬度获取地址   java是我的Glassfish设置泄漏内存吗?