Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Pythonplugin
I'm trying to write a plugin for trac.edgewall.org but I'm missing sthg. after reading all the tutorials made by the site trac.edgewall.org.
So I'm trying to upload a file to the sever using the POST method this a simplified example :
    <form id="MyForm" name="input" action="" method="post">
    <label for="attachment">URL :</label>
    <input type="file" name="GanttFile" value=""/>
    </form>
Now I'm trying to process the uploaded file ,read it and do some modifications than save it or ask the user to choose where he wants to save the file (export some data from the trac database)...I'm still blocked at this level :
    def process_request(self, req):
        data = {}
        if req.method=='POST':
            file=req.args.get('GanttFile', 'value')
            # and now I'm blocked !! how can I modify this file
            # and then redirect or save it !
and if I try to display the content of the variable **file** I just get the name of the file not all the path ?
By doing something like this :
    <input type="text" name="file" value ="$file" />
and in my source code :
    def process_request(self, req):
        data = {}
        if req.method=='POST':
            file=req.args.get('GanttFile', 'value')
            # display the content
            data.update({
                'file': file
            })
Any idea or ideas ?
Thanks
Posted 17-Sep-12 20:34pm
Edited 18-Sep-12 22:57pm
v3
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Actually the code above is working .
The problem was the use of Firefox ...the command
file=req.args.get('GanttFile', 'value')

In firefox : just the name of the file
In IE: the absolute path.
 
Is there a manner to make this works for the two browsers ?
Thanks
  Permalink  
v2
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

So I'm putting my code here for those who wants to reuse it or for better suggestions :
 
The Python class :
 

class ProjectPlugin(Component):
    implements(INavigationContributor, IRequestHandler, ITemplateProvider)
 
    # INavigationContributor methods
    def get_active_navigation_item(self, req):
        return 'helloworldv2linkIdentifier'
 
    def get_navigation_items(self, req):
        yield ('mainnav', 'helloworldv2linkIdentifier',
               tag.a('Gantt Export', href=req.href.myapppp()))
 

    # IRequestHandler methods
    def match_request(self, req):
        return re.match(r'/myapppp(?:_trac)?(?:/.*)?$', req.path_info)
 
    def process_request(self, req):
    # add the implements and chek the imports ! and the indents
 
        data = {}
        if req.method=='POST':
            if 'DispFile' in req.args:
                myFile=req.args.get('Fily','value')
                data.update({
                    'myFile': myFile
                })
                dummy=req.args.get('Fily','value').filename
                data.update({
                        'dummy': dummy
                    })
                # file  reading
                mystream = myFile.file.read()
 

        # This tuple is for Genshi (template_name, data, content_type)
        # Without data the trac layout will not appear.
        return 'GanttTemplate.html', data, None
 
    # ITemplateProvider methods
    # Used to add the plugin's templates and htdocs
    def get_templates_dirs(self):
        from pkg_resources import resource_filename
        return [resource_filename(__name__, 'templates')]
 
    def get_htdocs_dirs(self):
        return []
 

 
The GanttTemplate.html file :
 

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://genshi.edgewall.org/"
      xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="layout.html" />
 
  <head>
    <title>Gant Export Tool</title>
  </head>
 
  <body> 
   
 
    <form id="GanttForm1" name="inputForm2" action="" method="POST" enctype="multipart/form-data">       
        <fieldset id="operations" >
            <legend >
                Configuration
            </legend>
           
            <label for="Fily">URL :</label>           
            <input type="file" name="Fily" value=""/><br /><br />
            Dummy variable = $dummy            <br/>
            <input type="submit" name="DispFile" value="Display the file"/><br /><br />
        </fieldset>
    </form>
    <br /><br /><br /><br /><br />
  </body>
</html>
 

  Permalink  
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Your Filters
Interested
Ignored
     
0 Guruprasad.K.Basavaraju 490
1 Sergey Alexandrovich Kryukov 316
2 Shai Vashdi 264
3 OriginalGriff 250
4 praveen_07 115
0 Sergey Alexandrovich Kryukov 9,185
1 OriginalGriff 5,315
2 Peter Leow 4,040
3 Maciej Los 3,535
4 Abhinav S 3,308


Advertise | Privacy | Mobile
Web02 | 2.8.140415.2 | Last Updated 19 Sep 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Use
Layout: fixed | fluid