From: <mme...@us...> - 2010-01-16 17:01:15
|
Revision: 2029 http://bika.svn.sourceforge.net/bika/?rev=2029&view=rev Author: mmetcalfe Date: 2010-01-16 17:01:09 +0000 (Sat, 16 Jan 2010) Log Message: ----------- Got FTP filtered search working with select and basic listing Modified Paths: -------------- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/browser.zcml BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/ftpreaderview.py BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/templates/ftpreader_view.pt BikaVillage/Products.ftpreader/trunk/Products/ftpreader/model/ftpreader.zargo BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/import_steps.xml BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/metadata.xml BikaVillage/Products.ftpreader/trunk/Products/ftpreader/tools/ftpreader.py Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/browser.zcml =================================================================== --- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/browser.zcml 2010-01-16 09:55:57 UTC (rev 2028) +++ BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/browser.zcml 2010-01-16 17:01:09 UTC (rev 2029) @@ -8,7 +8,7 @@ <browser:page - for="Products.ftpreader.tools.interfaces.IFTPReader" + for="*" name="ftpreader_view" class="Products.ftpreader.browser.ftpreaderview.ftpreader_view" template="templates/ftpreader_view.pt" Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/ftpreaderview.py =================================================================== --- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/ftpreaderview.py 2010-01-16 09:55:57 UTC (rev 2028) +++ BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/ftpreaderview.py 2010-01-16 17:01:09 UTC (rev 2029) @@ -20,6 +20,7 @@ from Products.CMFPlone import utils from Products.Five import BrowserView from zope.interface import implements +from Products.CMFCore.utils import getToolByName from Products.ftpreader.tools.ftpreader import FTPReader from Products.CMFDynamicViewFTI.browserdefault import BrowserDefaultMixin @@ -31,8 +32,26 @@ ##code-section class-header_ftpreader_view #fill in your manual code here ##/code-section class-header_ftpreader_view + def getFilters(self): + tool = getToolByName(self, 'portal_ftpreader') + if tool: + return tool.getFilters() + def getFolderListing(self, filter=None): + tool = getToolByName(self, 'portal_ftpreader') + if tool: + return tool.getFolderListing(filter) + def getFiltersAndFilteredListing(self, filter=None): + tool = getToolByName(self, 'portal_ftpreader') + if tool: + return tool.getFiltersAndFilteredListing(filter) + + def retrieveFile(self): + pass + + + ##code-section module-footer #fill in your manual code here ##/code-section module-footer Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/templates/ftpreader_view.pt =================================================================== --- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/templates/ftpreader_view.pt 2010-01-16 09:55:57 UTC (rev 2028) +++ BikaVillage/Products.ftpreader/trunk/Products/ftpreader/browser/templates/ftpreader_view.pt 2010-01-16 17:01:09 UTC (rev 2029) @@ -5,7 +5,44 @@ <body> <div metal:fill-slot="main"> -xxxx + + <form name="ftpfolderview" + action="" + method="post" + tal:define=" + filter request/filter|nothing; + filtersAndListing python:view.getFiltersAndFilteredListing(filter); + filters python:filtersAndListing[0]; + listing python:filtersAndListing[1]; + " + tal:attributes="action string:$here_url/$template_id"> + + <input type="hidden" name="submitted" value="1" /> + <select name="filter"> + <option value="">No Filter</option> + <tal:block tal:repeat="opt filters"> + <option + tal:condition="python:opt == filter" + tal:attributes="value opt;" + tal:content="opt" + selected> + </option> + <option + tal:condition="python:opt != filter" + tal:attributes="value opt;" + tal:content="opt"> + </option> + </tal:block> + </select> + + <input type="submit" name="search" value="Search" /> + + + <div tal:repeat="file listing"> + <p tal:content="file"/> + </div> + </form> + </div> </body> Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/model/ftpreader.zargo =================================================================== (Binary files differ) Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/import_steps.xml =================================================================== --- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/import_steps.xml 2010-01-16 09:55:57 UTC (rev 2028) +++ BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/import_steps.xml 2010-01-16 17:01:09 UTC (rev 2029) @@ -5,7 +5,7 @@ id="ftpreader-Hide-Tools-From-Navigation" handler="Products.ftpreader.setuphandlers.setupHideToolsFromNavigation" title="Hide Custom tools from Navigation for ftpreader" - version="2010-01-16T11:10:06.556781"> + version="2010-01-16T12:47:04.192281"> <dependency step="ftpreader-QI-dependencies"/> Hides custom tools from navigation tree for ftpreader </import-step> @@ -17,7 +17,7 @@ id="ftpreader-Update-RoleMappings" handler="Products.ftpreader.setuphandlers.updateRoleMappings" title="Update Workflow role mappings for ftpreader" - version="2010-01-16T11:10:06.556781"> + version="2010-01-16T12:47:04.192281"> <dependency step="ftpreader-QI-dependencies"/> updates the workflow role mappings for ftpreader </import-step> @@ -26,7 +26,7 @@ id="ftpreader-postInstall" handler="Products.ftpreader.setuphandlers.postInstall" title="manual coded post-install for ftpreader" - version="2010-01-16T11:10:06.556781"> + version="2010-01-16T12:47:04.192281"> <dependency step="ftpreader-QI-dependencies"/> manual coded post-install for ftpreader </import-step> Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/metadata.xml =================================================================== --- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/metadata.xml 2010-01-16 09:55:57 UTC (rev 2028) +++ BikaVillage/Products.ftpreader/trunk/Products/ftpreader/profiles/default/metadata.xml 2010-01-16 17:01:09 UTC (rev 2029) @@ -1,6 +1,6 @@ <?xml version="1.0"?> <metadata> - <version>1.0.4</version> + <version>1.0.9</version> <!-- ##code-section METADATA --> <!-- ##/code-section METADATA --> </metadata> \ No newline at end of file Modified: BikaVillage/Products.ftpreader/trunk/Products/ftpreader/tools/ftpreader.py =================================================================== --- BikaVillage/Products.ftpreader/trunk/Products/ftpreader/tools/ftpreader.py 2010-01-16 09:55:57 UTC (rev 2028) +++ BikaVillage/Products.ftpreader/trunk/Products/ftpreader/tools/ftpreader.py 2010-01-16 17:01:09 UTC (rev 2029) @@ -26,6 +26,8 @@ ##code-section module-header #fill in your manual code here +import logging +from ftplib import FTP ##/code-section module-header schema = Schema(( @@ -114,40 +116,88 @@ def getFilters(self): """ """ - pass + listing = self._getListing() + return self._getFiltersFromListing(listing) + security.declarePublic('getFolderListing') - def getFolderListing(host, user=None, passwd=None, folder='', filter=''): + def getFolderListing(self, filter=None): """ Connect to a ftp site to return a list of files in the given folder, filtered with the given filter """ + listing = self._getListing() + return self._filterListing(listing, filter) + + security.declarePublic('retrieveFile') + def retrieveFile(self): + """ + """ + pass + + + security.declarePublic('getFilters') + def getFiltersAndFilteredListing(self, filter=None): + listing = self._getListing() + filters = self._getFiltersFromListing(listing) + filtered = self._filterListing(listing, filter) + + return (filters, filtered,) + + #Private Methods + def _getListing(self): + """ + Connect to a ftp site to return a list of files + in the given folder + """ + listing = [] - ftp = FTP(host=host) - ftp.login(user=user, passwd=passwd) - if folder: - ftp.cwd(folder) + ftp = FTP(host=self.host) + ftp.login(user=self.username, passwd=self.password) + if self.folder: + ftp.cwd(self.folder) files = ftp.dir(listing.append) ftp.quit() + return listing + def _filterListing(self, listing, filter=None): filtered = [] for line in listing: - file = line.split()[-1] - if filter and file.lower().startswith(filter.lower()): - filtered.append(file) - if not filter: - filtered.append(file) + filename = line.split()[-1] + if filename: + #logging.info('checking filter [%s] file [%s]', + # filter, filename) + if not filename.lower().endswith('.xls'): + continue + if filter: + test_filter = 'tlog_%s' % filter.lower() + if filename.lower().startswith(test_filter): + filtered.append(filename) + else: + filtered.append(filename) - return filter + return filtered - security.declarePublic('retrieveFile') - def retrieveFile(self): - """ - """ - pass + def _getFiltersFromListing(self, listing): + filters = {} + for line in listing: + filename = line.split()[-1] + if not filename.lower().endswith('.xls'): + logging.info('Warning: problem in name of file %s', filename) + continue + file_parts = filename.split('_') + if len(file_parts) < 2: + logging.info('Warning: problem in name of file %s', filename) + continue + filter = file_parts[1].lower() + if not filters.has_key(filter): + filters[filter] = 1 - + if filters: + keys = filters.keys() + keys.sort() + return [f.upper() for f in keys] registerType(FTPReader, PROJECTNAME) # end of class FTPReader This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |