summaryrefslogtreecommitdiffstats
path: root/func/overlord/modules/copyfile.py
blob: 1b5331bdbc99a48cecbca166fd7c238a45dd5f4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from func.overlord import overlord_module
import os
import stat
import xmlrpclib

class copyfile(overlord_module.BaseModule):
    def send(self, localpath, remotepath, bufsize=60000):
        try:
            f = open(localpath, "r")
        except IOError, e:
            sys.stderr.write("Unable to open file: %s: %s\n" % (self.options.filename, e))
            return

        st = os.stat(localpath)
        mode = stat.S_IMODE(st.st_mode)
        uid = st.st_uid
        gid = st.st_gid

        self.parent.run("copyfile", "open", [remotepath, mode, uid, gid])

        while True: 
            data=f.read(bufsize)
            if data:
                self.parent.run("copyfile", "append", [remotepath, xmlrpclib.Binary(data)])
            else:
                break
    
        return True