Changeset 2340


Ignore:
Timestamp:
Dec 16, 2009 3:42:29 PM (9 years ago)
Author:
kapilt
Message:

upload directory support (hardcoded up dir, but working) closes ticket:4

Location:
ore.bigfile/trunk/ore/bigfile
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • ore.bigfile/trunk/ore/bigfile/browser.py

    r2332 r2340  
    11""" 
    22""" 
     3 
    34import time 
    45from datetime import datetime 
     
    1617from zope.formlib import form 
    1718from ore.bigfile import interfaces 
     19from ore.bigfile.utils import prettySize, prettyDate 
     20 
    1821 
    1922class CurrentInfo( object ): 
     
    171174        return '' 
    172175     
    173 def prettySize( s ): 
    174     kb = s/1024.0 
    175     if kb > 1024.0: 
    176         mb = kb/1024.0 
    177         if mb > 1024.0: 
    178             gb = mb/1024 
    179             return "%0.2fGb"%gb 
    180         return "%.1fMb"%mb 
    181     return "%.1fKb"%kb 
    182      
    183 third_day = (3600*8) # one third of a day ie. 8 hrs. 
    184  
    185 def prettyDate( d ): 
    186     delta = datetime.now()-d 
    187     if delta.days or delta.seconds > third_day: 
    188         return d.strftime("%y/%m/%d %l:%M%p") 
    189     if delta.seconds > 3600: 
    190         hrs = delta.seconds/3600 
    191         if hrs > 1: 
    192             return "%s hours ago"%hrs 
    193         return "one hour ago" 
    194     elif delta.seconds > 60: 
    195         min = delta.seconds/60 
    196         if min > 1: 
    197             return "%s minutes ago"%(min) 
    198         return "one minute ago" 
    199     else: 
    200         return "%s seconds ago"%(delta.seconds) 
    201         
    202176         
  • ore.bigfile/trunk/ore/bigfile/content.py

    r2337 r2340  
    22Big File Content 
    33""" 
     4import os 
    45 
    56from Products.CMFPlone import PloneMessageFactory as _ 
     
    1718from ore.bigfile.interfaces import IBigFile 
    1819from ore.bigfile import field, widget 
     20from ore.bigfile.utils import prettySize 
    1921 
    2022def addBigFile(container, id, **kwargs): 
     
    6971        raise NotImplemented("Big File Insanity") 
    7072 
     73    # unlike plone.app.blob which relies on schemaextender to add 
     74    # these fields via subtyping, big file is a concrete implementation 
     75    # and these methods are the actual mutators/accessors. so override 
     76    # them to directly return/mutate the value instead of delegating. 
    7177    def getFile( self ): 
    7278        return self.Schema()['file'].get( self ) 
    7379 
    7480    def setFile( self, value, **kwargs): 
     81         
    7582        return self.Schema()['file'].set( self, value, **kwargs ) 
    7683 
    77     def processForm(self, *args, **kw): 
    78         return super( BigFile, self).processForm( *args, **kw ) 
     84    # upload directory support 
     85    def isDirectoryUploadEnabled(self): 
     86        return 1 
     87     
     88    # sigh hardcode for now, for security we should make 
     89    # probably make this defer to an environment variable. 
     90    # instead of a ttw implementation. (ie don't allow the 
     91    # user to point /etc/ 
     92    upload_dir = "/mnt/incoming" 
     93     
     94    def validateDirectoryFile(self, f_path ): 
     95        # no funny stuff  
     96        f_path = os.path.abspath(f_path) 
     97        if not f_path.startswith( self.upload_dir ): 
     98            return False 
     99        return True 
     100 
     101    def getDirectoryFiles(self): 
     102        results = [] 
     103        for f in os.listdir( self.upload_dir ): 
     104            f_path = os.path.join( self.upload_dir, f ) 
     105            #created = os.path.getctime( f_path ) 
     106            results.append( 
     107                {"filename": f, 
     108                 "path": f_path, 
     109                 "size": prettySize(os.path.getsize(f_path)), 
     110                 }) 
     111        return results 
    79112         
    80113registerType( BigFile, package_name ) 
  • ore.bigfile/trunk/ore/bigfile/skins/bigfile/bigfile_widget.pt

    r2338 r2340  
    108108                                name string:${fieldName}_delete; 
    109109                                onclick string:document.getElementById('${fieldName}_file').disabled=true"/> 
    110          <label for=""> 
    111            Use File from Upload Directory 
    112          </label> 
    113          <div style="padding-left:1.5em;padding-top:0.5em;"> 
    114            <select tal:attributes="name string:${fieldName}_upload_dirfile; 
    115                                    id string:${fieldName}_upload_dirfile"> 
    116              <option value="file_id">File Name (Size 3Gb) (Created 2009/12/12)</option> 
    117            </select> 
    118          </div> 
     110 
     111 
     112         <tal:block tal:condition="here/isDirectoryUploadEnabled" 
     113                    tal:define="upload_files here/getDirectoryFiles"> 
     114           <label for=""> 
     115             Use File from Upload Directory 
     116           </label> 
     117           <div style="padding-left:1.5em;padding-top:0.5em;"> 
     118             <select tal:attributes="name string:${fieldName}_upload_dirfile; 
     119                                     id string:${fieldName}_upload_dirfile"> 
     120               <option  
     121                  tal:repeat="ufile upload_files" 
     122                  tal:attributes="value ufile/path" 
     123                  tal:content="string:${ufile/filename} (Size ${ufile/size})"> 
     124                 File Name (Size 3Gb) (Created 2009/12/12) 
     125               </option> 
     126             </select> 
     127           </div> 
     128         </tal:block> 
     129 
    119130      </div> 
    120131          
  • ore.bigfile/trunk/ore/bigfile/widget.py

    r2338 r2340  
    2020            return value 
    2121 
     22        upload_key = "%s_upload_dirfile"%field.getName() 
     23        if instance.isDirectoryUploadEnabled() and \ 
     24           instance.REQUEST.form.has_key(upload_key): 
     25            file_path = instance.REQUEST.form[upload_key] 
     26            if instance.validateDirectoryFile(file_path): 
     27                return open(file_path), {} 
     28 
    2229        frontend = component.getUtility( interfaces.IFrontendFileServer ) 
    2330        frontend_value = frontend.extractUpload( field, form ) 
Note: See TracChangeset for help on using the changeset viewer.