Re: [web2py] Re: delete uploads with SQLFORM.factory

2012-12-28 Thread paolo.vall...@gmail.com
Hi, I had a look at sqlform.py, the error comes from the fact that if a
default value is set for the field upload, web2py tries to read it and
store it as the new value for the upload field. As a result it is not
possible to me to edit forms and remove uploads by setting the default
value, this trick doesn't work.
Moreover, I tried to fix the initial error about the missing file, by
setting db.test_img['picture'].default  equal to real path of the file.
This worked well but than, if I understood correctly how web2py works, it
tried to store again the default value as the new value, starting a kind of
loop! That was wrong, and actually this has never worked, it stopped due to
the 'error filename' to long.

The good thing is that by changing this two line (line 1394 of sqlhtml.py)
f = self.table[fieldname].default or ''
fields[fieldname] = f
to:
fields[fieldname] = self.table[fieldname].default
It seems that this solved the issue, but of course, I need something better.


2012/12/27 Paolo 

> Hi Massimo, thank for the answer, I updated the code but the problem is
> still there, I made several tests, no one figured out what is wrong. So
> that I tried to simplify the code as follows:
> db.define_table('test_img',
>
> Field("picture", "upload",
>
>   uploadfolder=os.path.join(request.folder,'uploads','pictures'),
>   uploadseparate=True),
> Field('created_on', 'datetime', default=request.now, writable=False)
> )
>
> def sqlform_add():
> form = SQLFORM.factory(db.test_img, _class='well',
>
>upload=URL('default', 'download'),
>
>uploadfolder=os.path.join(request.folder,
> 'uploads','pictures'),
>uploadseparate=True, table_name='test')
> if form.process(dbio=False).accepted:
> id = db.test_img.insert(**dict(form.vars))
> return response.render('generic.html', dict(form=form))
>
> def sqlform_edit():
> img = db(db.test_img.id>0).select().first()
> db.test_img['picture'].default = img['picture']
> form = SQLFORM.factory(db.test_img, _class='well',
>
>upload=URL('default', 'download'),
>
>uploadfolder=os.path.join(request.folder,
> 'uploads','pictures'),
>uploadseparate=True, table_name='test')
> if form.process(dbio=False).accepted:
> print 'form accepted'
> return response.render('generic.html', dict(form=form))
>
> what I got:
> - adding an img with sqlform_add and then removing it with appadmin  -->
> worked
> - adding an img with appadmin and then removing it with sqlform_edit -->
> failed
> - using both sqlform_add and sqlform_edit --> failed
> Now I am thinking about the way I set the default value, maybe for a field
> as an upload I have to set something more?
>
> Paolo
>
>
> On Thursday, December 27, 2012 9:28:54 PM UTC+1, Massimo Di Pierro wrote:
>>
>> perhaps not the cause of the problem but
>>
>> request.folder+'uploads/**pictures'
>>
>> should be
>>
>> os.path.join(request.folder,'**uploads','pictures')
>>
>> On Thursday, 27 December 2012 00:30:00 UTC-6, Paolo wrote:
>>>
>>> Hi Massimo,
>>> I've just tried to post and then edit with both SQLFORM.factory having
>>> uploadseparate but nothing has changed. The problem is still there,
>>> actually I am making explicitly inserts and  edits.
>>> The whole SQLFORM.factory to edit a field is this:
>>> for field in ['title','description', 'user_contact',
>>> 'picture' ]:
>>> db.club[field].default = club[field]
>>> for field in ['name']:
>>> db.cities[field].default = city[field]
>>> form = SQLFORM.factory(db.club, db.cities, _class='well',
>>>formstyle='bootstrap', showid= False,
>>>upload=URL('default', 
>>> 'download'),uploadfolder
>>> =request.folder+'**uploads/pictures',
>>>uploadseparate=True, 
>>> autodelete=True,table_name
>>> ='club')
>>>
>>>
>>> Paolo
>>>
>>>
>>>
>>> On Thursday, December 27, 2012 12:47:19 AM UTC+1, Massimo Di Pierro
>>> wrote:

 Did you upload the file first and then add uploadseparate/uploadfolder?


 On Wednesday, 26 December 2012 12:49:01 UTC-6, Paolo wrote:
>
> Hi all,
> it seems to me that SQLFORM.factory doesn't honor the uploadseparate
> option because I'am not able to delete the uploaded file with
> SQLFORM.factory
>
> form = SQLFORM.factory(db.club, db.cities, _class='well',
>formstyle='bootstrap', showid= False,
>upload=URL('default', 'download'), uploadfolder
> =request.folder+'**uploads/pictures',
>uploadseparate=True, autodelete=True,table_name
> ='club'  )
>
>
>
> The error:
> Enter code here...2012-12-26 19:38:07,728 - web2py - ERROR - Traceback
> (mo

[web2py] Re: delete uploads with SQLFORM.factory

2012-12-27 Thread Paolo
Hi Massimo, thank for the answer, I updated the code but the problem is 
still there, I made several tests, no one figured out what is wrong. So 
that I tried to simplify the code as follows:
db.define_table('test_img',
Field("picture", "upload", 
  uploadfolder=os.path.join(request.folder,'uploads','pictures'), 
  uploadseparate=True),
Field('created_on', 'datetime', default=request.now, writable=False)
)

def sqlform_add():
form = SQLFORM.factory(db.test_img, _class='well',
   upload=URL('default', 'download'),
   uploadfolder=os.path.join(request.folder,
'uploads','pictures'),  
   uploadseparate=True, table_name='test')
if form.process(dbio=False).accepted:
id = db.test_img.insert(**dict(form.vars))
return response.render('generic.html', dict(form=form))

def sqlform_edit():
img = db(db.test_img.id>0).select().first()
db.test_img['picture'].default = img['picture']
form = SQLFORM.factory(db.test_img, _class='well',
   upload=URL('default', 'download'),
   uploadfolder=os.path.join(request.folder,
'uploads','pictures'),  
   uploadseparate=True, table_name='test')
if form.process(dbio=False).accepted:
print 'form accepted'
return response.render('generic.html', dict(form=form))

what I got:
- adding an img with sqlform_add and then removing it with appadmin  --> 
worked
- adding an img with appadmin and then removing it with sqlform_edit --> 
failed 
- using both sqlform_add and sqlform_edit --> failed
Now I am thinking about the way I set the default value, maybe for a field 
as an upload I have to set something more?

Paolo

On Thursday, December 27, 2012 9:28:54 PM UTC+1, Massimo Di Pierro wrote:
>
> perhaps not the cause of the problem but
>
> request.folder+'uploads/pictures'
>
> should be
>
> os.path.join(request.folder,'uploads','pictures')
>
> On Thursday, 27 December 2012 00:30:00 UTC-6, Paolo wrote:
>>
>> Hi Massimo, 
>> I've just tried to post and then edit with both SQLFORM.factory having  
>> uploadseparate but nothing has changed. The problem is still there, 
>> actually I am making explicitly inserts and  edits. 
>> The whole SQLFORM.factory to edit a field is this:
>> for field in ['title','description', 'user_contact','picture' 
>> ]:
>> db.club[field].default = club[field]
>> for field in ['name']:
>> db.cities[field].default = city[field]
>> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>>formstyle='bootstrap', showid= False,
>>upload=URL('default', 
>> 'download'),uploadfolder
>> =request.folder+'uploads/pictures',  
>>uploadseparate=True, 
>> autodelete=True,table_name
>> ='club')
>>
>>
>> Paolo
>>
>>
>>
>> On Thursday, December 27, 2012 12:47:19 AM UTC+1, Massimo Di Pierro wrote:
>>>
>>> Did you upload the file first and then add uploadseparate/uploadfolder?  
>>>
>>> On Wednesday, 26 December 2012 12:49:01 UTC-6, Paolo wrote:

 Hi all, 
 it seems to me that SQLFORM.factory doesn't honor the uploadseparate 
 option because I'am not able to delete the uploaded file with 
 SQLFORM.factory

 form = SQLFORM.factory(db.club, db.cities, _class='well', 
formstyle='bootstrap', showid= False,
upload=URL('default', 'download'), uploadfolder=
 request.folder+'uploads/pictures',  
uploadseparate=True, autodelete=True, table_name
 ='club'  )

  

 The error:
 Enter code here...2012-12-26 19:38:07,728 - web2py - ERROR - Traceback 
 (most recent call last):
   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 212, 
 in restricted
 exec ccode in environment
   File 
 "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
 , line 123, in 
   File "/home/paolo/Dropbox/git/web2py/gluon/globals.py", line 193, in 
 
 self._caller = lambda f: f()
   File "/home/paolo/Dropbox/git/web2py/gluon/tools.py", line 2935, in f
 return action(*a, **b)
   File 
 "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
 , line 35, in modal
 d = {'form':club_form(c_id=club_id)}
   File 
 "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
 , line 103, in club_form
 if form.process(dbio=False).accepted:
   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2179, inprocess
 self.validate(**kwargs)
   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2118, 
 invalidate
 if self.accepts(**kwargs):
   File "/home/paolo/Dropbox/git/web2py/gluon/sqlhtml.py", line 1408, 
 i

[web2py] Re: delete uploads with SQLFORM.factory

2012-12-27 Thread Massimo Di Pierro
perhaps not the cause of the problem but

request.folder+'uploads/pictures'

should be

os.path.join(request.folder,'uploads','pictures')

On Thursday, 27 December 2012 00:30:00 UTC-6, Paolo wrote:
>
> Hi Massimo, 
> I've just tried to post and then edit with both SQLFORM.factory having  
> uploadseparate but nothing has changed. The problem is still there, 
> actually I am making explicitly inserts and  edits. 
> The whole SQLFORM.factory to edit a field is this:
> for field in ['title','description', 'user_contact','picture' 
> ]:
> db.club[field].default = club[field]
> for field in ['name']:
> db.cities[field].default = city[field]
> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>formstyle='bootstrap', showid= False,
>upload=URL('default', 
> 'download'),uploadfolder
> =request.folder+'uploads/pictures',  
>uploadseparate=True, 
> autodelete=True,table_name
> ='club')
>
>
> Paolo
>
>
>
> On Thursday, December 27, 2012 12:47:19 AM UTC+1, Massimo Di Pierro wrote:
>>
>> Did you upload the file first and then add uploadseparate/uploadfolder?  
>>
>> On Wednesday, 26 December 2012 12:49:01 UTC-6, Paolo wrote:
>>>
>>> Hi all, 
>>> it seems to me that SQLFORM.factory doesn't honor the uploadseparate 
>>> option because I'am not able to delete the uploaded file with 
>>> SQLFORM.factory
>>>
>>> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>>>formstyle='bootstrap', showid= False,
>>>upload=URL('default', 'download'), uploadfolder=
>>> request.folder+'uploads/pictures',  
>>>uploadseparate=True, autodelete=True, table_name=
>>> 'club'  )
>>>
>>>  
>>>
>>> The error:
>>> Enter code here...2012-12-26 19:38:07,728 - web2py - ERROR - Traceback 
>>> (most 
>>> recent call last):
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 212, 
>>> in restricted
>>> exec ccode in environment
>>>   File 
>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
>>> , line 123, in 
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/globals.py", line 193, in 
>>> 
>>> self._caller = lambda f: f()
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/tools.py", line 2935, in f
>>> return action(*a, **b)
>>>   File 
>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
>>> , line 35, in modal
>>> d = {'form':club_form(c_id=club_id)}
>>>   File 
>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
>>> , line 103, in club_form
>>> if form.process(dbio=False).accepted:
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2179, inprocess
>>> self.validate(**kwargs)
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2118, invalidate
>>> if self.accepts(**kwargs):
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/sqlhtml.py", line 1408, 
>>> inaccepts
>>> source_file = open(f, 'rb')
>>> IOError: [Errno 2] No such file or directory: 
>>> '/home/paolo/Dropbox/git/web2py/applications/bikend/club.picture.a4bd97789f289bcc.6c6f676f322e706e67.png'
>>>
>>> It tries to remove the file in the wrong directory. The right one would 
>>> be:
>>> >> Show 
>>> original
>>>
>>

-- 





[web2py] Re: delete uploads with SQLFORM.factory

2012-12-27 Thread Paolo
Hi, I thought about the option requires, right now I have:

requires=[IS_IMAGE(), IS_UPLOAD_FILENAME(extension='jpg|jpeg|png'), IS_IMAGE
(extensions=('jpeg', 'png'))
I thought that as defined, the field could not be empty, so, I tried to 
remove any constrain

requires=None
but then the delete button is no longer shown, why ?!
I've also tried:

requires=[]
but in this case I got the same error as in the other cases.

Paolo





On Thursday, December 27, 2012 7:30:00 AM UTC+1, Paolo wrote:
>
> Hi Massimo, 
> I've just tried to post and then edit with both SQLFORM.factory having  
> uploadseparate but nothing has changed. The problem is still there, 
> actually I am making explicitly inserts and  edits. 
> The whole SQLFORM.factory to edit a field is this:
> for field in ['title','description', 'user_contact','picture' 
> ]:
> db.club[field].default = club[field]
> for field in ['name']:
> db.cities[field].default = city[field]
> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>formstyle='bootstrap', showid= False,
>upload=URL('default', 
> 'download'),uploadfolder
> =request.folder+'uploads/pictures',  
>uploadseparate=True, 
> autodelete=True,table_name
> ='club')
>
>
> Paolo
>
>
>
> On Thursday, December 27, 2012 12:47:19 AM UTC+1, Massimo Di Pierro wrote:
>>
>> Did you upload the file first and then add uploadseparate/uploadfolder?  
>>
>> On Wednesday, 26 December 2012 12:49:01 UTC-6, Paolo wrote:
>>>
>>> Hi all, 
>>> it seems to me that SQLFORM.factory doesn't honor the uploadseparate 
>>> option because I'am not able to delete the uploaded file with 
>>> SQLFORM.factory
>>>
>>> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>>>formstyle='bootstrap', showid= False,
>>>upload=URL('default', 'download'), uploadfolder=
>>> request.folder+'uploads/pictures',  
>>>uploadseparate=True, autodelete=True, table_name=
>>> 'club'  )
>>>
>>>  
>>>
>>> The error:
>>> Enter code here...2012-12-26 19:38:07,728 - web2py - ERROR - Traceback 
>>> (most 
>>> recent call last):
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 212, 
>>> in restricted
>>> exec ccode in environment
>>>   File 
>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
>>> , line 123, in 
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/globals.py", line 193, in 
>>> 
>>> self._caller = lambda f: f()
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/tools.py", line 2935, in f
>>> return action(*a, **b)
>>>   File 
>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
>>> , line 35, in modal
>>> d = {'form':club_form(c_id=club_id)}
>>>   File 
>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py"
>>> , line 103, in club_form
>>> if form.process(dbio=False).accepted:
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2179, inprocess
>>> self.validate(**kwargs)
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2118, invalidate
>>> if self.accepts(**kwargs):
>>>   File "/home/paolo/Dropbox/git/web2py/gluon/sqlhtml.py", line 1408, 
>>> inaccepts
>>> source_file = open(f, 'rb')
>>> IOError: [Errno 2] No such file or directory: 
>>> '/home/paolo/Dropbox/git/web2py/applications/bikend/club.picture.a4bd97789f289bcc.6c6f676f322e706e67.png'
>>>
>>> It tries to remove the file in the wrong directory. The right one would 
>>> be:
>>> >> Show 
>>> original
>>>
>>

-- 





[web2py] Re: delete uploads with SQLFORM.factory

2012-12-26 Thread Paolo
Hi Massimo, 
I've just tried to post and then edit with both SQLFORM.factory having  
uploadseparate but nothing has changed. The problem is still there, 
actually I am making explicitly inserts and  edits. 
The whole SQLFORM.factory to edit a field is this:
for field in ['title','description', 'user_contact','picture' ]:
db.club[field].default = club[field]
for field in ['name']:
db.cities[field].default = city[field]
form = SQLFORM.factory(db.club, db.cities, _class='well', 
   formstyle='bootstrap', showid= False,
   upload=URL('default', 
'download'),uploadfolder
=request.folder+'uploads/pictures',  
   uploadseparate=True, 
autodelete=True,table_name
='club')


Paolo



On Thursday, December 27, 2012 12:47:19 AM UTC+1, Massimo Di Pierro wrote:
>
> Did you upload the file first and then add uploadseparate/uploadfolder?  
>
> On Wednesday, 26 December 2012 12:49:01 UTC-6, Paolo wrote:
>>
>> Hi all, 
>> it seems to me that SQLFORM.factory doesn't honor the uploadseparate 
>> option because I'am not able to delete the uploaded file with 
>> SQLFORM.factory
>>
>> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>>formstyle='bootstrap', showid= False,
>>upload=URL('default', 'download'), uploadfolder=
>> request.folder+'uploads/pictures',  
>>uploadseparate=True, autodelete=True, table_name=
>> 'club'  )
>>
>>  
>>
>> The error:
>> Enter code here...2012-12-26 19:38:07,728 - web2py - ERROR - Traceback (most 
>> recent call last):
>>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 212, 
>> inrestricted
>> exec ccode in environment
>>   File 
>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py",line
>>  
>> 123, in 
>>   File "/home/paolo/Dropbox/git/web2py/gluon/globals.py", line 193, in 
>> 
>> self._caller = lambda f: f()
>>   File "/home/paolo/Dropbox/git/web2py/gluon/tools.py", line 2935, in f
>> return action(*a, **b)
>>   File 
>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py",line
>>  
>> 35, in modal
>> d = {'form':club_form(c_id=club_id)}
>>   File 
>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py",line
>>  
>> 103, in club_form
>> if form.process(dbio=False).accepted:
>>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2179, inprocess
>> self.validate(**kwargs)
>>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2118, invalidate
>> if self.accepts(**kwargs):
>>   File "/home/paolo/Dropbox/git/web2py/gluon/sqlhtml.py", line 1408, 
>> inaccepts
>> source_file = open(f, 'rb')
>> IOError: [Errno 2] No such file or directory: 
>> '/home/paolo/Dropbox/git/web2py/applications/bikend/club.picture.a4bd97789f289bcc.6c6f676f322e706e67.png'
>>
>> It tries to remove the file in the wrong directory. The right one would 
>> be:
>> /home/paolo/Dropbox/git/https://groups.google.com/group/web2py/msg/77f8e5478e8b77b8?dmode=source&output=gplain&noredirect>
>>
>

-- 





[web2py] Re: delete uploads with SQLFORM.factory

2012-12-26 Thread Massimo Di Pierro
Did you upload the file first and then add uploadseparate/uploadfolder?  

On Wednesday, 26 December 2012 12:49:01 UTC-6, Paolo wrote:
>
> Hi all, 
> it seems to me that SQLFORM.factory doesn't honor the uploadseparate 
> option because I'am not able to delete the uploaded file with 
> SQLFORM.factory
>
> form = SQLFORM.factory(db.club, db.cities, _class='well', 
>formstyle='bootstrap', showid= False,
>upload=URL('default', 'download'), uploadfolder=
> request.folder+'uploads/pictures',  
>uploadseparate=True, autodelete=True, table_name=
> 'club'  )
>
>  
>
> The error:
> Enter code here...2012-12-26 19:38:07,728 - web2py - ERROR - Traceback (most 
> recent call last):
>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 212, 
> inrestricted
> exec ccode in environment
>   File 
> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py",line 
> 123, in 
>   File "/home/paolo/Dropbox/git/web2py/gluon/globals.py", line 193, in 
> 
> self._caller = lambda f: f()
>   File "/home/paolo/Dropbox/git/web2py/gluon/tools.py", line 2935, in f
> return action(*a, **b)
>   File 
> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py",line 
> 35, in modal
> d = {'form':club_form(c_id=club_id)}
>   File 
> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py",line 
> 103, in club_form
> if form.process(dbio=False).accepted:
>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2179, inprocess
> self.validate(**kwargs)
>   File "/home/paolo/Dropbox/git/web2py/gluon/html.py", line 2118, invalidate
> if self.accepts(**kwargs):
>   File "/home/paolo/Dropbox/git/web2py/gluon/sqlhtml.py", line 1408, inaccepts
> source_file = open(f, 'rb')
> IOError: [Errno 2] No such file or directory: 
> '/home/paolo/Dropbox/git/web2py/applications/bikend/club.picture.a4bd97789f289bcc.6c6f676f322e706e67.png'
>
> It tries to remove the file in the wrong directory. The right one would be:
> /home/paolo/Dropbox/git/https://groups.google.com/group/web2py/msg/77f8e5478e8b77b8?dmode=source&output=gplain&noredirect>
>

--