Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import configparser
- import ftplib
- import sys
- from ftplib import FTP_TLS
- import ftputil.session
- import importlib.util
- import os
- import urllib3
- from cmislib.model import CmisClient
- from datetime import datetime
- pathname = os.path.dirname(sys.argv[0])
- spec = importlib.util.spec_from_file_location("MyBrowserBinding", pathname + "/MyBrowserBinding.py")
- foo = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(foo)
- from MyBrowserBinding import BrowserBinding
- urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
- ################### PROPERTIES
- config = configparser.ConfigParser()
- config.read(pathname + '/Myconfig2.properties')
- FTP_HOST = config["FTP"]["FTP_HOST"]
- FTP_PORT = int(config["FTP"]["FTP_PORT"])
- FTP_USER = config["FTP"]["FTP_USER"]
- FTP_PASS = config["FTP"]["FTP_PASS"]
- FTP_START = config["FTP"]["FTP_START"]
- CMIS_URL = config["CMIS"]["CMIS_URL"]
- CMIS_USER = config["CMIS"]["CMIS_USER"]
- CMIS_PASS = config["CMIS"]["CMIS_PASS"]
- START_SYNC_PATH = config["CMIS"]["START_SYNC_PATH"]
- LAST_SYNC_DATE = datetime.strptime(config["DEFAULT"]["LAST_SYNC_DATE"], '%d/%m/%Y')
- ################### FTP
- _old_makepasv = FTP_TLS.makepasv
- def _new_makepasv(self):
- host, port = _old_makepasv(self)
- host = self.sock.getpeername()[0]
- return host, port
- def copyToFTP(source, targetPathName):
- checkPath = FTP_START + "/" + targetPathName[:targetPathName.rfind('/')] # cut name from path
- try:
- if not ftp_host.path.exists(checkPath):
- ftp_host.makedirs(checkPath, exist_ok=True)
- ftp_host.upload(source, FTP_START + "/" + targetPathName, callback=None)
- except OSError:
- print("Something went wrong while uploading or creating dirs!")
- exit(1)
- ################### CMIS
- def copyContentFromCMIS(content): # download from CMIS and upload to FTP and delete
- o = open(content.getName(), 'wb')
- result = content.getContentStream()
- o.write(result.read())
- result.close()
- o.close()
- copyToFTP(content.getName(), content.getPaths()[0])
- os.remove(content.getName()) # TODO check if file is deleted
- def traverseCmis(parent): # DFS - traverse very deep, check if modDate is fresh, if so - copy content
- children = parent.getChildren()
- for child in children:
- prop = child.getProperties()
- if prop["cmis:objectTypeId"] == "cmis:folder":
- print("Entering: " + child.getPaths()[0])
- traverseCmis(child)
- else:
- lastModDate = prop["cmis:lastModificationDate"]
- if LAST_SYNC_DATE < lastModDate:
- copyContentFromCMIS(child)
- print("{} is copied.".format(child.getName()))
- FTP_TLS.makepasv = _new_makepasv
- my_session_factory = ftputil.session.session_factory(
- base_class=ftplib.FTP_TLS,
- port=FTP_PORT,
- encrypt_data_channel=True)
- ftp_host = ftputil.FTPHost(FTP_HOST, FTP_USER, FTP_PASS, session_factory=my_session_factory)
- ftp_host.use_list_a_option = True
- # ftps = FTP_TLS()
- # ftps.connect(FTP_HOST, FTP_PORT)
- # ftps.login(FTP_USER, FTP_PASS)
- # ftps.prot_p()
- client = CmisClient(CMIS_URL, CMIS_USER, CMIS_PASS, binding=BrowserBinding())
- repo = client.defaultRepository
- rootFolder = repo.rootFolder
- children = rootFolder.getChildren()
- startParent = repo.getObjectByPath(START_SYNC_PATH)
- traverseCmis(startParent)
- ftp_host.close()
- # ftps.quit()
- config["DEFAULT"]["LAST_SYNC_DATE"] = datetime.now().strftime("%m/%d/%Y")
- with open(pathname + '/Myconfig2.properties', 'w') as configfile:
- config.write(configfile)
Add Comment
Please, Sign In to add comment