Attachment 'fix-attachfile-filename.diff'

Download

   1 --- orig/MoinMoin/action/AttachFile.py
   2 +++ mod/MoinMoin/action/AttachFile.py
   3 @@ -400,31 +400,23 @@
   4      # check file & mimetype
   5      fileitem = request.form['file'][0]
   6      
   7 -    #does not work with new method in request.py:
   8 -    #if not fileitem.file:
   9 -    #    error_msg(pagename, request,
  10 -    #        _("Filename of attachment not specified!"))
  11 -    #    return
  12 -
  13      # get directory, and possibly create it
  14      attach_dir = getAttachDir(pagename, create=1)
  15  
  16      # make filename
  17 -    #filename = fileitem.filename
  18 -    rename = ''
  19 +    filename = None
  20 +    if request.form.has_key('file__filename__'):
  21 +        filename = request.form['file__filename__']
  22 +    rename = None
  23      if request.form.has_key('rename'):
  24          rename = request.form['rename'][0].strip()
  25  
  26 -    #target = filename
  27 -    #target = target.replace(':', '/')
  28 -    #target = target.replace('\\', '/')
  29 -    #target = target.split('/')[-1]
  30 -
  31 -    # if we use twisted, "rename" field is NOT optional, but currently
  32 -    # the only way to specify a filename, because we can't access the
  33 -    # client filename
  34 +    # if we use twisted, "rename" field is NOT optional, because we
  35 +    # can't access the client filename
  36      if rename:
  37 -        filename = target = rename.strip()
  38 +        filename = target = rename
  39 +    elif filename:
  40 +        target = filename
  41      else:
  42          error_msg(pagename, request,
  43              _("Filename of attachment not specified!"))
  44 
  45 
  46 --- orig/MoinMoin/request.py
  47 +++ mod/MoinMoin/request.py
  48 @@ -202,6 +202,30 @@
  49      def setup_args(self):
  50          return {}
  51  
  52 +    def _setup_args_from_cgi_form(self, form=None):
  53 +        import types, cgi
  54 +        
  55 +        if form is None:
  56 +            form = cgi.FieldStorage()
  57 +
  58 +        args = {}
  59 +        for key in form.keys():
  60 +            values = form[key]
  61 +            if not isinstance(values, types.ListType):
  62 +                values = [values]
  63 +            fixedResult = []
  64 +            for i in values:
  65 +                if isinstance(i, cgi.MiniFieldStorage):
  66 +                    fixedResult.append(i.value)
  67 +                elif isinstance(i, cgi.FieldStorage):
  68 +                    fixedResult.append(i.value)
  69 +                    # multiple uploads to same form field are stupid!
  70 +                    if i.filename:
  71 +                        args[key+'__filename__']=i.filename
  72 +
  73 +            args[key] = fixedResult
  74 +        return args
  75 +
  76      def recodePageName(self, pagename):
  77          # check for non-URI characters and then handle them according to
  78          # http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.2.1
  79 @@ -392,7 +416,7 @@
  80  
  81          return self.finish()
  82  
  83 -	
  84 +
  85      def http_redirect(self, url):
  86          """ Redirect to a fully qualified, or server-rooted URL """
  87          if url.find("://") == -1:
  88 @@ -455,22 +479,7 @@
  89              self.opened_logs = 1
  90  
  91      def setup_args(self):
  92 -        import types, cgi
  93 -        form = cgi.FieldStorage()
  94 -
  95 -        args = {}
  96 -        for key in form.keys():
  97 -            values = form[key]
  98 -            if not isinstance(values, types.ListType):
  99 -                values = [values]
 100 -            fixedResult = []
 101 -            for i in values:
 102 -                if isinstance(i, cgi.MiniFieldStorage):
 103 -                    i = i.value
 104 -                    fixedResult.append(i)
 105 -                        
 106 -            args[key] = fixedResult
 107 -        return args
 108 +        return self._setup_args_from_cgi_form()
 109          
 110      def read(self):
 111          """ Read from input stream.
 112 @@ -629,8 +638,8 @@
 113          if not self.opened_logs:
 114              sys.stderr = open(os.path.join(config.data_dir, 'error.log'), 'at')
 115              self.opened_logs = 1
 116 -	    
 117 -	    
 118 +
 119 +
 120      #############################################################################
 121      ### Accessors
 122      #############################################################################
 123 @@ -833,22 +842,7 @@
 124              self.opened_logs = 1
 125  
 126      def setup_args(self):
 127 -        import types, cgi
 128 -        form = cgi.FieldStorage()
 129 -
 130 -        args = {}
 131 -        for key in form.keys():
 132 -            values = form[key]
 133 -            if not isinstance(values, types.ListType):
 134 -                values = [values]
 135 -            fixedResult = []
 136 -            for i in values:
 137 -                if isinstance(i, cgi.MiniFieldStorage):
 138 -                    i = i.value
 139 -                    fixedResult.append(i)
 140 -                        
 141 -            args[key] = fixedResult
 142 -        return args
 143 +        return self._setup_args_from_cgi_form()
 144          
 145      def read(self):
 146          """ Read from input stream.
 147 @@ -970,12 +964,12 @@
 148                  values = [values]
 149              fixedResult = []
 150              for i in values:
 151 -                if isinstance(i, util.Field): 
 152 -                    i = i.value
 153 -                    fixedResult.append(i)
 154 -                elif isinstance(i, util.StringField): 
 155 -                    i = i.value
 156 -                    fixedResult.append(i)
 157 +                if isinstance(i, util.Field):
 158 +                    fixedResult.append(i.value)
 159 +                    if i.filename:
 160 +                        args[key+'__filename__']=i.filename
 161 +                elif isinstance(i, util.StringField):
 162 +                    fixedResult.append(i.value)
 163                          
 164              args[key] = fixedResult
 165          return args
 166 @@ -1087,20 +1081,7 @@
 167          RequestBase.__init__(self, properties)
 168  
 169      def setup_args(self):
 170 -        import types, cgi
 171 -        args = {}
 172 -        for key in self.fcgform.keys():
 173 -            values = self.fcgform[key]
 174 -            if not isinstance(values, types.ListType):
 175 -                values = [values]
 176 -            fixedResult = []
 177 -            for i in values:
 178 -                if isinstance(i, cgi.MiniFieldStorage):
 179 -                    i = i.value
 180 -                    fixedResult.append(i)
 181 -                        
 182 -            args[key] = fixedResult
 183 -        return args
 184 +        return self._setup_args_from_cgi_form(self.fcgform)
 185  
 186      def read(self):
 187          """ Read from input stream.
 188 @@ -1120,8 +1101,8 @@
 189  
 190      def open_logs(self):
 191          return
 192 -	    
 193 -	    
 194 +
 195 +
 196      #############################################################################
 197      ### Accessors
 198      #############################################################################

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2003-12-31 09:44:19, 6.2 KB) [[attachment:fix-attachfile-filename.diff]]
  • [get | view] (2004-01-04 08:55:32, 0.6 KB) [[attachment:fix-twisted-httphost.diff]]
  • [get | view] (2004-01-16 08:39:21, 1.6 KB) [[attachment:macro-sendpage.diff]]
  • [get | view] (2003-12-31 09:20:52, 7.0 KB) [[attachment:raise-but-exit.diff]]
  • [get | view] (2003-12-07 18:15:55, 0.2 KB) [[attachment:version.txt]]
  • [get | view] (2003-12-07 18:15:55, 3.1 KB) [[attachment:wikiaction-2003-02-13.diff]]
  • [get | view] (2003-12-07 18:15:55, 3.2 KB) [[attachment:wikiutil-2003-02-13.diff]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.