Skip to main content

git annex special remotes made easy

Project description

AnnexRemote

Helper module to easily develop special remotes for git annex. AnnexRemote handles all the protocol stuff for you, so you can focus on the remote itself. It implements the complete external special remote protocol and fulfils all specifications regarding whitespaces etc. This is ensured by an excessive test suite. Extensions to the protocol are normally added within hours after they've been published.

Documentation

(Also have a look at the examples and git-annex-remote-googledrive which is based on AnnexRemote.)

Getting started

Prerequisites

You need python installed on your system. AnnexRemote has been tested with version 2.7 and 3.4 to 3.7.

Installing

pip install annexremote

Running the tests

If you want to run the tests, copy the content of the tests folder to the same location as annexremote.py. Then use a test discovery like nose to run them.

Usage

Import the necessary classes

from annexremote import Master
from annexremote import SpecialRemote
from annexremote import RemoteError

Now create your special remote class. It must subtype SpecialRemote and implement at least the 6 basic methods:

class MyRemote(SpecialRemote):
    def initremote(self):
        # initialize the remote, eg. create the folders
        # raise RemoteError if the remote couldn't be initialized

    def prepare(self):
        # prepare to be used, eg. open TCP connection, authenticate with the server etc.
        # raise RemoteError if not ready to use

    def transfer_store(self, key, filename):
        # store the file in `filename` to a unique location derived from `key`
        # raise RemoteError if the file couldn't be stored

    def transfer_retrieve(self, key, filename):
        # get the file identified by `key` and store it to `filename`
        # raise RemoteError if the file couldn't be retrieved

    def checkpresent(self, key):
        # return True if the key is present in the remote
        # return False if the key is not present
        # raise RemoteError if the presence of the key couldn't be determined, eg. in case of connection error

    def remove(self, key):
        # remove the key from the remote
        # raise RemoteError if it couldn't be removed
        # note that removing a not existing key isn't considered an error

In your main function, link your remote to the master class and initialize the protocol:

def main():
    master = Master()
    remote = MyRemote(master)
    master.LinkRemote(remote)
    master.Listen()

if __name__ == "__main__":
    main()

Now save your program as git-annex-remote-$something and make it executable.

chmod +x git-annex-remote-$something (You'll need the sheebang line #!/usr/bin/env python3)

That's it. Now you've created your special remote.

Export remotes

Import and subtype ExportRemote instead of SpecialRemote:

# ...
from annexremote import ExportRemote

class MyRemote(ExportRemote):
    # implement the remote methods just like in the above example and then additionally:

    def transferexport_store(self, key, local_file, remote_file):
        # store the file located at `local_file` to `remote_file` on the remote
        # raise RemoteError if the file couldn't be stored

    def transferexport_retrieve(self, key, local_file, remote_file):
        # get the file located at `remote_file` from the remote and store it to `local_file`
        # raise RemoteError if the file couldn't be retrieved

    def checkpresentexport(self, key, remote_file):
        # return True if the file `remote_file` is present in the remote
        # return False if not
        # raise RemoteError if the presence of the file couldn't be determined, eg. in case of connection error

    def removeexport(self, key, remote_file):
        # remove the file in `remote_file` from the remote
        # raise RemoteError if it couldn't be removed
        # note that removing a not existing key isn't considered an error

    def removeexportdirectory(self, remote_directory):
        # remove the directory `remote_directory` from the remote
        # raise RemoteError if it couldn't be removed
        # note that removing a not existing directory isn't considered an error

    def renameexport(self, key, filename, new_filename):
        # move the remote file in `name` to `new_name`
        # raise RemoteError if it couldn't be moved

License

This project is licensed under GPLv3 - see the LICENSE file for details

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

annexremote-1.4.3.linux-x86_64.tar.gz (26.0 kB view details)

Uploaded Source

Built Distribution

annexremote-1.4.3-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file annexremote-1.4.3.linux-x86_64.tar.gz.

File metadata

  • Download URL: annexremote-1.4.3.linux-x86_64.tar.gz
  • Upload date:
  • Size: 26.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3

File hashes

Hashes for annexremote-1.4.3.linux-x86_64.tar.gz
Algorithm Hash digest
SHA256 41a768d5a65bea37e65db6ed0489f76f9adaaf930eb8a8a83d2b95ef7675fa34
MD5 c64ebb98e1a31a299875d5c46ef565c6
BLAKE2b-256 48cbb111cad0601a879c2b4cbbb4e18cf821974a46cbb1b022b78ddde51fc31d

See more details on using hashes here.

Provenance

File details

Details for the file annexremote-1.4.3-py3-none-any.whl.

File metadata

  • Download URL: annexremote-1.4.3-py3-none-any.whl
  • Upload date:
  • Size: 25.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3

File hashes

Hashes for annexremote-1.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8fab823c3a6588fa35b5bc72870ddb260799b36ccf9715911e8dd7abfca7382a
MD5 f1f3c0c7c2a4e91169c2281e3ccfa499
BLAKE2b-256 c02247448eede5882a4b4caa31da3957693fc97faa07438f57df5f72b6487120

See more details on using hashes here.

Provenance

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