def __init__(self,backupname,blobstorAccount,blobstorNamespace,gitlabAccount,compress=True,fullcheck=False,servercheck=True,storpath="/mnt/STOR"):
     
        self.backupname=backupname

        self.blobstorAccount=blobstorAccount
        self.blobstorNamespace=blobstorNamespace
        self.gitlabAccount=gitlabAccount
        self.key="backup_%s"%self.backupname

        j.logger.disable()
        

        # try:
        #     self.gitlab=j.clients.gitlab.get(gitlabAccount)
        # except Exception,e:
        #     self.gitlab=None

        self.mdpath="/opt/backup/MD/%s"%self.backupname
        if not j.system.fs.exists(path=self.mdpath):  
            # #init repo
            # if self.gitlab.passwd<>"":              
            #     if not self.gitlab.existsProject(namespace=self.gitlab.loginName, name=self.key):
            #         self.gitlab.createproject(self.key, description='backup set', \
            #         issues_enabled=0, wall_enabled=0, merge_requests_enabled=0, wiki_enabled=0, snippets_enabled=0, public=0)#, group=accountname)   
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()
                    
            #     url = 'git@%s:%s/%s.git' % (self.gitlab.addr,gitlabAccount,self.key)
            #     j.system.fs.createDir(self.mdpath)
            #     def do(cmd):
            #         cmd="cd %s;%s"%(self.mdpath,cmd)
            #         print cmd
            #         j.system.process.executeWithoutPipe(cmd)    
            #     do("git init")                
            #     do("touch README")
            #     do("git add README")
            #     do("git commit -m 'first commit'")
            #     do("git remote add origin %s"%url)
            #     do("git push -u origin master")
            # else:
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()
                
            j.system.fs.createDir(self.mdpath)
       

        
        # if self.gitlab<>None:
        #     self.gitclient = self.gitlab.getGitClient(self.gitlab.loginName, self.key, clean=False,path=self.mdpath)
        # else:
        #     self.gitclient=None

        self.fullcheck=fullcheck
        self.servercheck=servercheck
            
        self.filemanager=JSFileMgr(MDPath=self.mdpath,backupname=self.backupname,blobstorAccount=blobstorAccount,\
                blobstorNamespace=blobstorNamespace,compress=compress,fullcheck=fullcheck,servercheck=servercheck)
    def __init__(self,
                 backupname,
                 blobstorAccount,
                 blobstorNamespace,
                 gitlabAccount,
                 compress=True,
                 fullcheck=False,
                 servercheck=True,
                 storpath="/mnt/STOR"):

        self.backupname = backupname
        self.blobstorAccount = blobstorAccount
        self.blobstorNamespace = blobstorNamespace
        self.gitlabAccount = gitlabAccount
        self.key = "backup_%s" % self.backupname

        j.logger.disable()

        # try:
        #     self.gitlab=j.clients.gitlab.get(gitlabAccount)
        # except Exception,e:
        #     self.gitlab=None

        self.mdpath = "/opt/backup/MD/%s" % self.backupname
        if not j.sal.fs.exists(path=self.mdpath):
            # #init repo
            # if self.gitlab.passwd != "":
            #     if not self.gitlab.existsProject(namespace=self.gitlab.loginName, name=self.key):
            #         self.gitlab.createproject(self.key, description='backup set', \
            #         issues_enabled=0, wall_enabled=0, merge_requests_enabled=0, wiki_enabled=0, snippets_enabled=0, public=0)#, group=accountname)
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()

            #     url = 'git@%s:%s/%s.git' % (self.gitlab.addr,gitlabAccount,self.key)
            #     j.sal.fs.createDir(self.mdpath)
            #     def do(cmd):
            #         cmd="cd %s;%s"%(self.mdpath,cmd)
            #         print cmd
            #         j.sal.process.executeWithoutPipe(cmd)
            #     do("git init")
            #     do("touch README")
            #     do("git add README")
            #     do("git commit -m 'first commit'")
            #     do("git remote add origin %s"%url)
            #     do("git push -u origin master")
            # else:
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()

            j.sal.fs.createDir(self.mdpath)

        # if self.gitlab != None:
        #     self.gitclient = self.gitlab.getGitClient(self.gitlab.loginName, self.key, clean=False,path=self.mdpath)
        # else:
        #     self.gitclient=None

        self.fullcheck = fullcheck
        self.servercheck = servercheck

        self.filemanager=JSFileMgr(MDPath=self.mdpath,backupname=self.backupname,blobstorAccount=blobstorAccount,\
                blobstorNamespace=blobstorNamespace,compress=compress,fullcheck=fullcheck,servercheck=servercheck)
class BackupClient:
    """
    """
    def __init__(self,
                 backupname,
                 blobstorAccount,
                 blobstorNamespace,
                 gitlabAccount,
                 compress=True,
                 fullcheck=False,
                 servercheck=True,
                 storpath="/mnt/STOR"):

        self.backupname = backupname
        self.blobstorAccount = blobstorAccount
        self.blobstorNamespace = blobstorNamespace
        self.gitlabAccount = gitlabAccount
        self.key = "backup_%s" % self.backupname

        j.logger.disable()

        # try:
        #     self.gitlab=j.clients.gitlab.get(gitlabAccount)
        # except Exception,e:
        #     self.gitlab=None

        self.mdpath = "/opt/backup/MD/%s" % self.backupname
        if not j.sal.fs.exists(path=self.mdpath):
            # #init repo
            # if self.gitlab.passwd != "":
            #     if not self.gitlab.existsProject(namespace=self.gitlab.loginName, name=self.key):
            #         self.gitlab.createproject(self.key, description='backup set', \
            #         issues_enabled=0, wall_enabled=0, merge_requests_enabled=0, wiki_enabled=0, snippets_enabled=0, public=0)#, group=accountname)
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()

            #     url = 'git@%s:%s/%s.git' % (self.gitlab.addr,gitlabAccount,self.key)
            #     j.sal.fs.createDir(self.mdpath)
            #     def do(cmd):
            #         cmd="cd %s;%s"%(self.mdpath,cmd)
            #         print cmd
            #         j.sal.process.executeWithoutPipe(cmd)
            #     do("git init")
            #     do("touch README")
            #     do("git add README")
            #     do("git commit -m 'first commit'")
            #     do("git remote add origin %s"%url)
            #     do("git push -u origin master")
            # else:
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()

            j.sal.fs.createDir(self.mdpath)

        # if self.gitlab != None:
        #     self.gitclient = self.gitlab.getGitClient(self.gitlab.loginName, self.key, clean=False,path=self.mdpath)
        # else:
        #     self.gitclient=None

        self.fullcheck = fullcheck
        self.servercheck = servercheck

        self.filemanager=JSFileMgr(MDPath=self.mdpath,backupname=self.backupname,blobstorAccount=blobstorAccount,\
                blobstorNamespace=blobstorNamespace,compress=compress,fullcheck=fullcheck,servercheck=servercheck)

    def backup(self,
               path,
               destination="",
               pathRegexIncludes={},
               pathRegexExcludes={},
               childrenRegexExcludes=[".*/dev/.*", "/proc/.*"]):
        # self._clean()
        return self.filemanager.backup(path,destination=destination, pathRegexIncludes=pathRegexIncludes,pathRegexExcludes=pathRegexExcludes,\
            childrenRegexExcludes=childrenRegexExcludes)
        # self.commitMD()

    def getMDFromBlobStor(self, key):
        """
        get metadata from blobstor
        """
        self.filemanager.blobstorMD.downloadDir(key,
                                                dest=self.filemanager.MDPath,
                                                repoid=self.filemanager.repoid,
                                                compress=True)

    def sendMDToBlobStor(self):
        return self.filemanager.sendMDToBlobStor()

    def restore(self, src, destination, link=False):
        # self.pullMD()
        self.filemanager.restore(src=src, dest=destination, link=link)

    def _clean(self):
        for ddir in j.sal.fs.listDirsInDir(self.mdpath,
                                           False,
                                           True,
                                           findDirectorySymlinks=False):
            if ddir.lower() != ".git":
                j.sal.fs.removeDirTree(j.sal.fs.joinPaths(self.mdpath, ddir))
        for ffile in j.sal.fs.listFilesInDir(self.mdpath,
                                             recursive=False,
                                             followSymlinks=False):
            j.sal.fs.remove(ffile)

    # def backupRecipe(self,recipe):
    #     """
    #     do backup of sources as specified in recipe
    #     example recipe

    #     #when star will do for each dir
    #     /tmp/JSAPPS/apps : * : /DEST/apps
    #     #when no * then dir & below
    #     /tmp/JSAPPS/bin :  : /DEST/bin
    #     #now only for 1 subdir
    #     /tmp/JSAPPS/apps : asubdirOfApps : /DEST/apps

    #     """
    #     self._clean()
    #     self.filemanager.backupRecipe(recipe)
    #     self.commitMD()

    def commitMD(self):
        print("commit to git")
        self.gitclient.commit("backup %s" %
                              j.data.time.getLocalTimeHRForFilesystem())
        if j.sal.nettools.tcpPortConnectionTest(self.gitlab.addr,
                                                self.gitlab.port):
            #found gitlab
            print("push to git")
            self.gitclient.push(force=True)
        else:
            print(
                "WARNING COULD NOT COMMIT CHANGES TO GITLAB, no connection found.\nDO THIS LATER!!!!!!!!!!!!!!!!!!!!!!"
            )

    def pullMD(self):
        print("pull from git")
        if j.sal.nettools.tcpPortConnectionTest(self.gitlab.addr,
                                                self.gitlab.port):
            #found gitlab
            self.gitclient.pull()
        else:
            print(
                "WARNING COULD NOT PULL CHANGES FROM GITLAB, no connection found.\nDO THIS LATER!!!!!!!!!!!!!!!!!!!!!!"
            )
class BackupClient:
    """
    """

    def __init__(self,backupname,blobstorAccount,blobstorNamespace,gitlabAccount,compress=True,fullcheck=False,servercheck=True,storpath="/mnt/STOR"):
     
        self.backupname=backupname

        self.blobstorAccount=blobstorAccount
        self.blobstorNamespace=blobstorNamespace
        self.gitlabAccount=gitlabAccount
        self.key="backup_%s"%self.backupname

        j.logger.disable()
        

        # try:
        #     self.gitlab=j.clients.gitlab.get(gitlabAccount)
        # except Exception,e:
        #     self.gitlab=None

        self.mdpath="/opt/backup/MD/%s"%self.backupname
        if not j.system.fs.exists(path=self.mdpath):  
            # #init repo
            # if self.gitlab.passwd<>"":              
            #     if not self.gitlab.existsProject(namespace=self.gitlab.loginName, name=self.key):
            #         self.gitlab.createproject(self.key, description='backup set', \
            #         issues_enabled=0, wall_enabled=0, merge_requests_enabled=0, wiki_enabled=0, snippets_enabled=0, public=0)#, group=accountname)   
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()
                    
            #     url = 'git@%s:%s/%s.git' % (self.gitlab.addr,gitlabAccount,self.key)
            #     j.system.fs.createDir(self.mdpath)
            #     def do(cmd):
            #         cmd="cd %s;%s"%(self.mdpath,cmd)
            #         print cmd
            #         j.system.process.executeWithoutPipe(cmd)    
            #     do("git init")                
            #     do("touch README")
            #     do("git add README")
            #     do("git commit -m 'first commit'")
            #     do("git remote add origin %s"%url)
            #     do("git push -u origin master")
            # else:
            #     from IPython import embed
            #     print "DEBUG NOW id"
            #     embed()
                
            j.system.fs.createDir(self.mdpath)
       

        
        # if self.gitlab<>None:
        #     self.gitclient = self.gitlab.getGitClient(self.gitlab.loginName, self.key, clean=False,path=self.mdpath)
        # else:
        #     self.gitclient=None

        self.fullcheck=fullcheck
        self.servercheck=servercheck
            
        self.filemanager=JSFileMgr(MDPath=self.mdpath,backupname=self.backupname,blobstorAccount=blobstorAccount,\
                blobstorNamespace=blobstorNamespace,compress=compress,fullcheck=fullcheck,servercheck=servercheck)


    def backup(self,path,destination="", pathRegexIncludes={},pathRegexExcludes={},childrenRegexExcludes=[".*/dev/.*","/proc/.*"]):
        # self._clean()
        return self.filemanager.backup(path,destination=destination, pathRegexIncludes=pathRegexIncludes,pathRegexExcludes=pathRegexExcludes,\
            childrenRegexExcludes=childrenRegexExcludes)
        # self.commitMD()

    def getMDFromBlobStor(self,key):
        """
        get metadata from blobstor
        """
        self.filemanager.blobstorMD.downloadDir(key,dest=self.filemanager.MDPath,repoid=self.filemanager.repoid,compress=True)


    def sendMDToBlobStor(self):
        return self.filemanager.sendMDToBlobStor()

    def restore(self,src,destination,link=False):
        # self.pullMD()
        self.filemanager.restore(src=src,dest=destination,link=link)


    def _clean(self):
        for ddir in j.system.fs.listDirsInDir(self.mdpath,False,True,findDirectorySymlinks=False):
            if ddir.lower()<>".git":
                j.system.fs.removeDirTree(j.system.fs.joinPaths(self.mdpath,ddir))
        for ffile in j.system.fs.listFilesInDir(self.mdpath, recursive=False, followSymlinks=False):
            j.system.fs.remove(ffile)
        

    # def backupRecipe(self,recipe):
    #     """
    #     do backup of sources as specified in recipe
    #     example recipe

    #     #when star will do for each dir
    #     /tmp/JSAPPS/apps : * : /DEST/apps
    #     #when no * then dir & below
    #     /tmp/JSAPPS/bin :  : /DEST/bin
    #     #now only for 1 subdir
    #     /tmp/JSAPPS/apps : asubdirOfApps : /DEST/apps

    #     """
    #     self._clean()
    #     self.filemanager.backupRecipe(recipe)
    #     self.commitMD()

    def commitMD(self):
        print "commit to git"
        self.gitclient.commit("backup %s"%j.base.time.getLocalTimeHRForFilesystem())
        if j.system.net.tcpPortConnectionTest(self.gitlab.addr,self.gitlab.port):
            #found gitlab
            print "push to git"
            self.gitclient.push(force=True)
        else:
            print "WARNING COULD NOT COMMIT CHANGES TO GITLAB, no connection found.\nDO THIS LATER!!!!!!!!!!!!!!!!!!!!!!"

    def pullMD(self):
        print "pull from git"        
        if j.system.net.tcpPortConnectionTest(self.gitlab.addr,self.gitlab.port):
            #found gitlab
            self.gitclient.pull()        
        else:
            print "WARNING COULD NOT PULL CHANGES FROM GITLAB, no connection found.\nDO THIS LATER!!!!!!!!!!!!!!!!!!!!!!"