0


I'm trying to write a plugin for trac but I'm missing sthg. after reading all the tutorials made by the site trac. 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 ="$myfile" /> 

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({
            'myfile': file
        })

Any idea or ideas ?
Thanks

cyberbrain
  • 639
  • 2
  • 6
  • 12
  • Actually the code above is working . The problem was the use of Firefox ...the command file=req.args.get('UploadedFile', 'default_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 – cyberbrain Sep 18 '12 at 13:45

2 Answers2

0

Adding file = os.path.basename(file) will trim the path to just the filename, which should cause the IE version to behave like the Firefox version (the Firefox version should be unaffected).

For an example of the type of thing that you're trying to do, see Trac's web_ui.py. Specifically, take a look at the code for the PluginAdminPanel class' _do_install method. This is the code that's used when installing a new plugin by uploading a .egg file via the administrator's web UI.

bta
  • 43,959
  • 6
  • 69
  • 99
  • I've tried to hack that but it seems that I'm missing sthg. actually I've did the same stuff !! I think this post explains a lot : http://stackoverflow.com/questions/81180/how-to-get-the-file-path-from-html-input-form-in-firefox-3 – cyberbrain Sep 19 '12 at 08:44
0

I have a solution:
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 []

And this is the html code in this case 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 />

Thanks !

cyberbrain
  • 639
  • 2
  • 6
  • 12