core.py
*agent now creates an empty temporary directory in which all jobs should create their jobdirectories ui/web.py * outlook crawler has changed, adapted ui methods accordingly to access OutlookResource objects instead of email.MIME lists * using agent object as an attribute in the AgentHome class which is now passed through when necessary * changed form for creating OutlookCrawlJobs to provide possibility to select whether inbox, subfolders or both foldertypes should be crawled and to specify a regular expression for subfolder selection todo: add scheduler options * changed the way how jobdetails are displayed * changed display of crawling ressources: now it is also possible to display the job folders and enter them to view the mail objects * added first sketch of a filesystem crawler form, without functionality at the moment known bugs: currently having problems with character encodings git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1950 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									993356b8ae
								
							
						
					
					
						commit
						c3ffee3437
					
				
					 8 changed files with 1132 additions and 432 deletions
				
			
		|  | @ -23,6 +23,7 @@ $Id$ | |||
| """ | ||||
| 
 | ||||
| from time import time | ||||
| import tempfile | ||||
| from zope.interface import implements | ||||
| from loops.agent.interfaces import IAgent | ||||
| from loops.agent.config import Configurator | ||||
|  | @ -55,6 +56,7 @@ class Agent(object): | |||
|         self.stopper = Stopper() | ||||
|         self.stopper.scheduler = self.scheduler | ||||
|         self.logger = Logger(self) | ||||
|         self.tempdir = tempfile.mkdtemp(prefix='loops_') | ||||
| 
 | ||||
|     def scheduleJobsFromConfig(self, stop=False): | ||||
|         config = self.config | ||||
|  |  | |||
|  | @ -9,146 +9,107 @@ Tobias Schmid   26.07.2007 | |||
| """ | ||||
| 
 | ||||
| import win32com.client | ||||
| import re | ||||
| from email.mime.multipart import MIMEMultipart | ||||
| 
 | ||||
| from twisted.internet.defer import Deferred | ||||
| from twisted.internet.task import coiterate | ||||
| from zope.interface import implements | ||||
| 
 | ||||
| from loops.agent.interfaces import IResource | ||||
| from loops.agent.crawl.base import CrawlingJob as BaseCrawlingJob | ||||
| from loops.agent.crawl.base import Metadata | ||||
| 
 | ||||
| 
 | ||||
| # DEBUG FLAGS | ||||
| DEBUG = 0 | ||||
| DEBUG = 1 | ||||
| DEBUG_WRITELINE = 1 | ||||
| 
 | ||||
| # some constants | ||||
| COMMASPACE = ', ' | ||||
| 
 | ||||
| 
 | ||||
| class MSOutlook: | ||||
|     def __init__(self): | ||||
|         self.outlookFound = 0 | ||||
| class CrawlingJob(BaseCrawlingJob): | ||||
| 
 | ||||
|     keys = "" | ||||
|     inbox = "" | ||||
|     subfolders = "" | ||||
|     pattern = "" | ||||
| 
 | ||||
|     def collect(self): | ||||
|         self.collected = [] | ||||
|         coiterate(self.crawlOutlook()).addCallback(self.finished) | ||||
|         # TODO: addErrback() | ||||
|         self.deferred = Deferred() | ||||
|         return self.deferred | ||||
| 
 | ||||
|     def finished(self, result): | ||||
|         self.deferred.callback(self.collected) | ||||
| 
 | ||||
|     def crawlOutlook(self): | ||||
|         outlookFound = 0 | ||||
|         try: | ||||
|             self.oOutlookApp = \ | ||||
|             oOutlookApp = \ | ||||
|                 win32com.client.gencache.EnsureDispatch("Outlook.Application") | ||||
|             self.outlookFound = 1 | ||||
|             outlookFound = 1 | ||||
|         except: | ||||
|             print "MSOutlook: unable to load Outlook" | ||||
|          | ||||
|         self.records = [] | ||||
|         self.mailList = [] | ||||
|                | ||||
|                           | ||||
|     def loadInbox(self, keys=None, subfolders=False): | ||||
|         if not self.outlookFound: | ||||
|         records = [] | ||||
|          | ||||
|         if not outlookFound: | ||||
|             return | ||||
|          | ||||
|         # fetch the params | ||||
|         criteria = self.params | ||||
|         self.keys = criteria.get('keys')  | ||||
|         self.inbox = criteria.get('inbox') #boolean  | ||||
|         self.subfolders = criteria.get('subfolders') #boolean | ||||
|         self.pattern = criteria.get('pattern') | ||||
|         if self.pattern != '': | ||||
|             self.pattern = re.compile(criteria.get('pattern') or '.*') | ||||
|         else: | ||||
|             self.pattern = None | ||||
|          | ||||
|          | ||||
|         if DEBUG_WRITELINE: | ||||
|             print 'MSOutlook.loadInbox() ===> starting' | ||||
| 
 | ||||
|         # this should use more try/except blocks or nested blocks | ||||
|         onMAPI = self.oOutlookApp.GetNamespace("MAPI") | ||||
|         # catch Inbox folder | ||||
|         onMAPI = oOutlookApp.GetNamespace("MAPI") | ||||
|         ofInbox = \ | ||||
|             onMAPI.GetDefaultFolder(win32com.client.constants.olFolderInbox) | ||||
| 
 | ||||
|         # fetch the mails of the inbox folder | ||||
|         if DEBUG_WRITELINE: | ||||
|             print 'MSOutlook.loadInbox() ===> fetch mails of inbox folder' | ||||
|              | ||||
|         for om in range(len(ofInbox.Items)): | ||||
|             mail = ofInbox.Items.Item(om + 1) | ||||
|             if mail.Class == win32com.client.constants.olMail: | ||||
|                 if keys is None: | ||||
|                     # if we were't give a set of keys to use | ||||
|                     # then build up a list of keys that we will be | ||||
|                     # able to process | ||||
|                     # I didn't include fields of type time, though | ||||
|                     # those could probably be interpreted | ||||
|                     keys = [] | ||||
|                     for key in mail._prop_map_get_: | ||||
|                         if isinstance(getattr(mail, key), (int, str, unicode)): | ||||
|                             keys.append(key) | ||||
|                     if DEBUG: | ||||
|                         keys.sort() | ||||
|                         print 'Fields\n======================================' | ||||
|                         for key in keys: | ||||
|                             print key | ||||
|                 record = {} | ||||
|                 for key in keys: | ||||
|                     record[key] = getattr(mail, key) | ||||
|                      | ||||
|                 # Create the container (outer) email message. | ||||
|                 msg = MIMEMultipart() | ||||
|                 # subject | ||||
|                 msg['Subject'] = record['Subject'].encode('utf-8') | ||||
|                  | ||||
|                 # sender  | ||||
|                 sender = str(record['SenderName'].encode('utf-8')) #SenderEmailAddress | ||||
|                 msg['From'] = sender | ||||
|                  | ||||
|                 #recipients | ||||
|                 recipients = [] | ||||
|                 for rec in range(record['Recipients'].__len__()): | ||||
|                     recipients.append(getattr(record['Recipients'].Item(rec+1), 'Address')) | ||||
|                 msg['To'] = COMMASPACE.join(recipients) | ||||
|                  | ||||
|                 # message | ||||
|                 msg.preamble = record['Body'].encode('utf-8') | ||||
|                  | ||||
|                 # add the email message to the list | ||||
|                 self.mailList.append(msg) | ||||
|                 self.records.append(record) | ||||
|   | ||||
|                      | ||||
|         """ | ||||
|         * Fetch the mails of the inbox subfolders | ||||
|         """ | ||||
|         if subfolders: | ||||
|          | ||||
|         # fetch mails from inbox   | ||||
|         if self.inbox: | ||||
|             self.loadEmail(ofInbox)                  | ||||
|                          | ||||
|         # fetch mails of inbox subfolders  | ||||
|         if self.subfolders and self.pattern is None: | ||||
|              | ||||
|             if DEBUG_WRITELINE: | ||||
|                 print 'MSOutlook.loadInbox() ===> fetch emails of subfolders' | ||||
|              | ||||
|             lInboxSubfolders = getattr(ofInbox, 'Folders')  | ||||
|             for of in range(lInboxSubfolders.__len__()): | ||||
|                 # get a MAPI-folder object | ||||
|                 oFolder = lInboxSubfolders.Item(of + 1) | ||||
|                 # get items of the folder | ||||
|                 folderItems = getattr(oFolder, 'Items') | ||||
|                 for item in range(len(folderItems)): | ||||
|                     mail = folderItems.Item(item+1) | ||||
|                     if mail.Class == win32com.client.constants.olMail: | ||||
|                         if keys is None: | ||||
|                             keys = [] | ||||
|                             for key in mail._prop_map_get_: | ||||
|                                 if isinstance(getattr(mail, key), (int, str, unicode)): | ||||
|                                     keys.append(key) | ||||
|                              | ||||
|                             if DEBUG: | ||||
|                                 keys.sort() | ||||
|                                 print 'Fiels\n=======================================' | ||||
|                                 for key in keys: | ||||
|                                     print key | ||||
|                                      | ||||
|                         record = {} | ||||
|                         for key in keys: | ||||
|                             record[key] = getattr(mail, key) | ||||
|                         if DEBUG: | ||||
|                             print of | ||||
|                      | ||||
|                         # Create the container (outer) email message. | ||||
|                         msg = MIMEMultipart() | ||||
|                         # subject | ||||
|                         msg['Subject'] = record['Subject'].encode('utf-8') | ||||
|                          | ||||
|                         # sender | ||||
|                         sender == record['SenderName'].encode('utf-8') #SenderEmailAddress | ||||
|                         msg['From'] = sender | ||||
|                         | ||||
|                         # recipients | ||||
|                         for rec in range(record['Recipients'].__len__()): | ||||
|                             recipients.append(getattr(record['Recipients'].Item(rec+1), 'Address')) | ||||
|                         msg['To'] = COMMASPACE.join(recipients) | ||||
|                          | ||||
|                         # message | ||||
|                         msg.preamble = record['Body'].encode('utf-8') | ||||
|                          | ||||
|                         # add the email message to the list | ||||
|                         self.mailList.append(msg) | ||||
|                         self.records.append(record) | ||||
|                 # get a MAPI-folder object and load its emails | ||||
|                 self.loadEmail(lInboxSubfolders.Item(of + 1)) | ||||
|          | ||||
|         # pattern, just read the specified subfolder              | ||||
|         elif self.subfolders and self.pattern: | ||||
|               | ||||
|             if DEBUG_WRITELINE: | ||||
|                 print 'MSOutlook.loadInbox() ===> fetch emails of specified subfolder'             | ||||
|             lInboxSubfolders = getattr(ofInbox, 'Folders')  | ||||
|             for of in range(lInboxSubfolders.__len__()): | ||||
|                 # get a MAPI-folder object and load its emails | ||||
|                 if self.pattern.match(getattr(lInboxSubfolders.Item(of + 1), 'Name')): | ||||
|                     self.loadEmail(lInboxSubfolders.Item(of + 1)) #oFolder | ||||
|                  | ||||
|                  | ||||
|         if DEBUG: | ||||
|             print 'number of mails in Inbox:', len(ofInbox.Items) | ||||
|  | @ -157,7 +118,7 @@ class MSOutlook: | |||
|             # get Count-Attribute of _Folders class | ||||
|             iInboxSubfoldersCount = getattr(lInboxSubfolders, 'Count') | ||||
|             # the Item-Method of the _Folders class returns a MAPIFolder object | ||||
|             oFolder = lInboxSubfolders.Item(0) #1 | ||||
|             oFolder = lInboxSubfolders.Item(1) | ||||
|              | ||||
|             print 'Count of Inbox-SubFolders:', iInboxSubfoldersCount | ||||
|             print 'Inbox sub folders (Folder/Mails):' | ||||
|  | @ -168,45 +129,78 @@ class MSOutlook: | |||
|              | ||||
|         if DEBUG_WRITELINE: | ||||
|             print 'MSOutlook.loadInbox() ===> ending' | ||||
|         yield '1' | ||||
|      | ||||
|      | ||||
|     def loadEmail(self, oFolder): | ||||
|         # get items of the folder | ||||
|         folderItems = getattr(oFolder, 'Items') | ||||
|         for item in range(len(folderItems)): | ||||
|             mail = folderItems.Item(item+1) | ||||
|             if mail.Class == win32com.client.constants.olMail: | ||||
|                 if self.keys is None: | ||||
|                     self.keys = [] | ||||
|                     for key in mail._prop_map_get_: | ||||
|                         if isinstance(getattr(mail, key), (int, str, unicode)): | ||||
|                             self.keys.append(key) | ||||
|                      | ||||
|                     if DEBUG: | ||||
|                         self.keys.sort() | ||||
|                         print 'Fiels\n=======================================' | ||||
|                         for key in self.keys: | ||||
|                             print key | ||||
|                              | ||||
|                 record = {} | ||||
|                 for key in self.keys: | ||||
|                     record[key] = getattr(mail, key) | ||||
|                 if DEBUG: | ||||
|                     print str(item) | ||||
|              | ||||
|         return self.mailList | ||||
|   | ||||
|         | ||||
|                 # Create the mime email object | ||||
|                 msg = self.createEmailMime(record) | ||||
|                  | ||||
|                 # list with mime objects | ||||
|                 self.collected.append((OutlookResource(msg))) | ||||
|       | ||||
|       | ||||
|     def createEmailMime(self, emails): | ||||
|         # Create the container (outer) email message. | ||||
|         msg = MIMEMultipart() | ||||
|         # subject | ||||
|         msg['Subject'] = emails['Subject'].encode('utf-8') | ||||
|                  | ||||
|         # sender | ||||
|         if emails.has_key('SenderEmailAddress'): | ||||
|             sender = str(emails['SenderEmailAddress'].encode('utf-8')) | ||||
|         else: | ||||
|             sender = str(emails['SenderName'].encode('utf-8'))             | ||||
|         msg['From'] = sender | ||||
|                  | ||||
|         #recipients | ||||
|         recipients = [] | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     if DEBUG: | ||||
|         print 'attempting to load Outlook' | ||||
|     oOutlook = MSOutlook() | ||||
|     # delayed check for Outlook on win32 box | ||||
|     if not oOutlook.outlookFound: | ||||
|         print 'Outlook not found' | ||||
|         sys.exit(1) | ||||
|         if emails.has_key('Recipients'): | ||||
|             for rec in range(emails['Recipients'].__len__()): | ||||
|                 recipients.append(getattr(emails['Recipients'].Item(rec+1), 'Address')) | ||||
|                 msg['To'] = COMMASPACE.join(recipients) | ||||
|         else: | ||||
|             recipients.append(emails['To']) | ||||
|             msg['To'] = COMMASPACE.join(recipients)            | ||||
|                 | ||||
|         # message | ||||
|         msg.preamble = emails['Body'].encode('utf-8') | ||||
|          | ||||
|         return msg | ||||
|                       | ||||
|          | ||||
| class OutlookResource(object): | ||||
| 
 | ||||
|     fieldsMail = ['Body', | ||||
|                      'HTMLBody', | ||||
|                      'CC', | ||||
|                      'SenderName', | ||||
|                      'Recipients', | ||||
|                      'To', | ||||
|                      'Attachments', | ||||
|                      'Subject' | ||||
|                      ] | ||||
|     #                    'BodyFormat',  removed BodyFormat temporarily because it is not available in Outlook.9 (Office2000) | ||||
|     #                     'SenderEmailAddress', replaced by SenderName | ||||
|     implements(IResource) | ||||
| 
 | ||||
|     if DEBUG: | ||||
|         import time | ||||
|         print 'loading records...' | ||||
|         startTime = time.time() | ||||
|     | ||||
|     mails = oOutlook.loadInbox(fieldsMail) | ||||
|     def __init__(self, oEmail): | ||||
|         self.oEmail = oEmail | ||||
| 
 | ||||
|     for elem in mails: | ||||
|         print str(elem) | ||||
|     @property | ||||
|     def data(self): | ||||
|         return self.oEmail    | ||||
|      | ||||
|     if DEBUG_WRITELINE: | ||||
|         print '***Back in main() with some emails in a list....***' | ||||
|         print 'Mails fetched from MSOutlook inbox folder:', mails.__len__() | ||||
|      | ||||
|     if DEBUG: | ||||
|         print 'loading took %f seconds' % (time.time() - startTime) | ||||
|  |  | |||
							
								
								
									
										228
									
								
								agent/ui/templates/filecrawl.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										228
									
								
								agent/ui/templates/filecrawl.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,228 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||||
| <!--<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> //--> | ||||
| <html xmlns:nevow="http://nevow.com/ns/nevow/0.1"> | ||||
| 
 | ||||
| <!-- Outlook Mails Page for loops.agent UI    Version: 0.1 //--> | ||||
| 
 | ||||
| <nevow:invisible nevow:render="header_fragment" /> | ||||
| 
 | ||||
|   <body> | ||||
|     <div class="body"> | ||||
|         <div nevow:render="top_fragment"> | ||||
|         </div> | ||||
| 
 | ||||
|     <div id="menu"> | ||||
| 
 | ||||
|     <div nevow:render="navigation_fragment"> | ||||
|     </div> | ||||
| 
 | ||||
|         <br/> | ||||
|         <br/> | ||||
| 
 | ||||
|         <div class="box"> | ||||
|           <h4>User Mode</h4> | ||||
|           <div class="body"> | ||||
|           <b>Current Mode: </b><p nevow:render="getActiveUserMode"/> | ||||
| 
 | ||||
|           </div> | ||||
|         </div> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="content"> | ||||
|     <div></div> | ||||
|     <div></div> | ||||
| 
 | ||||
|     <div class="content-1" id="2.body" ondblclick=""> | ||||
|         <div class="line-block"> | ||||
|             <div class="line"><br /></div> | ||||
|             </div> | ||||
|             <div class="section"> | ||||
|             <h3><a id="agent-ui-startpage" name="agent-ui-startpage">Agent: Create Filesystem Crawler Job</a></h3> | ||||
| 
 | ||||
|             <ul class="simple"> | ||||
|             <li>Configuration page for Filesystem Crawler Jobs</li> | ||||
|             </ul> | ||||
|             </div> | ||||
|             <div class="section"> | ||||
|                 <h3><a id="form-overview" name="form-overview">Overview</a></h3> | ||||
|                 <ul class="simple"> | ||||
|                 <li><b>File Collection</b><div nevow:render="data" nevow:data="displayViewForm"/></li> | ||||
|                 </ul> | ||||
|                 <div align="center"> | ||||
|                 <table border="0" cellpadding="10"> | ||||
|                     <p nevow:render="displayFiles"> | ||||
|                         <tr nevow:pattern="CollectedFiles" nevow:render="data"/> | ||||
|                     </p> | ||||
|                 </table> | ||||
|                 <form name="FileCrawlForm" action="submitFilesystemCrawlJob" method="POST"> | ||||
|                     <fieldset> | ||||
|                         <legend> | ||||
|                             Filesystem Crawl Settings | ||||
|                         </legend> | ||||
|                         <fieldset> | ||||
|                             <legend>Directories to crawl</legend> | ||||
|                             <table align="center"> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblRecursiveDirs">Directories to crawl <b>recursively</b></label> | ||||
|                                         <p> | ||||
|                                             <i>please use ';' as delimiters</i> | ||||
|                                         </p> | ||||
|                                         <p> | ||||
|                                             <i>you can also use patterns like regular expressions </i> | ||||
|                                         </p> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <textarea name="rec_directories" id="lblRecursiveDirs" rows="10" cols="40"></textarea> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblDirs">Directories to crawl non-recursively</label> | ||||
|                                         <p> | ||||
|                                             <i>please use ';' as delimiters</i> | ||||
|                                         </p> | ||||
|                                         <p> | ||||
|                                             <i>you can also use patterns like regular expressions </i> | ||||
|                                         </p> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <textarea name="rec_directories" id="lblDirs" rows="10" cols="40"></textarea> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                             </table> | ||||
|                         </fieldset> | ||||
|                         <fieldset> | ||||
|                             <legend> | ||||
|                                 Filter criteria patterns | ||||
|                             </legend> | ||||
|                             <table align="center"> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblApplyFileSize">Apply size criteria : </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input id="lblApplyFileSize" name="applyFileSize" type="checkbox"/> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblFileSizeLimit">Collect files that are : </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <select id="lblFileSizeLimit" name="selectFileSizeLimit"> | ||||
|                                             <option>greater</option> | ||||
|                                             <option>less</option> | ||||
|                                             <option>equal</option> | ||||
|                                         </select> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblFileSize">than (kByte): </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input id="lblFileSize" name="fileSize" | ||||
|                                          type="text" size="12" maxlength="20" /> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblMaximumSize">Maximum file size: </label> | ||||
|                                         <p> | ||||
|                                             <i>no size means that transferred files might be very large!</i> | ||||
|                                         </p> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input id="lblMaximumSize" name="maximumSize" | ||||
|                                          type="text" size="12" maxlength="20" /> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblApplyDateCriteria">Apply date criteria: </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input id="lblApplyDateCriteria" name="applyDateCriteria" type="checkbox"/> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblDateCriteria">Collect files that are: </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <select id="lblDateCriteria" name="selectDateCriteria"> | ||||
|                                             <option>created</option> | ||||
|                                             <option>modified</option> | ||||
|                                             <option>accessed</option> | ||||
|                                         </select> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblTimestampCompare"></label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <select id="lblTimestampCompare" name="selectTimeStampCompare"> | ||||
|                                             <option>before</option> | ||||
|                                             <option>after</option> | ||||
|                                             <option>exactly on</option> | ||||
|                                         </select> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblTimeStamp">Collect files that are : </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input id="lblTimeStamp" name="selectDateCriteria" type="text" size="20"/> | ||||
|                                     </td> | ||||
|                                </tr> | ||||
|                             </table> | ||||
|                         </fieldset> | ||||
|                         <fieldset> | ||||
|                             <legend> | ||||
|                                 Job Interval | ||||
|                             </legend> | ||||
|                             <table align="center"> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblmailCrawlIntervaloneTime">One Time: </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input type="radio" id="lblmailCrawlIntervaloneTime" name="mailCrawlInterval" | ||||
|                                          value="oneTime" checked="checked" /> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblmailCrawlIntervalScheduler">Use Scheduler: </label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input type="radio" id="lblmailCrawlIntervalScheduler" name="mailCrawlInterval" | ||||
|                                          value="Scheduler" /> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                             </table> | ||||
|                         </fieldset> | ||||
|                         <input type="submit" name="startCrawlJob" value="Save and Start" /> | ||||
|                     </fieldset> | ||||
|                 </form> | ||||
|                 <div nevow:render="systemMessage"/> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="sub-section" define-macro="sub-section"> | ||||
|     </div> | ||||
| 
 | ||||
|     <div nevow:render="footer_fragment"> | ||||
|     </div> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|     </body> | ||||
| 
 | ||||
| </html> | ||||
|  | @ -47,36 +47,29 @@ | |||
|             <div class="section"> | ||||
|                 <h3><a id="form-overview" name="form-overview">Overview</a></h3> | ||||
|                 <ul class="simple"> | ||||
|                     <li><b>Mail Collection</b><div nevow:render="data" nevow:data="displayViewForm"/></li> | ||||
|                     <li><b>Mail in Detail</b><div nevow:render="data" nevow:data="displayViewForm"/></li> | ||||
|                 </ul> | ||||
|                 <div nevow:render="systemMessage"/> | ||||
|                 <div align="center"> | ||||
|                     <table class="listing"> | ||||
|                     <table class="listing" style="width:200px"> | ||||
|                         <thead> | ||||
|                             <tr> | ||||
|                                 <th> | ||||
|                                     From | ||||
|                                     Field | ||||
|                                 </th> | ||||
|                                 <th> | ||||
|                                     CC | ||||
|                                 </th> | ||||
|                                 <th> | ||||
|                                     Subject | ||||
|                                 </th> | ||||
|                                 <th> | ||||
|                                     Date | ||||
|                                 </th> | ||||
|                                 <th> | ||||
|                                     Source Folder | ||||
|                                     Value | ||||
|                                 </th> | ||||
|                             </tr> | ||||
|                         </thead> | ||||
|                         <tbody> | ||||
|                             <p nevow:render="displayOutlookMails"> | ||||
|                             <p nevow:render="displayOutlookMail"> | ||||
|                             </p> | ||||
|                         </tbody> | ||||
|                     </table> | ||||
|                 </div> | ||||
|             <br/> | ||||
|             <a href="viewRessources" alt="back to Ressources overview"><b>[back to Ressources overview]</b></a> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | @ -65,22 +65,29 @@ | |||
|                             <table align="center"> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblsearchFolder">Folder to search: </label> | ||||
|                                         <label for="lblCrawlInbox">Crawl inbox</label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <input id="lblsearchFolder" name="searchFolder" type="text" | ||||
|                                          size="12" maxlength="20"/> | ||||
|                                         <input id="lblCrawlInbox" name="inbox" type="checkbox" | ||||
|                                          value="inbox"/><!-- outlook job param //--> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblselectSubfolder">Include subfolder: </label> | ||||
|                                         <label for="lblCrawlSubfolders">Crawl subfolders</label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                         <select id="lblselectSubfolder" name="selectSubfolder"> | ||||
|                                             <option>Yes</option> | ||||
|                                             <option>No</option> | ||||
|                                         </select> | ||||
|                                         <input type="checkbox" id="lblCrawlSubfolders" name="subfolders" | ||||
|                                          value = "subfolders"/><!-- outlook job param //--> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                                 <tr> | ||||
|                                     <td> | ||||
|                                         <label for="lblSubFolderPattern">Pattern for subfolders to include</label> | ||||
|                                     </td> | ||||
|                                     <td> | ||||
|                                     <input type="text" maxlength="20" size="16" id="lblSubFolderPattern" | ||||
|                                      name="pattern"/><!-- outlook job param //--> | ||||
|                                     </td> | ||||
|                                 </tr> | ||||
|                             </table> | ||||
|  |  | |||
|  | @ -16,19 +16,19 @@ | |||
| 
 | ||||
|       <div class="content odd menu-3"> | ||||
|          <a href="http://localhost:8080/collectOutlookMails" class=""> | ||||
|             collect Outlook Mails | ||||
|             add outlook crawl job | ||||
|          </a> | ||||
|       </div> | ||||
| 
 | ||||
|       <div class="content odd menu-3"> | ||||
|          <a href="http://localhost:8080/viewOutlookMails" class=""> | ||||
|             view Outlook Mails | ||||
|          </a> | ||||
|          <a href="http://localhost:8080/collectFilesystem" class=""> | ||||
|             add filesystem crawl job</a> | ||||
|       </div> | ||||
| 
 | ||||
|       <div class="content odd menu-3"> | ||||
|          <a href="http://localhost:8080/addjob" class=""> | ||||
|             add job</a> | ||||
|          <a href="http://localhost:8080/viewRessources" class=""> | ||||
|             view collected ressources | ||||
|          </a> | ||||
|       </div> | ||||
| 
 | ||||
|       <div class="content odd menu-3"> | ||||
|  |  | |||
							
								
								
									
										79
									
								
								agent/ui/templates/ressourceview.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								agent/ui/templates/ressourceview.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||||
| <!--<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> //--> | ||||
| <html xmlns:nevow="http://nevow.com/ns/nevow/0.1"> | ||||
| 
 | ||||
| <!-- Ressource Page for loops.agent UI    Version: 0.1 //--> | ||||
| 
 | ||||
| <nevow:invisible nevow:render="header_fragment" /> | ||||
| 
 | ||||
|   <body> | ||||
|     <div class="body"> | ||||
|         <div nevow:render="top_fragment"> | ||||
|         </div> | ||||
| 
 | ||||
|     <div id="menu"> | ||||
| 
 | ||||
|     <div nevow:render="navigation_fragment"> | ||||
|     </div> | ||||
| 
 | ||||
|         <br/> | ||||
|         <br/> | ||||
| 
 | ||||
|         <div class="box"> | ||||
|           <h4>User Mode</h4> | ||||
|           <div class="body"> | ||||
|           <b>Current Mode: </b><p nevow:render="getActiveUserMode"/> | ||||
| 
 | ||||
|           </div> | ||||
|         </div> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="content"> | ||||
|     <div></div> | ||||
|     <div></div> | ||||
| 
 | ||||
|     <div class="content-1" id="2.body" ondblclick=""> | ||||
|         <div class="line-block"> | ||||
|             <div class="line"><br /></div> | ||||
|             </div> | ||||
|             <div class="section"> | ||||
|             <h3><a id="agent-ui-startpage" name="agent-ui-startpage">Agent: collected ressources</a></h3> | ||||
| 
 | ||||
|             <ul class="simple"> | ||||
|             <li>All currently available objects that were collected by loops jobs</li> | ||||
|             </ul> | ||||
|             </div> | ||||
|             <div class="section"> | ||||
|                 <h3><a id="form-overview" name="form-overview">Overview</a></h3> | ||||
|                 <ul class="simple"> | ||||
|                     <li><b>Ressource Collection</b><div nevow:render="data" nevow:data="displayViewForm"/></li> | ||||
|                 </ul> | ||||
|                 <div nevow:render="systemMessage"/> | ||||
|                 <div align="center"> | ||||
|                     <table class="listing"> | ||||
|                         <thead> | ||||
|                             <p nevow:render="displayRessourceHeaders"> | ||||
|                             </p> | ||||
|                         </thead> | ||||
|                         <tbody> | ||||
|                             <p nevow:render="displayRessources"> | ||||
|                             </p> | ||||
|                         </tbody> | ||||
|                     </table> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="sub-section" define-macro="sub-section"> | ||||
|     </div> | ||||
| 
 | ||||
|     <div nevow:render="footer_fragment"> | ||||
|     </div> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|     </body> | ||||
| 
 | ||||
| </html> | ||||
							
								
								
									
										913
									
								
								agent/ui/web.py
									
										
									
									
									
								
							
							
						
						
									
										913
									
								
								agent/ui/web.py
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 scrat
						scrat