RE: [Rest2web-develop] RE: File Bug
Brought to you by:
mjfoord
From: Andrew I. <and...@us...> - 2006-04-06 23:49:41
|
Here is some debug output for the root's index: self.dir=; filename=index.txt; entry=rest2web140x62.gif; src=index.txt/rest2web140x62.gif And for projects/rest2web's index: self.dir=projects/rest2web; filename=projects/rest2web/index.txt; entry=halloffamelogo.png; src=projects/rest2web/projects/rest2web/index.txt/halloffamelogo.png This line: src = join(self.dir, dirname(filename), entry) will concatenate the current directory, AND the current directory of a file in the current directory, and THEN the filename. So you end up with DIR/SUBDIR/DIR/SUBDIR/filename.ext. Since you want to merge these 2 loops, perhaps I should wait to add a fix. Here's what I recommend: compare self.dir and dirname(filename)'s results: if they match, use only one. If they don't, use one. I think we need a complete test suite on this one, because you talked about setting the index-file option, which I do not use in combination with the file keyword. Andrew -----Original Message----- From: res...@li... [mailto:res...@li...]On Behalf Of Michael Foord Sent: Thursday, April 06, 2006 12:15 AM To: res...@li... Subject: Re: [Rest2web-develop] RE: File Bug On 06/04/06, Andrew Ittner <and...@us...> wrote: I love one-line fixes. Changed src = join(self.dir, filename, entry) But in SVN I had already changed that line to : src = join(self.dir, dirname(filename), entry) ??? Because I'd like to move the two chunks of code into a single function, that dirname will be needed for the case of index files. I'll make that change and you can test again. :-) Fuzzyman http://ww.voidspace.org.uk/python/index.shtml to src = join(self.dir, entry) It appears that the filename value set the path to "index.txt /thefilename.ext" instead of just "thefilename.ext". Once I removed it, both the index and non-index pages copied files fine (so I did not need to change the other loop's src line). Andrew > -----Original Message----- > From: Fuzzyman [mailto:fuz...@vo...] > Sent: Tuesday, April 04, 2006 2:34 AM > To: res...@li...; Andrew Ittner > Subject: Re: File Bug > > > Hello Andrew, > > I would certainly appreciate your eyes in tracking down this bug. I > don't *think* it can be platform specific though, as there is no > platform specific code (I use platform independent functions from > ``os.path`` and ``shutil`` to do all the work). > > I can see where the bug is happening - for you it seems to be where the > location of the source file is determined. I've pasted the full code in > below - and explained the logic of the first part which determines the > source location. You could add in a print statement to see where it > thinks the source file *should be*, which will give us a clue as to what > is happening. > > The code exists twice (which means it ought to be turned into a method > of Processor). Once in the ``process`` method and once in the > ``processindex`` method. > > When rest2web starts, it changes the current directory to be the 'start' > directory (top level of the site directory tree). > > As it goes through the files, the current directory being worked on is > stored in ``self.dir`` (self being the processor instance). At the top > level directory the following is set in ``__init__``, ``self.dir = > os.curdir``. (Is it possible that this is the cause of the problem ?) > > Following code taken from - > http://rest2web.python-hosting.com/file/trunk/rest2web/restprocessor.py > - from the process method. > > # also copy files (from restindex) into same dir as target > for entry in restindex['file']: > src = join(self.dir, dirname(filename), entry) > ## XXX Add a ``print src`` here :-) > if not os.path.isfile(src): > print ('File "%s" referenced by file keyword missing.' % > entry) > continue > # > target_file_name = url2pathname(target) > targetfile = os.path.normpath(join( > self.target, self.dir, target_file_name)) > dest = join(dirname(targetfile), split(entry)[1]) > comparefile = os.path.normpath(join( > self.compare, self.dir, target_file_name)) > cmp = join(dirname(comparefile), split(entry)[1]) > if comparefiles(src, cmp): > print 'File "%s" identical, skipping.' % entry > continue > if not isdir(dirname(dest)): > os.makedirs(dirname(dest)) > print 'Copying "%s".' % entry > copy2(src, dest) # alias for shutil.copy2 > > I'll step through the code to explain the process. > > for entry in restindex['file']: > > restindex['file'] should be a list of all your file keywords from the > page being processed. > > > src = join(self.dir, dirname(filename), entry) > > ``join`` is an alias for ``os.path.join``. > > ``filename`` is the name of the file being processed. When we are > processing an index file, it could actually be a path relative to > ``self.dir`` if the ``index-file`` option is set. > > You were getting lots of ``File "..." referenced by file keyword > missing.`` errors - so this logic seems to be faulty ? > > If you add the print statement I suggest, then you should be able to > tell what is happening. I'm sure the solution is simple enough - but I > can't see it. > > Thanks > > Fuzzyman > http://www.voidspace.org.uk/python/index.shtml |