rsync.py :  » Business-Application » ECLiPt-Mirroring-Tool » emirror-2.2.0-0.4 » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Business Application » ECLiPt Mirroring Tool 
ECLiPt Mirroring Tool » emirror 2.2.0 0.4 » rsync.py
"""

RSync Library

"""

from tools import which,TRUE,FALSE
from log4py import Logger
from os import environ,spawnv,P_WAIT
from string import count,split,join

RERR_SYNTAX = 1               # Syntax or usage error
RERR_PROTOCOL = 2             # Protocol incompatibility
RERR_FILESELECT = 3           # Errors selecting input/output files, dirs
RERR_UNSUPPORTED = 4          # Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support them; or an option was speciifed that is supported by the client and not by the server.
RERR_SOCKETIO = 10            # Error in socket IO             
RERR_FILEIO = 11              # Error in file IO
RERR_STREAMIO = 12            # Error in rsync protocol data stream
RERR_MESSAGEIO = 13           # Errors with program diagnostics
RERR_IPC = 14                 # Error in IPC code
RERR_SIGNAL = 20              # Received SIGUSR1 or SIGINT
RERR_WAITCHILD = 21           # Some error returned by waitpid()
RERR_MALLOC = 22              # Error allocating core memory buffers
RERR_TIMEOUT = 30             # Timeout in data send/receive

RERR = {RERR_SYNTAX: "Syntax or usage error",
        RERR_PROTOCOL: "Protocol incompatibility",
        RERR_FILESELECT: "Errors selecting input/output files, dirs",
        RERR_UNSUPPORTED: "Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support them; or an option was speciifed that is supported by the client and not by the server.",
        RERR_SOCKETIO: "Error in socket IO",
        RERR_FILEIO: "Error in file IO",
        RERR_STREAMIO: "Error in rsync protocol data stream",
        RERR_MESSAGEIO: "Errors with program diagnostics",
        RERR_IPC: "Error in IPC code",
        RERR_SIGNAL: "Received SIGUSR1 or SIGINT",
        RERR_WAITCHILD: "Some error returned by waitpid()",
        RERR_MALLOC: "Error allocating core memory buffers",
        RERR_TIMEOUT: "Timeout in data send/receive"}

class rsync:

    compress = FALSE                    # compress file data
    recursive = FALSE                   # recurse into directories
    links = FALSE                       # copy symlinks as symlinks
    times = FALSE                       # preserve times
    delete = FALSE                      # delete files that don't exist on the sending side
    archive = FALSE                     # archive mode
    
    proxy = ""                          # Web Proxy
    username = ""                       # Username
    password = ""                       # Password

    def __init__(self):
        self.__rsync_logger = Logger().get_instance(self)
        self.__rsync_command = which("rsync")
        if (self.__rsync_command == ""):
            self.__rsync_logger.error("rsync executable not found.")

    def set_source(self, hostname, directory, username = ""):
        self.__rsync_source = ""
        if (username != ""):
            self.__rsync_source = "%s@" % username
        if (count(directory, "/") == 1):
            directory = directory[1:]
            self.__rsync_source = "%s::%s" % (hostname, directory)
        else:
            self.__rsync_source = "%s:%s" % (hostname, directory)

    def set_target(self, directory):
        self.__rsync_target = "%s" % directory

    def arguments(self):
        """ Returns a list of all arguments defined by the class attributes. """
        args = []
        if (self.compress): args.append("--compress")
        if (self.recursive): args.append("--recursive")
        if (self.links): args.append("--links")
        if (self.times): args.append("--times")
        if (self.delete): args.append("--delete")
        if (self.archive): args.append("--archive")
        args.append(self.__rsync_source)
        args.append(self.__rsync_target)
        self.__rsync_logger.debug("Command arguments: %s" % join(args))
        return args

    def executable(self):
        """ Returns the full path to the rsync executable. """
        return self.__rsync_command

    def execute(self, show_output = TRUE):
        if (self.proxy != ""):
            environ["RSYNC_PROXY"] = self.proxy
        if (self.username != ""):
            environ["USER"] = self.username
        if (self.password != ""):
            environ["RSYNC_PASSWORD"] = self.password
        args = self.arguments()
        if (show_output == FALSE):
            args.insert(0, "--quiet")
        self.__rsync_logger.debug("Executing: %s %s" % (self.__rsync_command, join(args)))
        return spawnv(P_WAIT, self.__rsync_command, args)
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.