| @@ -0,0 +1,55 @@ | |||||
| """ | |||||
| Contains classes and utilities that help publishing a hyde website to | |||||
| a filesystem using PyFilesystem FS objects. | |||||
| """ | |||||
| import getpass | |||||
| from hyde.fs import File, Folder | |||||
| from hyde.publisher import Publisher | |||||
| from hyde.util import getLoggerWithNullHandler | |||||
| logger = getLoggerWithNullHandler('hyde.ext.publishers.pyfs') | |||||
| from fs.osfs import OSFS | |||||
| from fs.path import pathjoin | |||||
| from fs.opener import fsopendir | |||||
| class PyFS(Publisher): | |||||
| def initialize(self, settings): | |||||
| self.settings = settings | |||||
| self.url = settings.url | |||||
| self.prompt_for_credentials() | |||||
| self.fs = fsopendir(self.url) | |||||
| def prompt_for_credentials(self): | |||||
| credentials = {} | |||||
| if "%(username)s" in self.url: | |||||
| print "Username: ", | |||||
| credentials["username"] = raw_input().strip() | |||||
| if "%(password)s" in self.url: | |||||
| credentials["password"] = getpass.getpass("Password: ") | |||||
| if credentials: | |||||
| self.url = self.url % credentials | |||||
| def publish(self): | |||||
| super(PyFS, self).publish() | |||||
| deploy_fs = OSFS(self.site.config.deploy_root_path.path) | |||||
| for (dirnm,filenms) in deploy_fs.walk(): | |||||
| logger.info("Making directory: %s",dirnm) | |||||
| self.fs.makedir(dirnm,allow_recreate=True) | |||||
| for filenm in filenms: | |||||
| filepath = pathjoin(dirnm,filenm) | |||||
| logger.info("Uploading file: %s",filepath) | |||||
| with deploy_fs.open(filepath,"rb") as f: | |||||
| self.fs.setcontents(filepath,f) | |||||
| for filenm in self.fs.listdir(dirnm,files_only=True): | |||||
| filepath = pathjoin(dirnm,filenm) | |||||
| if filenm not in filenms: | |||||
| logger.info("Removing file: %s",filepath) | |||||
| self.fs.remove(filepath) | |||||