Skip to main content

A client library for pCloud

Project description

https://github.com/tomgross/pcloud/actions/workflows/pcloud-test.yml/badge.svg

This Python (Version >= 3.6 only!) library provides a Python API to the pCloud storage.

Features

  • Can be used as a library

  • Provides a PyFileSystem implementation

Examples

Usage of API

>>> from pcloud import PyCloud
>>> pc = PyCloud('email@example.com', 'SecretPassword')
>>> pc.listfolder(folderid=0)

Use alternate endpoints (API calls have to be made to the correct API host name depending were the user has been registered – api.pcloud.com for United States and eapi.pcloud.com for Europe.)

>>> from pcloud import PyCloud
>>> pc = PyCloud('email@example.com', 'SecretPassword', endpoint="eapi")
>>> pc.listfolder(folderid=0)

PyCloud also provides an API method to retrieve the nearest API server, which gives you a speed gain for some API operations. To use PyCloud with this feature create the PyCloud-object with the nearest endpoint parameter:

>>> from pcloud import PyCloud
>>> pc = PyCloud('email@example.com', 'SecretPassword', endpoint="nearest")
>>> pc.listfolder(folderid=0)

OAuth 2.0 authentication

To use OAuth 2.0 authentication you need to create an App in pCloud (https://docs.pcloud.com/my_apps/).

Add the following redirect URI http://localhost:65432/ (Make sure port 65432 is available on your machine. Otherwise you need to adjust the PORT in oauth2.py)

Note! To see the redirect URI in the settings of pCloud you have to log out and log in again.

Once you finished adding the app and setting the redirect URI you are ready to use OAuth 2.0 with PyCloud on your machine. For the communication with pCloud PyCloud uses the builtin webserver-module. This means you need a real browser on your system available.

>>> from pcloud import PyCloud
>>> pc = PyCloud.oauth2_authorize(client_id="XYZ", client_secret="abc123")
>>> pc.listfolder(folderid=0)

Headless mode

OAuth 2.0 is designed to use a browser for the authentication flow. Nevertheless Selenium can be used to automate this process. For an example see the pycloud_oauth2-fixture in test_oauth2.py. This method will not integrated as main functionality, since there are too many dependencies. You can use it as example for your usecase.

Uploading files

  1. from filenames:

>>> pc.uploadfile(files=['/full/path/to/image1.jpg', '/Users/tom/another/image.png'],
...     path='/path-to-pcloud-dir')
  1. from data:

>>> import io
>>> from PIL import Image
>>> img = Image.open('image.jpg', 'r')
>>> bio = io.BytesIO()
>>> img.save(bio, format='jpeg')
>>> pc.uploadfile(data=bio.getvalue(), filename="image.jpg", path='/path-to-pcloud-dir')

Usage of PyFilesystem with opener

>>> from fs import opener
>>> opener.open_fs('pcloud://email%40example.com:SecretPassword@/')
<pCloudFS>

Copying files from Linux to pCloud using PyFilesystem

>>> from fs import opener, copy
>>> with opener.open_fs('pcloud://email%40example.com:SecretPassword@/') as pcloud_fs:
>>>    with opener.open_fs('/opt/data_to_copy') as linux_fs:
>>>        copy.copy_file(src_fs=linux_fs,
>>>                       src_path='database.sqlite3',
>>>                       dst_fs=pcloud_fs,
>>>                       dst_path='/backup/server/database.sqlite3')

Copy directory from Linux to pCloud using PyFilesystem

>>> from fs import opener, copy
>>> with opener.open_fs('pcloud://email%40example.com:SecretPassword@/') as pcloud_fs:
>>>    with opener.open_fs('/opt/data_to_copy') as linux_fs:
>>>        copy.copy_dir(src_fs=linux_fs,
>>>                      src_path='database/',
>>>                      dst_fs=pcloud_fs,
>>>                      dst_path='/backup/database/')

Further Documentation

Implements the pCloud API found at https://docs.pcloud.com/

Installation

$ pip install pcloud

Installation with PyFilesystem support

$ bin/pip install pcloud[pyfs]

on zsh (Mac):

$ bin/pip install “pcloud[pyfs]”

Development

For testing purposes a mock server is provided. To use this mock server you need to add a file with the same name as the method + the .json suffix in the tests/data directory (like getdigest.json). The file contains the expected JSON result.

Contribute

License

The project is licensed under MIT (see LICENSE).

Contributors

  • Tom Gross, itconsense@gmail.com

  • Massimo Vannucci (blasterspike)

  • Yennick Schepers (yennicks)

  • olokelo

  • qo4on

Changelog

1.3 (2024-03-01)

  • Reimplement pyfs integration [tomgross]

  • Update (test) dependencies and run tests only on Python 3.8-3.12 [tomgross]

  • Added more API methods [tomgross]

1.2 (2023-06-24)

  • Add CONTRIBUTING guideline and update CODE_OF_CONDUCT document [tomgross]

  • Add Sonarcloud checker and report test coverage [tomgross]

  • Add test for listtokens endpoint [tomgross]

  • Changed repo name to https://github.com/tomgross/pcloud/ to be consistent (https://github.com/tomgross/pcloud/issues/70) [tomgross]

  • Implement sharefolder-endpoint [tomgross]

  • Replace cgi.FieldStorage by multipart avoiding the cgi module deprecated by Python 3.11. [tomgross]

1.1 (2022-11-14)

  • Fix upload with int folderid #63 [tomgross]

  • Add pytest timeout and update testing dependencies [tomgross]

  • Implement copyfile and downloadfileasync methods [tomgross]

  • Implement setlanguage, getfeedback, diff & getfilehistory methods [tomgross]

1.0 (2022-02-02)

  • 🎉 Release unchanged as 1.0 🎉

1.0b2 (2021-12-17)

  • Build wheel package [tomgross]

  • Fix file upload with oauth [giust]

  • Automated test for OAuth [tomgross]

  • Documented headless OAuth [tomgross]

1.0b1 (2021-11-26)

1.0a10 (2021-07-11)

  • State and test Python 3.9 support [tomgross]

  • OAuth 2.0 implementation [tomgross]

  • Implement more general methods [tomgross]

  • Implement get nearest api server [tomgross]

1.0a9 (2021-01-22)

  • Missing variable in output in case a directory already exists

  • Changed errors raised for makedirs

  • Do not raise an errors.DirectoryExists when recreate = True

  • Added examples to README [blasterspike]

  • Fix parameter of downloadlink method [tomgross]

  • Add more details on authentication error [yennicks]

  • Add new stats endpoint [AgusRumayor]

  • Add methods for archiving [olokelo]

  • Add token expire parameter [olekelo]

  • Start implementing trash methods [qo4on, tomgross]

  • Add support for alternate endpoints [tomgross]

  • Add Contributors and fix README ReST Syntax

1.0a8 (2020-02-21)

  • Fix upload of multiple files from paths [tomgross]

  • Document uploading of files [tomgross]

1.0a7 (2020-02-20)

  • Add new API method createfolderifnotexists #19 [Arkoniak, tomgross]

  • Fix duplication of data transfer on file upload #17 [blasterspike, tomgross]

  • Consistently use MIT licences [tomgross]

1.0a6 (2019-01-18)

  • Fix error while using makedirs from PyFilesystem with recreate=True [blasterspike]

1.0a5 (2018-10-22)

1.0a4 (2017-10-29)

  • Fix error with duplicate files parameter #3 [tomgross]

  • Fix upload of data [tomgross]

  • Do flake8 checks [tomgross]

1.0a3 (2017-10-07)

  • Test API with py.test [tomgross]

  • Support for PyFileSystem [tomgross]

  • Support for file operations [tomgross]

1.0a2 (2017-05-21)

  • Rename to pcloud [tomgross]

1.0a1 (2017-05-21)

  • Initial release. [tomgross]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pcloud-1.3.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

pcloud-1.3-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file pcloud-1.3.tar.gz.

File metadata

  • Download URL: pcloud-1.3.tar.gz
  • Upload date:
  • Size: 29.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.1

File hashes

Hashes for pcloud-1.3.tar.gz
Algorithm Hash digest
SHA256 01d9409ddad5f5aaea914f468eaca6cfb54a5d60adf6bf95a7dae10de52c9350
MD5 c0d840cd1cb49915a67c68a8ec7c2d2b
BLAKE2b-256 5306c3fa1356701dd9b0484d35d68b40f8fcfe2d1f98b353135e6f17900492ce

See more details on using hashes here.

File details

Details for the file pcloud-1.3-py3-none-any.whl.

File metadata

  • Download URL: pcloud-1.3-py3-none-any.whl
  • Upload date:
  • Size: 23.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.1

File hashes

Hashes for pcloud-1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a70ac20ba715ebe575a2e280e5d2d20e0ed761476bfc76f648c827d5abbdd0fa
MD5 addd856870bff25746d11a8a4af2f569
BLAKE2b-256 8c78575888fde38b63a495390e5ee84e9454cc0666bb17976c476dc932299054

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page