[ Avaa Bypassed ]




Upload:

Command:

www-data@13.59.192.254: ~ $
# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4; -*-
#
# Copyright 2014 Havard Gulldahl
#
# in part based on dpbxbackend.py:
# Copyright 2013 jno <jno@pisem.net>
#
# This file is part of duplicity.
#
# Duplicity is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# Duplicity is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with duplicity; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

# stdlib
import posixpath
import locale
import logging

# import duplicity stuff # version 0.6
import duplicity.backend
from duplicity import log
from duplicity.errors import BackendException


def get_jotta_device(jfs):
    jottadev = None
    for j in jfs.devices:  # find Jotta/Shared folder
        if j.name == u'Jotta':
            jottadev = j
    return jottadev


def get_root_dir(jfs):
    jottadev = get_jotta_device(jfs)
    root_dir = jottadev.mountPoints[u'Archive']
    return root_dir


def set_jottalib_logging_level(log_level):
    logger = logging.getLogger(u'jottalib')
    logger.setLevel(getattr(logging, log_level))


def set_jottalib_log_handlers(handlers):
    logger = logging.getLogger(u'jottalib')
    for handler in handlers:
        logger.addHandler(handler)


def get_duplicity_log_level():
    u""" Get the current duplicity log level as a stdlib-compatible logging level"""
    duplicity_log_level = log.LevelName(log.getverbosity())

    # notice is a duplicity-specific logging level not supported by stdlib
    if duplicity_log_level == u'NOTICE':
        duplicity_log_level = u'INFO'

    return duplicity_log_level


class JottaCloudBackend(duplicity.backend.Backend):
    u"""Connect to remote store using JottaCloud API"""

    def __init__(self, parsed_url):
        duplicity.backend.Backend.__init__(self, parsed_url)

        # Import JottaCloud libraries.
        try:
            from jottalib import JFS
            from jottalib.JFS import JFSNotFoundError, JFSIncompleteFile
        except ImportError:
            raise BackendException(u'JottaCloud backend requires jottalib'
                                   u' (see https://pypi.python.org/pypi/jottalib).')

        # Set jottalib loggers to the same verbosity as duplicity
        duplicity_log_level = get_duplicity_log_level()
        set_jottalib_logging_level(duplicity_log_level)

        # Ensure jottalib and duplicity log to the same handlers
        set_jottalib_log_handlers(log._logger.handlers)

        # Will fetch jottacloud auth from environment or .netrc
        self.client = JFS.JFS()

        self.folder = self.get_or_create_directory(parsed_url.path.lstrip(u'/'))
        log.Debug(u"Jottacloud folder for duplicity: %r" % self.folder.path)

    def get_or_create_directory(self, directory_name):
        root_directory = get_root_dir(self.client)
        full_path = posixpath.join(root_directory.path, directory_name)
        try:
            return self.client.getObject(full_path)
        except JFSNotFoundError:
            return root_directory.mkdir(directory_name)

    def _put(self, source_path, remote_filename):
        # - Upload one file
        # - Retried if an exception is thrown
        resp = self.folder.up(source_path.open(), remote_filename)
        log.Debug(u'jottacloud.put(%s,%s): %s' % (source_path.name, remote_filename, resp))

    def _get(self, remote_filename, local_path):
        # - Get one file
        # - Retried if an exception is thrown
        remote_file = self.client.getObject(posixpath.join(self.folder.path, remote_filename))
        log.Debug(u'jottacloud.get(%s,%s): %s' % (remote_filename, local_path.name, remote_file))
        with open(local_path.name, u'wb') as to_file:
            for chunk in remote_file.stream():
                to_file.write(chunk)

    def _list(self):
        # - List all files in the backend
        # - Return a list of filenames
        # - Retried if an exception is thrown
        return list([f.name for f in self.folder.files()
                     if not f.is_deleted() and f.state != u'INCOMPLETE'])

    def _delete(self, filename):
        # - Delete one file
        # - Retried if an exception is thrown
        remote_path = posixpath.join(self.folder.path, filename)
        remote_file = self.client.getObject(remote_path)
        log.Debug(u'jottacloud.delete deleting: %s (%s)' % (remote_file, type(remote_file)))
        remote_file.delete()

    def _query(self, filename):
        u"""Get size of filename"""
        #  - Query metadata of one file
        #  - Return a dict with a 'size' key, and a file size value (-1 for not found)
        #  - Retried if an exception is thrown
        log.Info(u'Querying size of %s' % filename)
        remote_path = posixpath.join(self.folder.path, filename)
        try:
            remote_file = self.client.getObject(remote_path)
        except JFSNotFoundError:
            return {u'size': -1}
        return {
            u'size': remote_file.size,
        }

    def _close(self):
        # - If your backend needs to clean up after itself, do that here.
        pass


duplicity.backend.register_backend(u"jottacloud", JottaCloudBackend)
u""" jottacloud is a Norwegian backup company """

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
pyrax_identity Folder 0755
__init__.py File 1.07 KB 0644
_boto_multi.py File 9.52 KB 0644
_boto_single.py File 14.07 KB 0644
_cf_cloudfiles.py File 3.81 KB 0644
_cf_pyrax.py File 5.07 KB 0644
adbackend.py File 16.97 KB 0644
azurebackend.py File 7.91 KB 0644
b2backend.py File 6.77 KB 0644
cfbackend.py File 1.11 KB 0644
dpbxbackend.py File 19.86 KB 0644
gdocsbackend.py File 9.12 KB 0644
giobackend.py File 8.25 KB 0644
hsibackend.py File 2.67 KB 0644
hubicbackend.py File 2.37 KB 0644
imapbackend.py File 9.83 KB 0644
jottacloudbackend.py File 5.53 KB 0644
lftpbackend.py File 9.79 KB 0644
localbackend.py File 2.65 KB 0644
mediafirebackend.py File 4.67 KB 0644
megabackend.py File 6.18 KB 0644
multibackend.py File 13.84 KB 0644
ncftpbackend.py File 5.56 KB 0644
onedrivebackend.py File 13.25 KB 0644
par2backend.py File 8.14 KB 0644
pcabackend.py File 8.96 KB 0644
pydrivebackend.py File 10.68 KB 0644
rclonebackend.py File 4.16 KB 0644
rsyncbackend.py File 6.44 KB 0644
s3_boto3_backend.py File 8.81 KB 0644
s3_boto_backend.py File 1.48 KB 0644
ssh_paramiko_backend.py File 18.33 KB 0644
ssh_pexpect_backend.py File 12.63 KB 0644
swiftbackend.py File 7.5 KB 0644
sxbackend.py File 2.3 KB 0644
tahoebackend.py File 2.61 KB 0644
webdavbackend.py File 19.73 KB 0644