Code Monkey home page Code Monkey logo

python-seafile's Introduction

Quick start of Seafile Python SDK

Seafile Python SDK provides functions to read and write files in Seafile server.

Setups

pip install seafileapi2

Basic objects

Two basic objects are used in Seafile Python SDK.

SeafileAPI

You can initialize a SeafileAPI object with user's login name and password. After authentication, you can get library objects for specific libraries to manipulate on libraries.

Repo

A repo object represents a library in Seafile. You can use it to manipulate files and folders inside a library.

Hints: In Seafile project, "Repo" is the short for "Repository". It has a same meaning of the term "library".

SeafileAPI authentication

SeafileAPI object can be authenticated by using user's username and password.

from seafileapi import SeafileAPI
server_url = "https://cloud.seafile.com/"
login_name = "[email protected]"
pwd = "password"
seafile_api = SeafileAPI(login_name, pwd, server_url)
seafile_api.auth()

Repo authentication

There are two ways to get an authenticated repo object:

By username and password

from seafileapi import SeafileAPI
server_url = "https://cloud.seafile.com/"
login_name = "[email protected]"
pwd = "password"
seafile_api = SeafileAPI(login_name, pwd, server_url)
seafile_api.auth()
repo_id = "xxxxxxxxxxxx"
repo = seafile_api.get_repo(repo_id) # return <Repo> object

By Repo API-Token

You can generate API-Token for a repo in Seafile Web interface (In the "Advanced" --> "API Token" in the dropdown menu of a library). Every API-Token can have different read or write permissions. This token is valid until you delete them.

from seafileapi import SeafileAPI
server_url = "https://cloud.seafile.com/"
api_token = '6de40d8456b06bdb4c9eabbf658175bdc4084050'
api_repo = Repo(api_token, server_url)
api_repo.auth()

Repo operations

You can use SeafileAPI object to list/add/delete repos.

List repos

seafile_api.list_repos()

Return the list of repos accessible by the current user.

Example

seafile_api.list_repos()

A list of repos in plain objects is returned:

[
    {
	'type': 'repo',
	'id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'owner': '[email protected]',
	'owner_name': 'Jiwei',
	'owner_contact_email': '[email protected]',
	'name': 'My files',
	'mtime': 1712741554,
	'modifier_email': '[email protected]',
	'modifier_contact_email': '[email protected]',
	'modifier_name': 'Jim',
	'mtime_relative': '<time datetime="2024-04-10T17:32:34" is="relative-time" title="Wed, 10 Apr 2024 17:32:34 +0800" >1 day ago</time>',
	'size': 44219022,
	'size_formatted': '42.2\xa0MB',
	'encrypted': False,
	'permission': 'rw',
	'virtual': False,
	'root': '',
	'head_commit_id': 'e27451a9c3e4a9f558bc15eacbf9e33a7b3f3ab5',
	'version': 1,
	'salt': ''
    },
    .....
]

Create repo

seafile_api.create_repo(repo_name, passwd=None)

Create a repo and return the repo object.

Parameters:

  • repo_name: the name of the library.
  • passwd: if specified, an encrypted library is created.

Example

seafile_api.create_repo("My new repo")

The newly created repo object is returned:

<seafileapi.main.Repo object at 0x7f9417360fa0>

Delete repo

seafile_api.delete_repo(repo_id)

Parameters:

  • repo_id: unique identifier of a library

Example:

repo_id = "83066b00-67ef-4068-b738-7a7381558d1b"
seafile_api.delete_repo(repo_id)

File / folder operation

You can use Repo object to manipulate files and folders.

List folder items

repo.list_dir(dir_path = '/')

Return the list of items in plain objects showed in a specific folder.

Example:

repo.list_dir('/root') 

A list of folder items in plain objects is returned:

[{
	'type': 'dir',
	'id': '431b66c52e4865d7757fca76fb358f8eb3e7e8d5',
	'name': 'auto-upload',
	'mtime': '2023-03-14T14:36:49+08:00',
	'permission': 'rw',
	'parent_dir': '/root',
	'starred': False
}, {
	'type': 'file',
	'id': '9669d47f26f709148e1b36917a90b9eecb167167',
	'name': '6613.txt',
	'mtime': '2020-12-26T10:14:52+08:00',
	'permission': 'rw',
	'parent_dir': '/root',
	'size': 14,
	'modifier_email': '[email protected]',
	'modifier_name': 'Jiwei',
	'modifier_contact_email': '[email protected]',
	'is_locked': False,
	'lock_time': 0,
	'lock_owner': '',
	'lock_owner_name': '',
	'lock_owner_contact_email': '',
	'locked_by_me': False,
	'starred': False
}, ...]

Create a folder

repo.create_dir(path)

Create a folder and return a plain object.

Example:

repo.create_dir('/A new')

A folder in plain object is returned

{
	'type': 'dir',
	'repo_id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'parent_dir': '/',
	'obj_name': 'A new',
	'obj_id': '0000000000000000000000000000000000000000',
	'mtime': '2024-04-12T12:18:18+08:00'
}

Rename a folder

repo.rename_dir(path, new_name)

Change the folder name and return a plain object.

Example:

repo.rename_dir('/A new', 'new file')

A folder in plain object is returned:

{
	'type': 'dir',
	'repo_id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'parent_dir': '/',
	'obj_name': 'new file',
	'obj_id': '0000000000000000000000000000000000000000',
	'mtime': '2024-04-12T12:18:18+08:00'
}

Delete a folder

repo.delete_dir(path)

A folder in a specific path will be deleted.

Example:

repo.delete_dir('/new file')

Get a file

repo.get_file(path)

Get details of a file and return a plain object

Example

repo.get_file('/file/readme.txt')

A file in plain object is returned:

{
	'type': 'file',
	'repo_id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'parent_dir': '/file',
	'obj_name': '7713.txt',
	'obj_id': 'f8da2b1f7562988bf7bc9b9760a1a4b687d897b2',
	'size': 14,
	'mtime': '2020-12-26T10:14:52+08:00',
	'can_preview': True,
	'can_edit': True
}

Create a file

repo.create_file(path)

Create a file and return a plain object.

Example

repo.create('/file/d.txt')

A file in plain object is returned:

{
	'type': 'file',
	'repo_id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'parent_dir': '/file',
	'obj_name': d.txt',
	'obj_id': '9484a2b1f756381b9760a1a4b687d897b2',
	'size': 12,
	'mtime': '2020-12-26T10:14:52+08:00',
	'can_preview': True,
	'can_edit': True
}

Rename a file

repo.rename_file(path, new_name)

Change the file name and return a plain object.

Parameters:

  • path: a path with old file name.

Example

repo.rename_file('/file/readme.txt', 'readme1.txt')

A file in plain object is returned:

{
	'type': 'file',
	'repo_id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'parent_dir': '/file',
	'obj_name': 'readme1.txt',
	'obj_id': '0000000000000000000000000000000000000000',
	'size': 0,
	'mtime': '2024-04-12T12:32:26+08:00',
	'can_preview': True,
	'can_edit': True
}

Delete a file

repo.delete_file(path)

A file in a specific path will be deleted.

Example

repo.delete_file('/file/readme.txt')

Get repo details

repo.get_repo_details()

A repo info in plain object is returned:

{
	'repo_id': '83066b00-67ef-4068-b738-7a7381558d1b',
	'repo_name': 'My files',
	'size': 44219022,
	'file_count': 126,
	'last_modified': '2024-04-12T12:35:42+08:00'
}

python-seafile's People

Contributors

awu0403 avatar dongsupark avatar freeplant avatar kklein33 avatar likesclever avatar lins05 avatar mainboarder avatar r350178982 avatar skywalkerspace avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

python-seafile's Issues

Fix access to repo API

Repos seemed to have a description element, which is not there anymore in version 6.x (and possibly before). The following PR fixes this:
#5

upload the zip filles

Hello,is there anyone know why I can't upload the zip file and picture through python into the seafile?but the empty zip file can be uploaded!
20200107181020

20200107180721

Still alive?

Is this repository still maintained?
Is there any documentation?

utils.py has a bug

def utf8lize(obj):

    if isinstance(obj, dict):

        return {k: to_utf8(v) for k, v in obj.items()}



    if isinstance(obj, list):

        return [to_utf8(x) for x in ob]



    if instance(obj, str):

        return obj.encode('utf-8')



    return obj

should change return [to_utf8(x) for x in ob] to return [to_utf8(x) for x in obj] and ** if instance(obj, str):** should change to if isinstance(obj, str):

Python 3

It would be nice to support python 3 as python 2 is out of support, now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.