[web2py] using generateDS web2py application wizard for making web applications from xsd files
Over the weekend I was working on and exploring the possibility of using generateDS.py http://www.rexx.com/~dkuhlman/generateDS.html to create python objects for an xsd file and modifyiing its included django script to instead create the web2py.metadata file that comes with the appadmin application wizard. Anybody have thoughts or experience? -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: RuntimeError: Unable to handle upload
Hi Alan. Seeing your code must have helped because I did get it to run. The following shows a demo script with functions to upload a file and download a file utilizing a table containing a blob field. It worked twice on a pdf for me. Note that I had to change the filename type from 'upload' to 'string' in order to bypass an error message in the dal._attempt_upload(fields). # -*- coding: cp1252 -*- import os, sys from gluon import DAL, Field, fileutils from easygui import fileopenbox, diropenbox db = DAL('oracle://...', auto_import=True) ## Still playing with this one to try and avoid re-defining table? db.define_table('wiki_media', Field('filename', 'upload', uploadfield='filedata'), Field('title', 'string'), Field('filedata', 'blob'), migrate=False, fake_migrate=True) def upload_file(): demonstrate uploading a file to database programatically, stream=None file_path=fileopenbox(msg='Pick a file', title='Picking files', default=None) if file_path: print 'file_path= ' + file_path stream = open(file_path, 'rb') else: print 'file_path undefined' return None path,filename = os.path.split(file_path) #workaround to possible suprise bug in web2py? db.wiki_media.filename.type='string' file_id=db.wiki_media.insert(filename=db.wiki_media.filename.store(stream, filename=filename, path=path), filedata=stream.read()) db.commit() stream.close() if file_id: print 'file_id=' + str(file_id) return file_id def download_file(file_id, table='wiki_media'): In this demo will download the file with the given file_id from the given table. Table must have a filename field of type upload and a filedata field of type blob table = db[table] if file_id: print 'file_id=' + str(file_id) else: print 'file_id is empty' return None directory=diropenbox(title='Select destination directory') record = table(table.id==file_id) (filename, stream) = table.filename.retrieve(record.filename) pathname = os.path.join(directory,filename) import shutil #In fileutils.py the developer mentioned he suspects a bug in shutil.copyfileobj #but I didn't know how to get the length of a cStringIO object to #use fileutils.copystream() shutil.copyfileobj(stream,open(pathname,'wb')) stream.close() return Hope it helps someone. -Bill -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: RuntimeError: Unable to handle upload
Hi Alan, Just now getting back to this days later... Your code also threw the same error so before I un-commented the if statements in dal.py I added some print statements and can see the list of fields, then the name of the filename field as 'filename' followed by wiki_media.filename.9b724ad17775d60e.63617266696c65732e747874.txt as the value being tested for a 'file' attribute and a 'filename' attribute before calling the store function...(again?) This is confusing so I guess I'll do as you suggest and take out those lines of code. import test_tamoto_rpc as trpc trpc.upload_file() C:\Users\bthayer\Documents\car\carfiles.txt wiki_media.id wiki_media.filedata wiki_media.cell_id wiki_media.lib_id wiki_media.layout_id wiki_media.wiki_page wiki_media.title wiki_media.meas_id wiki_media.filename filename wiki_media.filename.9b724ad17775d60e.63617266696c65732e747874.txt Traceback (most recent call last): File console, line 1, in module File C:\web2py-1045bab06391\web2py-1045bab06391\applications\TAMOTO\private\test_tamoto_rpc.py, line 38, in upload_file filedata=stream.read()) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\dal.py, line 8280, in insert self._attempt_upload(fields) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\dal.py, line 8262, in _attempt_upload raise RuntimeError(Unable to handle upload) RuntimeError: Unable to handle upload On Tuesday, January 29, 2013 8:00:58 PM UTC-6, Alan Etkin wrote: Replacing the store call with this should avoid the error: file_id=db.wiki_media.insert(filename=db.wiki_media.filename.store(stream,filename =a file name, path=file_path) -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: RuntimeError: Unable to handle upload
So I just replaced the first if statement with 'if True:' so that the code would execute. Looks like a unicode object does not have an attribute 'file' (InteractiveConsole) import test_tamoto_rpc as trpc trpc.upload_file() C:\Users\bthayer\Documents\car\carfiles.txt wiki_media.id wiki_media.filedata wiki_media.cell_id wiki_media.lib_id wiki_media.layout_id wiki_media.wiki_page wiki_media.title wiki_media.meas_id wiki_media.filename filename wiki_media.filename.a8857e792725cc9c.63617266696c65732e747874.txt Traceback (most recent call last): File console, line 1, in module File C:\web2py-1045bab06391\web2py-1045bab06391\applications\TAMOTO\private\test_tamoto_rpc.py, line 38, in upload_file filedata=stream.read()) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\dal.py, line 8281, in insert self._attempt_upload(fields) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\dal.py, line 8258, in _attempt_upload new_name = field.store(value.file,filename=value.filename) AttributeError: 'unicode' object has no attribute 'file' -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: RuntimeError: Unable to handle upload
Yes. That is what I meant. On Saturday, February 2, 2013 1:49:55 PM UTC-6, Alan Etkin wrote: Your code also threw the same error so before I un-commented the if statements in dal.py I added some print statements Did you try the store command as I posted it (passing pathname and filename) without changing dal.py? What is the error output? -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: web2py world conference 2013
I'll mention it on my Dallas Python mailing list too. Don't know how many web2py users we have in Texas though. -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: RuntimeError: Unable to handle upload
Hi Allen, Yes the book has the example as written because I am uploading directly to the database. Otherwise I get an error that store requires a value for uploadfolder. Sorry but I've been looking for how t temporarily not let the dal catch the error. I tried running my app with the -S option but it's the same result. Regards, Bill On Tuesday, January 29, 2013 5:20:08 AM UTC-6, Alan Etkin wrote: I am attempting to write a function that will eventually go in to a migration script to upload legacy data files. As you can see I Unable to handle load is too generic for this case. I'd better temporarily let dal not to catch the error so there's a more precise description of it. Perhaps there are encoding errors when writing the stream output?. BTW, Is that the recommended way of adding upload fields data programatically (calling the .store method)? -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] Re: ORA-01722: invalid number - Does field order matter?
Hi Massimo, Is there a way that you know to get the SQL call so that I can verify the values are going to the correct place? Regards, Bill On Monday, January 28, 2013 9:48:57 AM UTC-6, Massimo Di Pierro wrote: You are right that db.table.insert(**args) the order of the args in the INSERT is not specified. This should not be a problem. If you want to a field to map to NUMBER instead of INT, you can make your own adapter: from gluon import * from gluon.dal import ADAPTERS, OracleAdapter class MyOracleAdapter(OracleAdapter): pass MyOracleAdapter.types['integre'] = 'number' ADAPTERS['oracle'] = MyOracleAdapter On Sunday, 27 January 2013 21:22:38 UTC-6, Bill Thayer wrote: Hello, I am borrowing code from the CategoryPlugin slicehttp://www.web2pyslices.com/slice/show/1354/hierarchical-category-treeand ran into a unique Oracle error but I suspect that the insert command is not inserting by named fields. From my stack trace the argument below shows the columns in the cellview table in a different order than the fields array. table-id,name,description,left,right fields-description,right,name,left Function argument list (self=gluon.dal.OracleAdapter object, table=Table cellview (id,name,description,left,right), fields=[(gluon.dal.Field object, 'Top Level'), (gluon.dal.Field object, 2), (gluon.dal.Field object, '3mi25gan-on-sic'), (gluon.dal.Field object, 1)]) I've combed through the OracleAdapter in the dal, changed the 'integer' mapping from 'INT' to 'NUMBER' because that's what my SQL developer keeps changing it to. Anyone have a workaround? -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] 'NoneType' object has no attribute 'split'
I think I figured this one out so I am posting the solution. On the manages wiki_pages page from the manage pages memu item, I would click on a media button and get the error below. Turns out that in the course of testing my application I had uploaded files without a title and web2py does not like media files without a title. Had to go in to appadmin and delete the media files without a title and it seems to be working now. The confusing thing is that the error message was wanting to split the title at '.' which you might expect for a filename but why a title? Using web2py™(2, 4, 1, 'alpha.2', datetime.datetime(2013, 1, 25, 15, 35, 52)) PythonPython 2.7.3: C:\Python27\python.exe (prefix: C:\Python27) Traceback 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Traceback (most recent call last): File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\restricted.py, line 212, in restricted exec ccode in environment File C:/web2py-1045bab06391/web2py-1045bab06391/applications/TAMOTO/controllers/default.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/default.py, line 147, in module File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\globals.py, line 193, in lambda self._caller = lambda f: f() File C:/web2py-1045bab06391/web2py-1045bab06391/applications/TAMOTO/controllers/default.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/default.py, line 10, in index return auth.wiki() File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\tools.py, line 3344, in wiki wiki = self._wiki() File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\tools.py, line 5047, in __call__ return self.editmedia(request.args(1) or 'index') File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\tools.py, line 5222, in editmedia user_signature=False) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\sqlhtml.py, line 2286, in grid value = field.represent(value, row) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\tools.py, line 5199, in lambda (id, IS_SLUG.urlify(row.title.split('.')[0]), AttributeError: 'NoneType' object has no attribute 'split' -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] RuntimeError: Unable to handle upload
I am attempting to write a function that will eventually go in to a migration script to upload legacy data files. As you can see I use the DAL and define the wiki_media table. The function below looks just like the example in the book.http://web2py.com/books/default/chapter/29/06?search=programmaticallyHowever when I run it from the command line I get an error that the _attempt_upload(fields) method cannot handle the upload. See below. Doe anyone know of a way to insert files into the database with a script? I am using an upload field instead of upload directory. Also using a recent trunk version of web2py. import os, sys from gluon import DAL, Field from easygui import fileopenbox, diropenbox db = DAL('oracle://...', auto_import=True) db.define_table('wiki_media', Field('wiki_page', 'reference wiki_page'), Field('title', required=True), Field('filename', 'upload', required=True), Field(filedata, blob), migrate=False) db.wiki_media.filename.uploadfield='filedata' file_id = None def upload_file(): demonstrate uploading a file programmatically, stream=None file_path=fileopenbox(msg='Pick a file', title='Choose file', default=None) if file_path: print 'file_path= '.join([file_path]) stream = open(file_path, 'rb') else: return None file_id=db.wiki_media.insert(filename=db.wiki_media.filename.store(stream,file_path), filedata=stream.read()) stream.close() return file_id Error: Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\bthayercd %WEB2PY_HOME% C:\web2py-1045bab06391\web2py-1045bab06391cd appl*/TAMOTO C:\web2py-1045bab06391\web2py-1045bab06391\applications\TAMOTOcd private C:\web2py-1045bab06391\web2py-1045bab06391\applications\TAMOTO\privatepython Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32 Type help, copyright, credits or license for more information. import test_tamoto_rpc as trpc trpc.upload_file() C:\Users\bthayer\Documents\car\carfiles.txt Traceback (most recent call last): File stdin, line 1, in module File test_tamoto_rpc.py, line 33, in upload_file filedata=stream.read()) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\dal.py, line 8276, in insert self._attempt_upload(fields) File C:\web2py-1045bab06391\web2py-1045bab06391\gluon\dal.py, line 8258, in _attempt_upload raise RuntimeError(Unable to handle upload) RuntimeError: Unable to handle upload Thanks for your time. -Bill -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [web2py] Re: How do I import `gluon.dal` from Python shell?
I defined WEB2PY_HOME in my environment variables and then added %WEB2PY_HOME% to my path system variable. This way I can change it's value depending on the version I am developing on at the time. -Bill On Monday, January 28, 2013 9:49:12 AM UTC-6, Alec Taylor wrote: On Tue, Jan 29, 2013 at 12:07 AM, Bruno Rocha rocha...@gmail.comjavascript: wrote: Is there the option to put the gluon folder on your site-packages or dist-packages folder Or maybe, start web2py in shell mode? -- Perfect, thanks. Had forgotten about the shell option. -- --- You received this message because you are subscribed to the Google Groups web2py-users group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[web2py] ORA-01722: invalid number - Does field order matter?
Hello, I am borrowing code from the CategoryPlugin slicehttp://www.web2pyslices.com/slice/show/1354/hierarchical-category-treeand ran into a unique Oracle error but I suspect that the insert command is not inserting by named fields. From my stack trace the argument below shows the columns in the cellview table in a different order than the fields array. table-id,name,description,left,right fields-description,right,name,left Function argument list (self=gluon.dal.OracleAdapter object, table=Table cellview (id,name,description,left,right), fields=[(gluon.dal.Field object, 'Top Level'), (gluon.dal.Field object, 2), (gluon.dal.Field object, '3mi25gan-on-sic'), (gluon.dal.Field object, 1)]) I've combed through the OracleAdapter in the dal, changed the 'integer' mapping from 'INT' to 'NUMBER' because that's what my SQL developer keeps changing it to. Anyone have a workaround? --
[web2py] Re: Exposing validators as JSON?
Nice! Looking for loads_json in serializers.py; Found custom_json instead that takes an object, checks it for a custom attribute and a callable. then returns the objects custom_json() method...[I call it a method but in Python I guess it's an attribute?]...Basically, before calling json() I need to decide if I want to override the .default() call or subclass JSONEncoder and set session.vars._default_encoder to my subclass. I'll give the spreadsheet a try as well. So I can avoid the gluon xml code being displayed. Thank you.. Reading the docs and taking notes left them here for searchable reference: custom_json is a parameter to json() that calls json_parser.dumps...where json_parser is either json or simplejson imported custom_json gets assigned to the defualt parameter in dumps dumps is found in __init__.py (nice documnetation) and returns the JSONEncoder that calls dumps() notes say;``default(obj)`` is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. So dumps takes several arguments that are not available if you use the On Monday, January 21, 2013 5:20:33 AM UTC-6, Alan Etkin wrote: For me, a 'json:reference attributes' field would basically be like a list: string field but with only one string holding a json object of a variable list of attributes with their value and unit. Then you can do simply: db.define_table(... Field(a_list_of_json_objects, json)) When you get the db record, it is represented as Python object for server-side processing. If you stored a json object, then you get a Python dict For explicit json export do Rows/Row object.as_json() So the enhancement would: use a select widget ... It seems to me that you could build a custom widget and assign it to the json field. have the ability to assign a grid object for viewing rows where the column names match the fields in the referenced table Also consider using contrib.spreadsheet and the data argument (for editing a db) BTW, if you need to do custom deserialize/serialize of json, you can do: from serializers import loads_json, json --
[web2py] Re: 'DAL' object has no attribute 'auth_wiki' - trunk version
Yes. working now. Thanks. On Friday, January 18, 2013 9:28:27 AM UTC-6, Alan Etkin wrote: Working on trying out the json support but db won't get past this error. Fixed in trunk. Please check it works for you (it did for me) --
[web2py] Re: Exposing validators as JSON?
Hi Alan, Thank you for your work on the json data type. (Sorry for getting your name wrong in my other post). These discussions are great for thinking through my problem. Yes I would need to post json data into the database and also search the data, display and edit it also. My app is just one tool in a design department storing design data for import/export to EDA sofware and test lab benches. An 'attributes' table holds different design parameters of designs and models. For me, a 'json:reference attributes' field would basically be like a list: string field but with only one string holding a json object of a variable list of attributes with their value and unit. The actual attributes table simply holds a list of available parameters (with default values, types, usage and unit) users can select from to build their parameter list. Kind of like a one to many relationship except there is no reference to other tables and the list can vary. Perhaps the word reference is not quite right then but I was reaching for some way to succinctly describe it. So the enhancement would: use a select widget for the referenced table used in creating/adding/removing Rows of values have the ability to assign a grid object for viewing rows where the column names match the fields in the referenced table perhaps a widget should instead behave like the web2py app wizard where another row of blank text fields can be added to edit your values -- a drop down would have to be used in place of a select widget with editable=referenced_table[field].writable and visible=referenced_table[field].readable match json data types to widgets where multiple always = True. with json stored as a string then searching should be easy. This is only my vision so someone else may have a different view of a 'json:reference my_other_table' usage. -Bill On Sunday, January 20, 2013 12:54:00 PM UTC-6, Alan Etkin wrote: would a 'json:reference mytable' field type similar to 'list:reference mytable' or perhaps a format=lambda row: row.json() be possible? What would be the enhancement required specifically? Do you need to PUT/POST json data into a DAL database with a service? If you need to return the table structure, you can do something like: table = dict() for f in db.tablename: if isinstance(f.requires, list): requires = [type(r) for r in f.requires] else: requires = [type(f.requires),] table[f.name] = {default: f.default, type: f.type, requires:requires } If you return the table object in the controller, the generic json handler should serialize it automatically. Something similar could be implemented for validation of forms --
[web2py] Re: json validation
Thank you, My revised function looks like this: def json_parameters(param_names): takes an array of parameter names which are attributes to a design cell then looks up the default value and unit in the attributes table and returns an array of json dictionary objects to be inserted in the cell's parameters field as a json object if param_names = [L, len, R, INST, model, REF] { L: { value: 0.001, unit: nH }, len: { value: 1, unit: ??m }, R: { value: 0.5, unit: Ohm }, INST: { value: i, unit: TEXT }, model: { value: m, unit: TEXT }, REF: { value: r, unit: TEXT } } } params={} for a in param_names: # dbg.set_trace() rows = db(db.attribute.name.lower()==a.lower()).select(db.attribute.name, db.attribute.default_value, db.attribute.unit) row = rows[0].as_dict() param=dict(value=row['default_value'],unit=row['unit']) named={row['name']:param} params.update(named) # return json(params) On Sunday, January 20, 2013 5:01:35 AM UTC-6, Alan Etkin wrote: CONTROLLER FUNCTION: (the myobj value is copied from my cell's edit page after being inserted into my Oracle DB. The json field type does not validate insert/update for values stored programatically, validation is performed when you send values with the json widget. However, you could validate your input this way: print IS_JSON()(No JSON)[1] is None False print IS_JSON()('{a: 1, b: 2}')[1] is None True --
[web2py] Re: Exposing validators as JSON?
Borrowing code from SQLFORM.dictform I think I'm close to rendering nested dicts dumped from json: The browser is simply writing a bunch of the gluon.html.(SPAN|FIELDSET)objects. I did try to return xml(form) but received an error saying: Generator expression must be parenthesized if not sole argument from contrib.simplejson import loads, dumps from types import * AUTOTYPES = { type(u''): ('unicode', None), ##Added type(''): ('string', None), type(True): ('boolean', None), type(1): ('integer', IS_INT_IN_RANGE(-1e12, +1e12)), type(1.0): ('double', IS_FLOAT_IN_RANGE()), type([]): ('list:string', None), type({}): ('text', IS_JSON()), ##Added type(datetime.date.today()): ('date', IS_DATE()), type(datetime.datetime.today()): ('datetime', IS_DATETIME()) } def makefields(dictionary): Code modified from SQLFORM.dictform to recursivley process nested dicts fields = [] for key, value in sorted(dictionary.items()): #dbg.set_trace() t, requires = AUTOTYPES.get(type(value), (None, None)) if t and isinstance(value,dict): ## added the type checking for value to see if is a dict fields.append(SPAN('{}'.format(key))) ## Needed to identify the nested dict fields.extend(makefields(value)) ## basic recursion elif t: fields.append(FIELDSET('{}'.format(key), INPUT(_name='{}'.format(key), _type='{}'.format('text'), #perhaps the AUTOTYPES should set t? _value='{}'.format(value), value='{}'.format(value), requires=requires))) return fields @auth.requires_login() def edit_parameters(): Display a form to edit the parameters rendered from a json object table=db[request.args[0]] record=table(request.args[1]) dictionary = record.parameters ## a json field type form = FORM('Edit Parameters', INPUT(_type='submit'), _action='', _method='post') fields=makefields(dictionary) form.insert(1,fields) dbg.set_trace() if form.validate(keepvalues=True): record.parameters.update(form.vars) table.update(record) return form --
[web2py] Re: Exposing validators as JSON?
On Sunday, January 20, 2013 11:52:59 PM UTC-6, Bill Thayer wrote: Borrowing code from SQLFORM.dictform I think I'm close to rendering nested dicts dumped from json: The browser is simply writing a bunch of the gluon.html.(SPAN|FIELDSET)objects. I did try to return xml(form) but received an error saying: Generator expression must be parenthesized if not sole argument from contrib.simplejson import loads, dumps from types import * AUTOTYPES = { type(u''): ('unicode', None), ##Added type(''): ('string', None), type(True): ('boolean', None), type(1): ('integer', IS_INT_IN_RANGE(-1e12, +1e12)), type(1.0): ('double', IS_FLOAT_IN_RANGE()), type([]): ('list:string', None), type({}): ('text', IS_JSON()), ##Added type(datetime.date.today()): ('date', IS_DATE()), type(datetime.datetime.today()): ('datetime', IS_DATETIME()) } def makefields(dictionary): Code modified from SQLFORM.dictform to recursivley process nested dicts fields = [] for key, value in sorted(dictionary.items()): #dbg.set_trace() t, requires = AUTOTYPES.get(type(value), (None, None)) if t and isinstance(value,dict): ## added the type checking for value to see if is a dict fields.append(SPAN('{}'.format(key))) ## Needed to identify the nested dict fields.extend(makefields(value)) ## basic recursion elif t: fields.append(FIELDSET('{}'.format(key), INPUT(_name='{}'.format(key), _type='{}'.format('text'), #perhaps the AUTOTYPES should set t? _value='{}'.format(value), value='{}'.format(value), requires=requires))) return fields @auth.requires_login() def edit_parameters(): Display a form to edit the parameters rendered from a json object table=db[request.args[0]] record=table(request.args[1]) dictionary = record.parameters ## a json field type form = FORM('Edit Parameters', INPUT(_type='submit'), _action='', _method='post') fields=makefields(dictionary) form.insert(1,fields) dbg.set_trace() if form.validate(keepvalues=True): record.parameters.update(form.vars) table.update(record) return form --
[web2py] json validation
My app stores EDA information (cad programs for designing microchips) so storing cell attributes in a json object and taking advantage of json rpc would be beneficial. I am trying out Alex's new 'json' data type and with the serializer and IS_JSON() validator. Using the controller function below I've manage to create a json object of cell parameters (aka, attributes). In the function's comments is the output from the function but this output fails validation in http://jsonlint.com/ saying that RESULTS: Parse error on line 1: myobj={L: [ ^ Expecting '{', '[' CONTROLLER FUNCTION: (the myobj value is copied from my cell's edit page after being inserted into my Oracle DB. def json_parameters(param_names): takes an array of parameter names which are attributes to a design cell then looks up the default value and unit in the attributes table and returns an array of json dictionary objects to be inserted in the cell's parameters field as a json object if param_names = [L, len, R, INST, model, REF] myobj={ L: [ 0.001, nH ], len: [ 1, ??m ], R: [ 0.5, Ohm ], INST: [ i, TEXT ], model: [ m, TEXT ], REF: [ r, TEXT ] } params={} for a in param_names: # dbg.set_trace() rows = db(db.attribute.name.lower()==a.lower()).select(db.attribute.name, db.attribute.default_value, db.attribute.unit) row = rows[0] param = ('{}'.format(row.default_value), '{}'.format(row.unit)) params.update({'{}'.format(row.name):param}) return json(params) Any idea which is correct or how to fix it? Thank you, Bill --
[web2py] Re: Exposing validators as JSON?
+1 would a 'json:reference mytable' field type similar to 'list:reference mytable' or perhaps a format=lambda row: row.json() be possible? -Bill On Tuesday, January 15, 2013 6:14:40 PM UTC-6, Derek wrote: That would be cool, perhaps you could add a class to the fields and key off the classes. Or, have the validation function append error messages to a list and return that as json? On Tuesday, January 15, 2013 10:03:06 AM UTC-7, Alec Taylor wrote: How do I expose validators as JSON? I am not using web2py views in any capacity. Instead I am using AngularJS. So with web2py I am exposing my models RESTfully as JSON, and then consuming them with AngularJS. To reduce double-typing, how do I send field validators such as `IS_EMAIL` as JSON? # Model db.define_table( 'foo', Field('email', requires=IS_EMAIL()) ) # Controller @service.json def foo_form(): return dict(my_foo_form=crud.create(db.foo)) # Output I want { 'my_foo_form': { 'type': 'form', 'fields' { 'email', 'validator:IS_EMAIL'}, 'csrf': uid } } With this I can then write the equivalent functions in JavaScript and attach them to their corresponding fields. How do I do this with web2py? Thanks for all suggestions, Alec Taylor --
[web2py] Re: PowerFormWizard 0.1.4 - Bug Fixes and auto_validation (+ a new plugin for grids)
Hi Bruno, Forgive me if I missed your updates. The link below does not work today. Where can I find the latest information. Regards, Bill *# Whats next? *working on a new plugin for the 'Power' family, it is a JSON based tableless grid (which is much more than a grid) hope to release with examples, by the end of the week, preview - http://labs.blouweb.com/PowerGrid Need help, contribution, test.. []'s -- Bruno Rocha [ About me: http://zerp.ly/rochacbruno ] --
Re: [web2py] json validation
wow I'd never have thought of that - Thanks! Valid JSON On Saturday, January 19, 2013 6:37:08 PM UTC-6, Jonathan Lundell wrote: On 19 Jan 2013, at 4:21 PM, Bill Thayer bill@live.com javascript: wrote: My app stores EDA information (cad programs for designing microchips) so storing cell attributes in a json object and taking advantage of json rpc would be beneficial. I am trying out Alex's new 'json' data type and with the serializer and IS_JSON() validator. Using the controller function below I've manage to create a json object of cell parameters (aka, attributes). In the function's comments is the output from the function but this output fails validation in http://jsonlint.com/ saying that RESULTS: Parse error on line 1: myobj={L: [ ^ Expecting '{', '[' It looks like you're feeding jsonlint a string of the form myobj={some json object} instead of {some json object}. It's looking for a JSON object, which must begin with { or [, and it's finding 'm'. CONTROLLER FUNCTION: (the myobj value is copied from my cell's edit page after being inserted into my Oracle DB. def json_parameters(param_names): takes an array of parameter names which are attributes to a design cell then looks up the default value and unit in the attributes table and returns an array of json dictionary objects to be inserted in the cell's parameters field as a json object if param_names = [L, len, R, INST, model, REF] myobj={ L: [ 0.001, nH ], len: [ 1, ??m ], R: [ 0.5, Ohm ], INST: [ i, TEXT ], model: [ m, TEXT ], REF: [ r, TEXT ] } params={} for a in param_names: # dbg.set_trace() rows = db(db.attribute.name.lower()==a.lower()).select( db.attribute.name, db.attribute.default_value, db.attribute.unit) row = rows[0] param = ('{}'.format(row.default_value), '{}'.format(row.unit)) params.update({'{}'.format(row.name):param}) return json(params) Any idea which is correct or how to fix it? Thank you, Bill -- --
[web2py] aµzing...
Been searching a while now for the magic decoder ring that solves the UTF-8 encoding issue. If I enter a mu (µ) by typing alt+0181 into my form field it looks fine. Then looking at the data in SQLDeveloper (Oracle) the data is 2 little boxes. NP I think the client encoding is wrong so I set my preferences to UTF-8 but µ is still 2 boxes. Still not worried yet but then I refresh or re-edit the field with the µ in it then it is returned from the database as two question marks. Same behavior occurs with the squared (²) sign...two boxes in db, two question marks in returned value on page. Anyone solve this yet? Thank you, Bill --
[web2py] 'DAL' object has no attribute 'auth_wiki' - trunk version
Working on trying out the json support but db won't get past this error. Traceback (most recent call last): File C:\web2py_src_2.2.1\web2py\gluon\restricted.py, line 212, in restricted exec ccode in environment File C:/web2py_src_2.2.1/web2py/applications/TAMOTO/models/db.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py, line 73, in module auth.wiki(resolve=False) File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 3330, in wiki templates=templates) File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 4766, in __init__ templates = db.auth_wiki.tags.contains('template')\ File C:\web2py_src_2.2.1\web2py\gluon\dal.py, line 7256, in __getattr__ return ogetattr(self, key) AttributeError: 'DAL' object has no attribute 'auth_wiki' --
[web2py] Re: Solution for ORA-00932: inconsistent datatypes: expected - got CLOB
Another case: format=lambda row: '{} {}'.format(row.thickness, row.material) will throws the Oracle Error. format='%(thickness)s %(material)s', will not throw the error --
[web2py] Re: Memory error with numpy large array
I am having the same issue trying to serve large cad files. -Bill On Tuesday, May 17, 2011 3:02:50 AM UTC-5, Kostas M wrote: I tried the same application in a Linux (Ubuntu) machine, after the installation of the latest numpy version (1.6.0). No MemoryError ticket occured in web2py... --
[web2py] Re: Memory error with numpy large array
On Wednesday, December 12, 2012 12:15:12 PM UTC-6, Bill Thayer wrote: I am having the same issue trying to serve large cad files. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Traceback (most recent call last): File C:\web2py_src_2.2.1\web2py\gluon\restricted.py, line 212, in restricted exec ccode in environment File C:/web2py_src_2.2.1/web2py/applications/TAMOTO/controllers/core.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/core.py, line 133, in module File C:\web2py_src_2.2.1\web2py\gluon\globals.py, line 188, in lambda self._caller = lambda f: f() File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 2911, in f return action(*a, **b) File C:/web2py_src_2.2.1/web2py/applications/TAMOTO/controllers/core.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/core.py, line 39, in layout_wiki return auth.wiki(resolve='layout') File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 3299, in wiki return self._wiki.read(slug)['content'] if slug else self._wiki() File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 4814, in __call__ return self.editmedia(request.args(1) or 'index') File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 4965, in editmedia user_signature=False) File C:\web2py_src_2.2.1\web2py\gluon\sqlhtml.py, line 1858, in grid **sqlformargs) File C:\web2py_src_2.2.1\web2py\gluon\sqlhtml.py, line 1037, in __init__ inp = represent(field, default, record) File C:\web2py_src_2.2.1\web2py\gluon\sqlhtml.py, line 60, in represent return f(value, record) File C:/web2py_src_2.2.1/web2py/applications/TAMOTO/models/db.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py, line 56, in lambda A('get it', _href=URL('download', args=value))), File C:\web2py_src_2.2.1\web2py\gluon\html.py, line 367, in URL args, other, scheme, host, port) File C:\web2py_src_2.2.1\web2py\gluon\rewrite.py, line 196, in url_out url = regex_filter_out(url, environ) File C:\web2py_src_2.2.1\web2py\gluon\rewrite.py, line 688, in regex_filter_out log_rewrite('routes_out: [%s] not rewritten' % url) MemoryError -Bill On Tuesday, May 17, 2011 3:02:50 AM UTC-5, Kostas M wrote: I tried the same application in a Linux (Ubuntu) machine, after the installation of the latest numpy version (1.6.0). No MemoryError ticket occured in web2py... --
[web2py] Re: Lazy table bug in define table?
Would using an integer field or a list:reference help out? --
[web2py] Re: is there a way to not use crud.archive
Perhaps check your controllers to see if an update call is being made. Seems I had an app created with the wizard that added update code to the controllers. On Wednesday, December 5, 2012 2:18:46 PM UTC-6, pumplerod wrote: I went through the admin interface and deleted from there. Then I went into my models/*.py files and made sure no _Archive tables were being created. When I go back through the admin interface I no longer see the _Auth tables. On Wednesday, December 5, 2012 11:59:03 AM UTC-8, Niphlod wrote: seems that web2py is trying to create those tables: how exactly did you delete them ? On Wednesday, December 5, 2012 8:18:57 PM UTC+1, pumplerod wrote: I thought by deleting the _archive tables I would no longer be using it. However now when I try and submit a change to the db I get this error: table myTable_archive already exists I'm just trying to learn this system and I don't feel I really need to archive things just yet. getting rid of those tables just made things a lot cleaner for me but now I seem stuck. --
[web2py] Re: How many error tickets does a typical newbie handle?
Do I then need to use an iterator for my update function? This is related to my other post where I am getting key errors https://groups.google.com/d/msg/web2py/3dgZiuDAZDc/DZnJYgaifjIJ --
[web2py] Re: How to know if you're getting a Set when you're expecting a dict?
Looks like I worked most of the bugs out of this. Hope it saves someone a lot of time. If you know of a more *obvious or elegant* solution please post it. Also, my slug field is returning a tuple now. Still works as a slug but I wish I didn't have the |slug|None| format. def insert_wiki_if_not_exists(table, s, f): Used for auto creation of wiki pages for use with items already in your table. On any update to the table set the wiki pages will be create if it doesn't exist. To use: In model file after table definition enter lines: db.extracted_linear.wiki_page.required=False db.mytable._before_update.append(lambda s,f: \ insert_wiki_if_not_exist(db.mytable, s, f)) @see_also gluon.dal.RecordUpdater, @see_also http://web2py.com/books/default/chapter/29/06?search=_before_update tablename=table._tablename table_wikis_set=db(db.wiki_page.tablename==tablename) for s_row in s.select(): for row in table_wikis_set.select(): id = s_row.id name = s_row.name or tablename + ' ' + id f['wiki_page']=db.wiki_page.update_or_insert( db.wiki_page.title==name, title=name, slug=table_slug(name.strip()), body='#ADD PLUGIN CODE TO DISPLAY GRAPHS HERE\n' + \ '##Use WIKI menu to edit or delete this page', changelog='inserted after ' + tablename + ' table update', tags=None, tablename=tablename, record_id=id) s.update_naive() return --
[web2py] How to know if you're getting a Set when you're expecting a dict?
type 'exceptions.TypeError' 'Set' object has no attribute '__getitem__' db.person._after_insert.append(lambda f,id: pprint(f,id)) #book's example #my code in model file after table definition code. db.extracted_linear._after_insert.append( lambda f, id:wiki_update_or_insert( 'extracted_linear', f[name], table_slug(f[name]), id)) The bookhttp://web2py.com/books/default/chapter/29/06?search=_after_updatesays Here f is a dict of fields passed to insert or update, id is the id of the newly inserted record, s is the Set object used for update or delete. --
[web2py] Re: How many error tickets does a typical newbie handle?
No the app never really got to 100%. Even when I try to simplify it farther and takes a different approach there is always a 'roadblock' of errors or related errors. I get about 90% (I feel) finished and can't get to the last 10% without some round of errors that never gets 100% solved so I chalk it up to poor programing and study harder simplify the design more. Spending so much time on the book and in the code is helpful but if there was a way to collect what the newbies are experiencing then some valuable index of errors or more focused documentation can be created. For exmample: Today I'm trying to use ._after_insert_append(lambda f,id:... expecting f to be a dict however the book actually has two lambda functions (for after update after insert) with the same signature but get passed different values. So my frustration comes from not being able to find the correct way to access the Set object on the _after_update. Why cant they both just get dicts? db.define_table('person',Field('name')) def pprint(*args): print args db.person._before_insert.append(lambda f: pprint(f)) db.person._after_insert.append(lambda f,id: pprint(f,id)) db.person._before_update.append(lambda s,f: pprint(s,f)) db.person._after_update.append(lambda s,f: pprint(s,f)) db.person._before_delete.append(lambda s: pprint(s)) db.person._after_delete.append(lambda s: pprint(s)) --
[web2py] Re: Salting tables with legacy data, when to turn on record versioning?
Did you get your answer? --
[web2py] Re: How to know if you're getting a Set when you're expecting a dict?
After finding some code in a class called RecordUpdater in gluon/dal.py i think I figured out how to get past my arguments as a set or a dictwellI was getting a keyerr for 'name' so I put it in a try-catch but now I'm getting a keyerror for 'id' In the code below I've only been working on the _after_update. Wonder why 'name' and 'id' throw the error but 'tablename' does not? #This is after my table definition inside my model file db.extracted_linear._after_insert.append( lambda f, id:wiki_update_or_insert( tablename='extracted_linear', id=id, name=f['name'] or f['measuremnt'])) db.extracted_linear._after_update.append( lambda s, id:wiki_update_or_insert( tablename='extracted_linear', id=id, colset=s(db.extracted_linear.id==id))) #Here is function in the controller def wiki_update_or_insert(**fields): newfields = fields or dict(colset) try: title=newfields['name'] or newfields['tablename'] + ' ' + newfields['id']['id'] except: title=newfields['tablename'] + ' ' + newfields['id']['id'] db.wiki_page.update_or_insert( title=title, slug=table_slug(title), body=MARKMIN('#ADD CODE TO DISPLAY GRAPHS HERE'), tablename=newfields['tablename'], record_id=newfields['id']['id']) Traceback (most recent call last): File C:\web2py_src_2.2.1\web2py\gluon\restricted.py, line 212, in restricted exec ccode in environment File C:/web2py_src_2.2.1/web2py/applications/PROD/controllers/default.py http://127.0.0.1:8000/admin/default/edit/PROD/controllers/default.py, line 173, in module File C:\web2py_src_2.2.1\web2py\gluon\globals.py, line 188, in lambda self._caller = lambda f: f() File C:\web2py_src_2.2.1\web2py\gluon\tools.py, line 2911, in f return action(*a, **b) File C:/web2py_src_2.2.1/web2py/applications/PROD/controllers/default.py http://127.0.0.1:8000/admin/default/edit/PROD/controllers/default.py, line 67, in linear_manage form = SQLFORM.smartgrid(db.extracted_linear) File C:\web2py_src_2.2.1\web2py\gluon\sqlhtml.py, line 2376, in smartgrid user_signature=user_signature, **kwargs) File C:\web2py_src_2.2.1\web2py\gluon\sqlhtml.py, line 1882, in grid next=referrer) File C:\web2py_src_2.2.1\web2py\gluon\html.py, line 2170, in process self.validate(**kwargs) File C:\web2py_src_2.2.1\web2py\gluon\html.py, line 2109, in validate if self.accepts(**kwargs): File C:\web2py_src_2.2.1\web2py\gluon\sqlhtml.py, line 1473, in accepts self.id_field_name]).update(**fields) File C:\web2py_src_2.2.1\web2py\gluon\dal.py, line 8814, in update ret and [f(self,update_fields) for f in table._after_update] File C:/web2py_src_2.2.1/web2py/applications/PROD/models/db_wizard.py http://127.0.0.1:8000/admin/default/edit/PROD/models/db_wizard.py, line 118, in lambda colset=s(db.extracted_linear.id==id))) File C:/web2py_src_2.2.1/web2py/applications/PROD/controllers/default.py http://127.0.0.1:8000/admin/default/edit/PROD/controllers/default.py, line 44, in wiki_update_or_insert title=newfields['tablename'] + ' ' + newfields['id']['id'] KeyError: 'id' --
Re: [web2py] deploying web2py apache wsgi
I had a couple of posts on this topic and omi chib has a blog at http://ochiba77.blogspot.com/2011/10/how-to-setup-web2py-apache-wsgi.html Wish I had more time for a better response but search for my topics and you should find some good info on setting up apache. --
[web2py] Re: join in DAL
I noticed that you do not add auth.signature to your table definition. Does it not work for you? If is_my_chart was somthing I needed often like I'd be tempted to change: (full discloser: my track record is not good lately) db.define_table('chart', Field('chartName'), Field('id_workbook',db.workbook), Field('worksheet'), Field('file','upload'), auth.signature, common_filter = lambda query: db.chart.created_by==auth.user_id, format=%(id_workbook)s %(chartName)s, ) Then when I needed a different controller function that returned all records I could: db(query, ignore_common_filters=True).select(...) # copied from http://www.web2py.com/books/default/chapter/29/06?search=common_filter Again I'm not that good at this but it seems logical. -Bill --
[web2py] Re: Here is one of my 81 tickets today....web2py math?
LOL Thanks, On my re-design my previous table had requires=lambda v,r: IS_INTEGER_IN_RANGE(0, int((r.pstop-r.pstart)*1)), but that no longer works so I changed it and applied typecasting when I forgot forgot my order of ops. Thanks a bunch. --
[web2py] Hope someone knows the answer to this one {was:....web2py math?}
So the same code above is now throwing an error and when I even visit http://127.0.0.1:8000/PROD/default/index. I know I don't feel right using request variable in my model file so I changed 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Traceback (most recent call last): File C:\web2py_src_2.2.1\web2py\gluon\restricted.py, line 212, in restricted exec ccode in environment File C:/web2py_src_2.2.1/web2py/applications/PROD/models/db_wizard.py http://127.0.0.1:8000/admin/default/edit/PROD/models/db_wizard.py, line 105, in module db.loadpull.points.requires=loadpull_points_in_range(request.vars.pstop, request.vars.pstart) File C:/web2py_src_2.2.1/web2py/applications/PROD/models/db_wizard.py http://127.0.0.1:8000/admin/default/edit/PROD/models/db_wizard.py, line 59, in loadpull_points_in_range (int(Decimal(pstop)-Decimal(pstart))*1), File C:\Python27\lib\decimal.py, line 658, in __new__ raise TypeError(Cannot convert %r to Decimal % value) TypeError: Cannot convert None to Decimal I don't feel right about using the request variable anyway so I changed this line: db.loadpull.points.requires=lambda row: loadpull_points_in_range(row.pstop, row.pstart) And get type 'exceptions.AttributeError' 'str' object has no attribute 'pstop' File C:\web2py_src_2.2.1\web2py\gluon\html.py, line 1743, in _validate (value, errors) = validator(value) File C:/web2py_src_2.2.1/web2py/applications/PROD/models/db_wizard.py http://127.0.0.1:8000/admin/default/edit/PROD/models/db_wizard.py, line 105, in lambda db.loadpull.points.requires=lambda row: loadpull_points_in_range(row.pstop, row.pstart) AttributeError: 'str' object has no attribute 'pstop' db.loadpull.points.requires=lambda row: loadpull_points_in_range( '%(row.pstop)s', '%(row.pstart)') Is not right either class 'decimal.InvalidOperation' Invalid literal for Decimal: '%(row.pstop)s' I really don't know what happened when my original code worked (math error aside) when request.vars but now it won't even run. I have been reading up on lambda functions too since I went through another round of not having the correct number of arguments. --
Re: [web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
Gave it a try...no luck. --
Re: [web2py] SQLFORM.grid exports the whole table
FWIW, My users will be filtering test station settings to upload the csv to thier test bench software. My users will need only thier own filtered data in the CSVso big Me Too! here --
[web2py] Re: auth.wiki() run Function
I don't think that functions in the controller are callable with a parameter from the web page like form objects are but I could be wrong... without double checking my code I believe you can call controllers like this: @{controller/function/args} I found that on the markmin cheatsheet. if you are not using markmin it might be {{=MARKMIN(@{controller/function/args)}} however that is just a wild guess. (Maybe I shiould just keep to myself if I don't know exxactly but perhaps your pointed in a good direction.) Regards, Bill On Tuesday, November 6, 2012 6:51:16 AM UTC-6, Simon Carr wrote: Is there a way to run a Controller or Model Function in a wiki page created with auth.wiki() I am thinking some like {{ =insertImage(5) }} as you would have in a view. Thanks Simon --
[web2py] Here is one of my 81 tickets today....web2py math?
I'm no genius but (6-5)*1 should be 1 and 5 is between 0 and 10,000 I think Pstart:GHzPstop:GHzPoints: enter an integer between 0 and -49995 GHz from decimal import * def loadpull_points_in_range(pstop, pstart): return IS_INT_IN_RANGE(0, int(Decimal(pstop)-Decimal(pstart)*1)) db.define_table('loadpull', . . . Field('pstart', 'decimal(6,4)', requires=IS_DECIMAL_IN_RANGE(0, 300), comment='GHz'), Field('pstop', 'decimal(6,3)', requires=IS_DECIMAL_IN_RANGE(0, 300), comment='GHz'), Field('points', 'integer', comment='GHz'), auth.signature, format='%(name)s', migrate=settings.migrate) db.loadpull.points.requires=loadpull_points_in_range(request.vars.pstop, request.vars.pstart) --
[web2py] Re: How many error tickets does a typical newbie handle?
Didn't have ANY problems with this line of work in 2 years of deployment. So your post does help with migration errors but... I have 81 tickets today mostly related to lambda taking [1|2] arguments but only [0|1] given. This leads to all sorts of variations leading to errors because sometimes '%(something)s' works and other times you just need r.something or simply lambda val: function(val). Much of my errors today were dealing with validators, looks like lambda functions and validators I had last week are not working now. Just when I figured my data tables were ready I have to go through each one line by line and rewrite validators lambda functions (and requires= and default= etc) I've already removed most of my referenced fields. Hope you guys plan on having a web2py boot camp very soon. There have been probably 74 or more posts made in this Google group in the last week so I can't think that I'm alone. I've read most of the code, all of the book and epidocs and most of the posts here and on stackoverflow. I bought the application developement cookbook, tried the slices. Kept my versions up to date etc... Still, I am probably going to get fired divorced for this project being so late after all the hours I put on it. -Bill --
Re: [web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
Thank youRichard. I've have exhausted everything I could think of to get it to work. --
[web2py] How many error tickets does a typical newbie handle?
The other day I read on web2py developers a discussion detailing Massimo's vision of web3py. Perhaps us newbies can start collecting our tickets to aide Massimo and the developers in understanding what is particularly difficult or perhaps could use better documentation. Currently I have *480 tickets since 10/8* on my application before I decide to re-do it from scratch for the 4th (hopefully last) time. Tickets would provide a wealth of statistics about what us newbies are going through. This time I decided to break my app up into 4 smaller applications. Start over and my 2nd try this morning (after deleting and starting over) I currently have 19 tickets in 45 minutes. When developing using SQLite I am now getting the same errors that I had early on in my development Adding columns is not trivial especial with all the combinations of: migrate_enabled={True|False}, fake_migrate={True|False}, migrate='web2py_session_APPNAME', migrate.settings={True|False}, migrate={'table_name'|True|False|migrate.settings}. My approach was to use the wizard to quickly whip out the app then add extra fields later so that i can develop in small iterations. If just the tickets for what I am going through this morning could be eliminated that would be huge! FWIW, Bill --
[web2py] How to add a column?
Can't beleive this question does not come up in the search box. How do i add a column to a table using SQLlite? Simply adding hte field to the define table statement throws an error. Using SQLlite I cannot add a Field. I get an error message: OperationalError: no such column: source_via.substrate No Joke Really? When I set migrate_enabled=True then the message changes to something like the table sourc_via does not exist Of course it does since I just added the column that I'm being told does not exist either to it. On top of all that I am back to the Rocket server locking up. It likes to do that so I have to use Task manager to close it. Could be that session.connect +SQLlite is not a good combinnation. --
Re: [web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
Now that is impressive. I did get it to work but not with SQLFORM or SQLFORM.smartgrid so that was a large part of my problem. When renderred in the view created by SQLGRID (clicking the ADD+ button) I would get the SQLFORM and the person fields were displayed with it's own submit button. This looked like it could be a bonus however the Add New link did not work (doesn't really need to if the form is already rendered) and information was not saved to the database. Confirmed this by visiting the grid again. I could see all of the users you added before. Looks like I'll drop use of SQLFORM in favor of this widget.Thank you for the sample app. It made a big difference. Regards, Bill --
Re: [web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
This widget wouldn't break appadmin? would it? These are the many unknown things that really frustrate me about web2py. I edited the models file to test my current troubles adding columns to tables that are already created. With your sample app, I was able to add the new table and then add columns to cats. However when i edited the cat to add a color or collar those new values were not saved. db.define_table('collars', Field('material', requires=IS_IN_SET(['leather', 'chain'])), Field('size', requires=IS_IN_SET(['small', 'med', 'large'])), format='%(size)s %(material)s') db.define_table('cat', Field('name','string'), Field('color', 'string'), Field('collar', 'reference collars'), Field('person_id', 'reference person', widget=AutocompleteWidgetSelectOrAddOption(request, db.person.first_name, id_field=db.person.id, limitby=(0,10), min_length=2, form_title=T('Add new person'), controller=default, function=add_person, button_text = T('Add new')) ), format='%()s' ) Regards, Bill --
Re: [web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
Hi Richard, In short...for myself and future searches...This widget works in a straight up crud form but with SQLFORM it has different behavior. Whether or not it is the source of appadmin not storing values is yet to be determined. After my columns were successfully added, values were set to null automatically of course. When I tried using appadmin to change the values (note this has nothing to do with the widget except the widget happens to be rendered on the edit or create page) the values do not update. Not saying it's the widget, I just don't know. Regards, Bill --
[web2py] Re: How many error tickets does a typical newbie handle?
Niphold, Really appreciate your taking the time to spell this procedure out. It will come in handy for me and others too I bet! Thanks, Bill --
[web2py] Re: How to add a column?
Very Interesting. Thank you! --
Re: [web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
I still haven't gotten this to work but do need this functionality desperatley. Anyone else have any luck? --
[web2py] Solution for ORA-00932: inconsistent datatypes: expected - got CLOB
This is a tricky error to figure out so I am documenting it here class 'cx_Oracle.DatabaseError' ORA-00932: inconsistent datatypes: expected - got CLOB To get this error I had at the bottom of a table definition... ... auth.signature, format=IS_UPPER()('%(slug)s'), migrate=settings.migrate) Trying to make the slug display as uppercase. Should just be: auth.signature, format='%(slug)s', migrate=settings.migrate) Note: This is an *Oracle error*, the web2py book says the IS_UPPER() function never returns an error. Also note the funky syntax for IS_UPPER()(argument) is the same as IS_SLUG()(argument) --
[web2py] Re: Oracle: long text inserting
Hi Massimo, Came along this group post while searching heare and dal.py to see if the fix for class 'cx_Oracle.DatabaseError' ORA-01704: string literal too long I am not finding it in a searc of gluon and subdirectories produces no results for the above fix. Is there a status update? I am getting that error now. Thanks, Bill It's not the length of your statement, it's the length (as the error message says) of your literal. Oracle does not support character literals with more than 8000 characters. You need to use e.g. a prepared statement (with bind variables) in your programming language.- http://www.dbforums.com/oracle/1636111-ora-01704-string-literal-too-long.html --
[web2py] Re: Oracle: long text inserting
I guess in SergyPo's example db has changed since then because I cannot get a db._connection object and cursor = db._adapter.cursor cursor.setinputsizes(value = cx_Oracle.CLOB) produces another error. I would like to perhaps put these lines after db=DAL(... Is there a way to get to the cursor object? -Bill --
[web2py] Re: Implementing a self-modifying form in web2py
Without testing it out it sounds like you are describing the default behavior from the list:type Fields. I think there is a multiple = True argument perhaps. Check out http://web2py.com/books/default/chapter/29/06?search=list%3A#Many-to-many,-list:type,-and-contains about 2/3 down the page if it soesn't scroll automatically for you. --
[web2py] Re: Looking for a way to combine auto-complete with adding a non-existing item.
If this works it will be very usefull Is there a way to modify myfunction so that it can be passed to onvalidate or oncreate fields of SQLFORM.grid? This is as close as I got but stiil get form validation error (value not in database) on the referenced field: add_wiki() is my myfunction() def add_wiki(): table=db[request.args(0)] form=SQLFORM(table) if request.post_vars._autocomplete_name_aux and not request.post_vars. wiki_page_id: request.post_vars.wiki_page_id=db.wiki_page.insert(slug=IS_SLUG()( request.post_vars._autocomplete_name_aux)) return form.process() def manage(): table=db[request.args(0)] table.id.readable = table.id.writable = False left=None oncreate=None if table.wiki_page_id: left=db.wiki_page.on(db.wiki_page.id==table.wiki_page_id) oncreate=add_wiki() content=SQLFORM.grid( table,left=left, details=False,editable=True,deletable=False,create=True, oncreate=oncreate, args=request.args, user_signature=False) return dict(content=content) Thank you. The SELECT_OR_ADD_OPTION never did work for me plus this will be a more user friendly option! Regards, Bill --
[web2py] Re: Where does auth.wiki save pages to?
Something like that sounds like you just write a controller to query the db.wiki_page then use the example view from the book. Don't know of a stratight db call but I will need the same function soon myself. This view might work with the right controller: {{if len(articles):}} h2Articles/h2br /p {{for article in articles:}} h1{{=article.title}}/h1 center {{if article.image:}} img width=200px src={{=URL('download', args=article.file)}} / /center {{pass}} p{{=article.author}} wrote i{{=article.body}}/i/p {{pass}}/p {{else:}} h2No articles posted yet/h2 {{pass}} h2Post an article/h2 {{=form}} --
[web2py] Re: Wiki Body CLOB class 'cx_Oracle.DatabaseError' ORA-01704: string literal too long?
Hi Massimo, Sorry I didn't get back right away. After playing around...well re-entering the entire menu one line at a time...I discovered that if I took out the capitol letters in the slugs then it worked. Regards, Bill --
Re: [web2py] Re: All app redirected to https
2.2.1 stable seems to be going through http for me on Chrome. --
[web2py] Re: Where does auth.wiki save pages to?
When you say listing pages created by auth.wiki I take that to mean a listing to display within the web browser. On mine I do have my index() controller return auth.wiki and as long as I am logged into my application I see an option under the [wiki] menu that says manage pages. On Friday, October 19, 2012 11:47:55 PM UTC-5, HittingSmoke wrote: I can't find them in my database... I'm trying to build a basic blog using auth.wiki but without documentation and without database references I have no way of listing pages created with auth.wiki. --
[web2py] Re: Where does auth.wiki save pages to?
Ok, Actually i am just getting there myself on my application. There is a cloud() function and a search() function inside gluon.tools so chances are writing a pre-defined search might get you 3/4 the way there. Wish I had a better strategy to give to you. Regards, Bill On Sunday, October 21, 2012 4:48:49 PM UTC-5, HittingSmoke wrote: No no. I mean listing wiki articles for users to browse, like a CMS front page. For example, I might want my front page to list articles with previews for certain tags. For that I need to know what db table the wiki info is saved to. It's not displayed by default in the appadmin database management. On Sunday, October 21, 2012 2:43:14 PM UTC-7, Bill Thayer wrote: When you say listing pages created by auth.wiki I take that to mean a listing to display within the web browser. On mine I do have my index() controller return auth.wiki and as long as I am logged into my application I see an option under the [wiki] menu that says manage pages. On Friday, October 19, 2012 11:47:55 PM UTC-5, HittingSmoke wrote: I can't find them in my database... I'm trying to build a basic blog using auth.wiki but without documentation and without database references I have no way of listing pages created with auth.wiki. --
Re: [web2py] [FYI] Pyodel is now a plugin
Just tried it again. Logged in with my email and password then it took me to a blank page with one line on top that says to sign in with google password. On Thursday, October 18, 2012 8:23:58 AM UTC-5, Alan Etkin wrote: El martes, 16 de octubre de 2012 18:12:46 UTC-3, Bill Thayer escribió:Hi Alan. I went through the registration process, got the Google sign in. Signed in with google too and then did not get re-directed back. AFAIK, there's no need to authenticate with a Google account to use the demo. Are you able to authenticate with the registered Auth user? --
[web2py] Re: auth.wiki usage - Another Oracle DB Gotcha
Oh. So that's why a reference field should not be named the same as the table it's referencing. In this case I didn't make the name but generally I do that all the time. Didn't realize that it makes error messages clearer. Duh. -Bill --
[web2py] Re: How to access the auth tables in appadmin?
Sounds like those auth_ tables are not defined. If you already have those lines in your db.py then the tables should be listed in your apadmin. If so then you just follow the instructions in my other post. https://groups.google.com/d/msg/web2py/AEBFWeS8YSA/2LWC4NqdaiAJ to get the permissions set correctly. On Thursday, October 18, 2012 11:21:39 AM UTC-5, mikech wrote: Thanks Bill. What I'm trying to find out is how do I access the tables involved with security. Do I need to create views, or is there already some associated with the appadmin? On Wednesday, October 17, 2012 7:55:02 PM UTC-7, Bill Thayer wrote: Try this: In db.py: from gluon.tools import Auth, Crud, Service, PluginManager, prettydate auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() auth.define_tables(username=True) # arg makes it so you can use a username instead of email to login On Wednesday, October 17, 2012 6:20:48 PM UTC-5, mikech wrote: I'm working thru the book again, and when I get to the image tutorial it mentions adding a manager group to the auth tables in appadmin: Using appadmin create a group manager and make some users members of the group. They will not be able to access I cannot find where this is, when I bring up the appadmin it just shows the two tables of the application - image and comment. --
[web2py] Wiki Body CLOB class 'cx_Oracle.DatabaseError' ORA-01704: string literal too long?
Using the auth.wiki I am defining my menu. When I hit submit I get the error below. The menu I wrote in is currently long I guess but it couldn't be more than 4000 bytes (oracle CLOB length) could it? Perhaps it's the HTML that gets stored in the DB?...That's what I suspected then I remembered that in WIKI_MEDIA I added a blob field to store files on the database and the 3 jpg images all larger that 4kb loaded with no problem. Traceback (most recent call last): File C:\web2py_src_2.1.1\web2py\gluon\restricted.py, line 209, inrestricted exec ccode in environment File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/controllers/default.pyhttp://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/default.py , line 283, in module File C:\web2py_src_2.1.1\web2py\gluon\globals.py, line 187, in lambda self._caller = lambda f: f() File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/controllers/default.pyhttp://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/default.py , line 22, in index return auth.wiki() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 3227, in wiki return self._wiki.read(slug)['content'] if slug else self._wiki() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 4697, in __call__ return self.edit(request.args(1) or 'index') File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 4791, in edit formstyle='table2cols',showid=False).process() File C:\web2py_src_2.1.1\web2py\gluon\html.py, line 2135, in process self.validate(**kwargs) File C:\web2py_src_2.1.1\web2py\gluon\html.py, line 2075, in validate if self.accepts(**kwargs): File C:\web2py_src_2.1.1\web2py\gluon\sqlhtml.py, line 1439, in accepts self.table._db(self.table._id == self.record[self.id_field_name]).update(** fields) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 8814, in update ret = db._adapter.update(tablename,self.query,fields) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1371, in update self.execute(sql) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 2856, in execute return self.log_execute(command, args) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1687, in log_execute ret = self.cursor.execute(*a, **b) DatabaseError: ORA-01704: string literal too long This article explains how to define a LOB field http://www.dba-oracle.com/t_table_blob_lob_storage.htm in SQL. The SQL I am reading in SQL developer from tables created by web2py is different but should work. Then I got to messing with my menu markmin and discovered if I remove the @ from two of my menu items then it submits fine. - Request @request - - Measurement @order-measurment - - Model @model - Product @Product - - Measurements Measurements - - - S-Parameters @S-Parameters - - - DC-IV DC-IV - - - Load Pull @Load-Pull - - Models @Models . . . https://groups.google.com/d/msg/web2py/f66R-f3QvDo/gZR40A87SJ4J - Discussion from September 09 where Massimo posted a fix to sql.py (a file only used for backward compatibility) but I'm not convinced it's a CLOB problem. -Bill --
[web2py] Re: auth.wiki() '_create' doesn't redirect properly
This is in my db.py. Allen told me to add the second line after calling auth.define_tables auth.define_tables(username=True, signature=False, migrate=True,fake_migrate =True) auth.wiki(resolve=False) the second line calls the wiki() function to create the tables. Regards, Bill --
[web2py] Re: auth.wiki() '_create' doesn't redirect properly
Back on the original topic. When I click on a menu item I also get re-directed back to the _create page. Is this a permission thing perhaps? Now that I mention it, isn't there supposed to be a field to select the permission level for the page? --
[web2py] Re: Auth Wiki functionality?
Cool! Thanks. I did not understand what ,load was for. This morning I'm thinking that I'll have to add a See Also field of type 'list:reference wiki_page' to the wiki_page table to handle my many to many relationships. Plus also add a wiki_page_id filed to my parts tables. Thanks for the advice! -Bill On Tuesday, October 16, 2012 9:17:25 PM UTC-5, Massimo Di Pierro wrote: Try: @{component:default/part_manage.load} Or customize the part_manage.html to not {{extend 'layout.html'}} On Tuesday, 16 October 2012 19:20:35 UTC-5, Bill Thayer wrote: Hello everyone, Thanks to Allen, Villas, of course Massimo among a few others I have web2py auth.wiki with Oracle storing the media blobs and all the pages. I believe I can use the wiki features in a structure way to improv productivity and cross department functionality in my workplace. Now what in the heck to do with it? The app wizard created a bunch of controllers like @auth.requires_login() def part_manage(): form = SQLFORM.smartgrid(db.part) return locals() but if I add @{component:default/part_manage} to my markmin I get a page with my SQLFORM.smartgrid inside a page so I get two footers and two headers. Not to mention the add and edit pages should really be a wiki page with my table attributes added. Looks like auth-wiki is for creating web pages but what caught my attention was the media and tagging capability built in so I don't have to write my own app to do what's already there. However, I have a bunch of tables (parts, sub parts, orders, samples, testing, analyses for tested samples, etc...) defined for my application and basically 75% of the items have attachments, images, files, user references and tags too. Unless someone says different I guess I should be adding a wiki_page column to all of my tables? Then create separate edit/show/create controllers that generate the proper...slug...and return a wiki page? That shouldn't break my relationships I don't think. Just kind of wondering if there's already a know technique for my application that you know of? Regards, Bill --
[web2py] Re: How to access the auth tables in appadmin?
Try this: In db.py: from gluon.tools import Auth, Crud, Service, PluginManager, prettydate auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() auth.define_tables(username=True) # arg makes it so you can use a username instead of email to login On Wednesday, October 17, 2012 6:20:48 PM UTC-5, mikech wrote: I'm working thru the book again, and when I get to the image tutorial it mentions adding a manager group to the auth tables in appadmin: Using appadmin create a group manager and make some users members of the group. They will not be able to access I cannot find where this is, when I bring up the appadmin it just shows the two tables of the application - image and comment. --
[web2py] Re: auth.wiki usage - Another Oracle DB Gotcha
Note for future searchers people as foolish as I am to try and use Oracle for web site backend. This happened to me after I finally got the auth.wiki installed in my application and the application connected to Oracle. I had to manually create the wiki_page, wiki_media, and wiki_tab tables in SQLDEveloper and not web2py. My first attempt at creating a wiki page produced this error: Traceback (most recent call last): File C:\web2py_src_2.1.1\web2py\gluon\restricted.py, line 209, inrestricted exec ccode in environment File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/controllers/default.py,line 240, in module File C:\web2py_src_2.1.1\web2py\gluon\globals.py, line 187, in lambda self._caller = lambda f: f() File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/controllers/default.py,line 20, in index return auth.wiki() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 3227, in wiki return self._wiki.read(slug)['content'] if slug else self._wiki() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 4697, in __call__ return self.edit(request.args(1) or 'index') File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 4791, in edit formstyle='table2cols',showid=False).process() File C:\web2py_src_2.1.1\web2py\gluon\html.py, line 2135, in process self.validate(**kwargs) File C:\web2py_src_2.1.1\web2py\gluon\html.py, line 2075, in validate if self.accepts(**kwargs): File C:\web2py_src_2.1.1\web2py\gluon\sqlhtml.py, line 1441, in accepts self.vars.id = self.table.insert(**fields) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 7808, in insert ret = self._db._adapter.insert(self,self._listify(fields)) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1160, in insert raise e DatabaseError: ORA-04098: trigger 'UWAVEDAT.WIKI_PAGE_TRIGGER' is invalid and failed re-validation This was caused because although I created the trigger, the trigger did not have the sequence. Oracle does not have authoincrement so you need to create a sequence. CREATE SEQUENCE SCHEMANAME.WIKI_PAGE_SEQUENCE MINVALUE 1 MAXVALUE INCREMENT BY 1 START WITH 2001 CACHE 2000ORDER NOCYCLE ; Then create your trigger: CREATE OR REPLACE TRIGGER SCHEMANAME.WIKI_PAGE_TRIGGER BEFORE INSERT ON wiki_page FOR EACH ROW BEGIN SELECT wiki_page_sequence.nextval INTO :NEW.id FROM DUAL; END; / ALTER TRIGGER SCHEMANAME.WIKI_PAGE_TRIGGER ENABLE; I did not have this issue with tables created by web2py. Regards, Bill --
[web2py] Re: auth.wiki usage - Another Oracle DB Gotcha
About 6 days ago I posted my saga of failed attempts to get plugin_wiki to work with oracle and to add the blob field. You told me to put return auth.wiki() in my controller and use the built in auth wiki but I needed a bit more information and Oracle was still complaining. Alan told me to add auth.wiki(resolve=False) to my db.py file. Which eventually worked. But by that time the tables were created. Looks like it's working as expected, even storing and retrieving the data with a blob field. So far so good except when I click on the search link for the wiki (/default/index/_search) I did get this error that I haven't yet dug into very deeply but here it is: Traceback (most recent call last): File C:\web2py_src_2.1.1\web2py\gluon\restricted.py, line 209, inrestricted exec ccode in environment File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/controllers/default.pyhttp://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/default.py , line 240, in module File C:\web2py_src_2.1.1\web2py\gluon\globals.py, line 187, in lambda self._caller = lambda f: f() File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/controllers/default.pyhttp://127.0.0.1:8000/admin/default/edit/TAMOTO/controllers/default.py , line 20, in index return auth.wiki() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 3227, in wiki return self._wiki.read(slug)['content'] if slug else self._wiki() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 4705, in __call__ return self.search() File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 4990, in search content.append(self.cloud()['content']) File C:\web2py_src_2.1.1\web2py\gluon\tools.py, line 5001, in cloud orderby = ~count, limitby=(0,20)) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 8790, in select return adapter.select(self.query,fields,attributes) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1615, in select return self._select_aux(sql,fields,attributes) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1580, in _select_aux self.execute(sql) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 2856, in execute return self.log_execute(command, args) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1687, in log_execute ret = self.cursor.execute(*a, **b) DatabaseError: ORA-00904: WIKI_TAG.WIKI_PAGE: invalid identifier On Tuesday, October 16, 2012 12:20:30 PM UTC-5, Massimo Di Pierro wrote: On Tuesday, 16 October 2012 11:23:29 UTC-5, Bill Thayer wrote: Note for future searchers people as foolish as I am to try and use Oracle for web site backend. I did not have this issue with tables created by web2py. so why did you create the wiki tables manually? I am missing something. --
Re: [web2py] [FYI] Pyodel is now a plugin
Hi Alan. I went through the registration process, got the Google sign in. Signed in with google too and then did not get re-directed back. -Bill On Wednesday, September 12, 2012 11:49:47 AM UTC-5, Alan Etkin wrote: El miércoles, 12 de septiembre de 2012 12:19:02 UTC-3, Tito Garrido escribió: Hey Alan, I was about to test it but it requested access to my google account, is it expected? The Google account login activates if you register with an active google user session. For now you can avoid the extra authentication by closing your google user session before registration. Anyway, clicking the ... google account gives you normal access to the app too. --
[web2py] What are these odd menu dots from the auth.wiki menu?
https://lh3.googleusercontent.com/-6ZrkWiYpzU8/UH3T2J1J9II/ACo/bdZfoL-xDfg/s1600/funnymenu.png --
[web2py] Auth Wiki functionality?
Hello everyone, Thanks to Allen, Villas, of course Massimo among a few others I have web2py auth.wiki with Oracle storing the media blobs and all the pages. I believe I can use the wiki features in a structure way to improv productivity and cross department functionality in my workplace. Now what in the heck to do with it? The app wizard created a bunch of controllers like @auth.requires_login() def part_manage(): form = SQLFORM.smartgrid(db.part) return locals() but if I add @{component:default/part_manage} to my markmin I get a page with my SQLFORM.smartgrid inside a page so I get two footers and two headers. Not to mention the add and edit pages should really be a wiki page with my table attributes added. Looks like auth-wiki is for creating web pages but what caught my attention was the media and tagging capability built in so I don't have to write my own app to do what's already there. However, I have a bunch of tables (parts, sub parts, orders, samples, testing, analyses for tested samples, etc...) defined for my application and basically 75% of the items have attachments, images, files, user references and tags too. Unless someone says different I guess I should be adding a wiki_page column to all of my tables? Then create separate edit/show/create controllers that generate the proper...slug...and return a wiki page? That shouldn't break my relationships I don't think. Just kind of wondering if there's already a know technique for my application that you know of? Regards, Bill --
[web2py] Re: Problem with adding Grids in book
Hello Mike, I'm not an expert but i think you need to go to http://127.0.0.1:8000/myapp/appadmin/index then click on the auth user table and add a user, then go to the groups table table and create a manager then go to the membership table and make your new user a manager then go to the permissions table and make 3 entries: permission = Create group=manager; permission = read group=manager; permission = update group=manager, This is a quick answer on my way out the door hope it helped. -Bill On Tuesday, October 16, 2012 6:33:19 PM UTC-5, mikech wrote: The section Adding Grids refers to using appadmin to create a group manager, but I can't find anything in appadmin that allows that. Could someone give me a clue. It seems that something is missing here. --
[web2py] Re: web2py memory leak
Perhaps someone can check session.connect with Oracle for a rocket server memory leak? To reproduce on windows 7 using web2py 2.1.1 from source: 1) Create a new simple application called simpleapp where simpleapp is the name of an application with an Oracle table for storing sessions 2) Create a new 0.py model file set:settings.database_uri='oracle:username/password@server:1521/servicename' 3) in db.py: line 14: db = DAL(settings.database_uri, check_reserved=['oracle']) line 15: 16: ## store sessions and tickets there session.connect(request, response, db=db, migrate= 'db.web2py_session_simpleapp') line 29: auth.define_tables(username=True, signature=False, migrate=False) Takes about an hour or less for rocket server to run out of memory so that it will just just spin and not respond to the stop server button click. --
[web2py] Re: web2py memory leak
That's all I have right now. Haven't tried it with SQLLite. On Monday, October 15, 2012 3:35:25 PM UTC-5, Massimo Di Pierro wrote: I this only work Oracle? On Monday, 15 October 2012 14:56:44 UTC-5, Bill Thayer wrote: Perhaps someone can check session.connect with Oracle for a rocket server memory leak? To reproduce on windows 7 using web2py 2.1.1 from source: 1) Create a new simple application called simpleapp where simpleapp is the name of an application with an Oracle table for storing sessions 2) Create a new 0.py model file set:settings.database_uri='oracle:username/password@server:1521/servicename' 3) in db.py: line 14: db = DAL(settings.database_uri, check_reserved=['oracle']) line 15: 16: ## store sessions and tickets there session.connect(request, response, db=db, migrate= 'db.web2py_session_simpleapp') line 29: auth.define_tables(username=True, signature=False, migrate=False) Takes about an hour or less for rocket server to run out of memory so that it will just just spin and not respond to the stop server button click. --
[web2py] Re: auth.wiki usage
Thought I'd start over with a brand new application get the wiki working but I am running into difficulty before I even get to the wiki part. I created a brand new app and started by moving my 0.py file into models then edited db.py like so: if not request.env.web2py_runtime_gae: ## if NOT running on Google App Engine use SQLite or other DB db = DAL(settings.database_uri, check_reserved=['oracle']) ## store sessions and tickets there session.connect(request, response, db=db, migrate= 'db.web2py_session_tamoto') else: . . . ## create all tables needed by auth if not custom tables auth.define_tables(username=True, signature=False, migrate=False) Of course I get an Oracle Error: Traceback (most recent call last): File C:\web2py_src_2.1.1\web2py\gluon\restricted.py, line 209, inrestricted exec ccode in environment File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/models/db.pyhttp://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py , line 16, in module session.connect(request, response, db=db, migrate= 'db.web2py_session_tamoto') File C:\web2py_src_2.1.1\web2py\gluon\globals.py, line 581, in connect migrate=table_migrate, File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 7092, in define_table table = self.lazy_define_table(tablename,*fields,**args) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 7124, inlazy_define_table polymodel=polymodel) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 920, in create_table self.create_sequence_and_triggers(query,table) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 2865, increate_sequence_and_triggers self.execute(query) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 2856, in execute return self.log_execute(command, args) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1687, in log_execute ret = self.cursor.execute(*a, **b) DatabaseError: ORA-00955: name is already used by an existing object Thought I might give writing a patch a try so I tried catching and ignoring the exception in the OracleAdaptor but it does not work. def create_sequence_and_triggers(self, query, table, **args): from contrib.pg8000.errors import DatabaseError err = DatabaseError tablename = table._tablename sequence_name = table._sequence_name trigger_name = table._trigger_name try: self.execute(query) self.execute('CREATE SEQUENCE %s START WITH 1 INCREMENT BY 1 NOMAXVALUE MINVALUE -1;' % sequence_name) self.execute( CREATE OR REPLACE TRIGGER %(trigger_name)s BEFORE INSERT ON %(tablename)s FOR EACH ROW DECLARE curr_val NUMBER; diff_val NUMBER; PRAGMA autonomous_transaction; BEGIN IF :NEW.id IS NOT NULL THEN EXECUTE IMMEDIATE 'SELECT %(sequence_name)s.nextval FROM dual' INTO curr_val; diff_val := :NEW.id - curr_val - 1; IF diff_val != 0 THEN EXECUTE IMMEDIATE 'alter sequence %(sequence_name)s increment by '|| diff_val; EXECUTE IMMEDIATE 'SELECT %(sequence_name)s.nextval FROM dual' INTO curr_val; EXECUTE IMMEDIATE 'alter sequence %(sequence_name)s increment by 1'; END IF; END IF; SELECT %(sequence_name)s.nextval INTO :NEW.id FROM DUAL; END; % dict(trigger_name=trigger_name, tablename=tablename, sequence_name=sequence_name)) except DatabaseError as error: if 'ORA-00955' in error.value(): pass --
[web2py] Re: auth.wiki usage
Hi villas, Yes I agree and did do that. My development is at point where my tables are defined. If I go much farther into development without deploying to the test server than it is too difficult to narrow down errors so i want to focus on the basic functionality up front. With all of the errors I have I really need to nail down the migration in small steps at a time. To simplify my final design I'd really like to use the built in wiki. I'd also like to store my file objects in the database and not in the server. So my goal is to add a blob field to the auth.wiki(). So a small incremental approach is best for me while I fight through all of the challenges. Thanks, Bill On Monday, October 15, 2012 4:21:24 PM UTC-5, villas wrote: Hi Bill My experience is that it isn't a good idea to do experimental development on a tricky DB. It is too easy to bite off more than you can chew. You will save heaps of time by prototyping your app on Sqlite first. Only when your data schema becomes more stable should you move over to your DB. In this way you can more easily differentiate between your own coding errors and any DB adaptor errors etc and this will make it quicker to learn too. Just 2 cts, D --
[web2py] Re: auth.wiki usage
Hi Massimo. Yes the problem is not with the sqlite. I just confirmed that it does work and the session table is in the databases folder. My Oracle db already has the auth tables and web2py_session table defined. I suspect there is a null value for the user field since no one would be logged in when the app comes up. Somehow that is OK with SQL lite. Here are the session variables: Variables session Storage {'auth': None, '_user_agent': {'os': {'...ser': {'version' : '15.0.1', 'name': 'Firefox'}}} request Storage {'function': 'index', 'body': cStringI...lications\\ TAMOTO\\', 'post_vars': Storage {}} session._try_store_in_db bound method Session._try_store_in_db of Stora...er': {'version': '15.0.1', 'name': 'Firefox'}}} response Storage {'body': cStringIO.StringO object at 0...a at 0x03FE8F30, 'view': 'default/index.html'} As I mentioned earlier. This is a brand new application. No tables other than auth_ and web2py_session_ defined here yet. -Bill On Monday, October 15, 2012 4:30:17 PM UTC-5, Massimo Di Pierro wrote: I am using sqlite and I tried sessions in db (again) and I cannot reproduce this problem. On Monday, 15 October 2012 16:03:45 UTC-5, Bill Thayer wrote: Thought I'd start over with a brand new application get the wiki working but I am running into difficulty before I even get to the wiki part. I created a brand new app and started by moving my 0.py file into models then edited db.py like so: if not request.env.web2py_runtime_gae: ## if NOT running on Google App Engine use SQLite or other DB db = DAL(settings.database_uri, check_reserved=['oracle']) ## store sessions and tickets there session.connect(request, response, db=db, migrate= 'db.web2py_session_tamoto') else: . . . ## create all tables needed by auth if not custom tables auth.define_tables(username=True, signature=False, migrate=False) Of course I get an Oracle Error: Traceback (most recent call last): File C:\web2py_src_2.1.1\web2py\gluon\restricted.py, line 209, inrestricted exec ccode in environment File C:/web2py_src_2.1.1/web2py/applications/TAMOTO/models/db.pyhttp://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py , line 16, in module session.connect(request, response, db=db, migrate= 'db.web2py_session_tamoto') File C:\web2py_src_2.1.1\web2py\gluon\globals.py, line 581, in connect migrate=table_migrate, File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 7092, indefine_table table = self.lazy_define_table(tablename,*fields,**args) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 7124, inlazy_define_table polymodel=polymodel) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 920, increate_table self.create_sequence_and_triggers(query,table) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 2865, increate_sequence_and_triggers self.execute(query) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 2856, in execute return self.log_execute(command, args) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1687, inlog_execute ret = self.cursor.execute(*a, **b) DatabaseError: ORA-00955: name is already used by an existing object Thought I might give writing a patch a try so I tried catching and ignoring the exception in the OracleAdaptor but it does not work. After setting migrate_enabled to False: db = DAL(settings.database_uri, check_reserved=['oracle'], migrate_enabled=False) I get this error: Traceback (most recent call last): File C:\web2py_src_2.1.1\web2py\gluon\main.py, line 541, in wsgibase session._try_store_in_db(request, response) File C:\web2py_src_2.1.1\web2py\gluon\globals.py, line 670, in _try_store_in_db record_id = table.insert(**dd) File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 7812, in insert return ret File C:\web2py_src_2.1.1\web2py\gluon\dal.py, line 1160, in insert raise e IntegrityError: ORA-01400: cannot insert NULL into (UWAVEDAT.WEB2PY_SESSION_TAMOTO.ID) --
[web2py] Re: web2py memory leak
Generally I pay attention to the physical memory in the task manager. I generally use about 3.5 to 4.5 GB but if I leave the rocket server on for a very long time it will grow to 5.5 GB and give me problems. If I forget and leave it on all night I will have to hard boot my PC. The basic behavior is that I will be working for a while then a page will take too long to load. I will stop the browser from loading the page and shut down the server. it turns white and fails to respond. I just happened to be debugging my other isuue with a basic application and the problem got much worse with session.connect enabled. I shouldn't have any cron jobs running since I am using this mornings release of 2.1.1 and you said cron was disabled by default. I do have logging enabled but I'm not getting an extraordinary amount of logged messages. Regards, Bill On Monday, October 15, 2012 3:55:05 PM UTC-5, Massimo Di Pierro wrote: It would help if we could isolate the problem. How are you measuring it? make sure you are not running cron jobs in background (with 2.1 cron was always enabled) moreover web2py's memory usage may grows for the first 100 requests than some stuff is garbage collected and it stabilizes. massimo On Monday, 15 October 2012 15:39:30 UTC-5, Bill Thayer wrote: That's all I have right now. Haven't tried it with SQLLite. On Monday, October 15, 2012 3:35:25 PM UTC-5, Massimo Di Pierro wrote: I this only work Oracle? On Monday, 15 October 2012 14:56:44 UTC-5, Bill Thayer wrote: Perhaps someone can check session.connect with Oracle for a rocket server memory leak? To reproduce on windows 7 using web2py 2.1.1 from source: 1) Create a new simple application called simpleapp where simpleapp is the name of an application with an Oracle table for storing sessions 2) Create a new 0.py model file set:settings.database_uri='oracle:username/password@server:1521/servicename' 3) in db.py: line 14: db = DAL(settings.database_uri, check_reserved=['oracle']) line 15: 16: ## store sessions and tickets there session.connect(request, response, db=db, migrate= 'db.web2py_session_simpleapp') line 29: auth.define_tables(username=True, signature=False, migrate=False) Takes about an hour or less for rocket server to run out of memory so that it will just just spin and not respond to the stop server button click. --
[web2py] Re: auth.wiki usage
After checking SQL developer and discovering the Triggers were not made for web2py_storage_tamoto table I recalled this post: https://groups.google.com/d/msg/web2py/r7qMRK2Eir0/D91Ine9NMzkJ from earlier today. That error occured at line 2865 in dal.py so the triggers never got created. So using SQL Developer I created the trigger. Edited my connecction string to connect to Oracle and. ...SUCCESS!!! The session was added to the database table. No on to the wiki stuff I hope. --
[web2py] Re: auth.wiki usage
Thank you. I voted for it. On Sunday, October 14, 2012 9:43:03 AM UTC-5, Alan Etkin wrote: I didn't expect you wanted to add a field to the table after calling .,, I opened an issue in the project page http://code.google.com/p/web2py/issues/detail?id=1087 --
[web2py] Re: auth.wiki usage
I tried your patch but the tables were not defined. Is my db.py code correct? The commented out code causes an errortype 'exceptions.AttributeError'('DAL' object has no attribute 'wiki_media') but when commented out the appadmin displays all the tables except the wiki_ tables. from gluon import DAL from gluon.tools import Auth, Crud, Service, PluginManager, prettydate, Wiki auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() ## create all tables needed by auth if not custom tables auth.settings.extra_fields['auth_user']= [ Field('business_unit', length=15), Field('default_charge_number', length=15), Field('location', length=15), Field('phone', length=12)] auth.settings.extra_fields[wiki_page] = [Field(filedata, blob),] auth.define_tables(username=True, migrate=False) # # db.wiki_media.filename.uploadfield='filedata' # db.wiki_page.filedata.represent = lambda value,row: \ # A('get it', _href=URL('download', args=value)) --
[web2py] Re: auth.wiki usage
Cool! The wiki_ tables are now visible in the app admin pages! My app does not produce errors wrt wiki_. However, the login page will not login any users, I can not register a new user and cannot create or edit users from app admin although the auth_ tables are all visible. In fact I just tried to create a record for a completely different table and it would not create it. I think my db connection is OK since I did fix 2 web2py errors by creating 2 missing columns in SQL Developer and corrected ora errors 'Table does not have attribute 'WIKI_PAGE'.'HTML' 'WIKI_MEDIA'.'IS_ACTIVE'. Those columns were missing when I manually created the Oracle wiki_ tables. Thank you for your help. My spirits are getting better now. Just need to figure out why my auth_tables are accessible. Regards, Bill On Sunday, October 14, 2012 4:06:09 PM UTC-5, Alan Etkin wrote: El domingo, 14 de octubre de 2012 15:56:05 UTC-3, Bill Thayer escribió: I tried your patch but the tables were not defined. Is my db.py code correct? The commented out code causes an errortype 'exceptions.AttributeError'('DAL' object has no attribute 'wiki_media') but when commented out the appadmin displays all the tables except the wiki_ tables. I think this command is missing: # after auth.settings.extra_fields ... auth.wiki(resolve=False) Without that line, the tables will not be available within the controller or the model --
[web2py] Re: auth.wiki usage
Hmmm. These lines do not work so I'm unsure where to insert them. db.wiki_media.filename.uploadfield='filedata' db.wiki_page.filedata.represent = lambda value,row: \ A('get it', _href=URL('download', args=value)) Here's the error as usual. Traceback (most recent call last): File C:\web2py\gluon\restricted.py, line 209, in restricted exec ccode in environment File C:/web2py/applications/TAMOTO/models/db.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py, line 68, in module db.wiki_page.filedata.represent = lambda value,row: \ File C:\web2py\gluon\dal.py, line 7626, in __getitem__ return ogetattr(self, str(key)) AttributeError: 'Table' object has no attribute 'filedata' The code now looks like: db = DAL(settings.database_uri, check_reserved=['oracle'], migrate_enabled= False, fake_migrate_all=True) session.secure() session.connect(request, response, db) . . . from gluon import DAL from gluon.tools import Auth, Crud, Service, PluginManager, prettydate, Wiki auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() ## create all tables needed by auth if not custom tables auth.settings.extra_fields['auth_user']= [ Field('business_unit', length=15), Field('default_charge_number', length=15), Field('location', length=15), Field('phone', length=12)] auth.settings.extra_fields[wiki_media] = [Field(filedata, blob),] auth.wiki(resolve=False) db.wiki_media.filename.uploadfield='filedata' db.wiki_page.filedata.represent = lambda value,row: \ A('get it', _href=URL('download', args=value)) auth.define_tables(username=True, migrate=False, fake_migrate=True) . . . On Sunday, October 14, 2012 4:06:09 PM UTC-5, Alan Etkin wrote: El domingo, 14 de octubre de 2012 15:56:05 UTC-3, Bill Thayer escribió: I tried your patch but the tables were not defined. Is my db.py code correct? The commented out code causes an errortype 'exceptions.AttributeError'('DAL' object has no attribute 'wiki_media') but when commented out the appadmin displays all the tables except the wiki_ tables. I think this command is missing: # after auth.settings.extra_fields ... auth.wiki(resolve=False) Without that line, the tables will not be available within the controller or the model --
[web2py] Re: auth.wiki usage
#code now looks like this, put the represent= inside the # call to extra_fileds . . . auth.settings.extra_fields[wiki_media] = [ Field(filedata, blob, represent = lambda value,row: \ A('get it', _href=URL('download', args=value))),] auth.define_tables(username=True, migrate=False, fake_migrate=True) auth.wiki(resolve=False) db.wiki_media.filename.uploadfield='filedata' Made 2 changes but don't know which one fixed the AtributeError. Hard to tell if the filedata blob field is working because i order to test it I need to log in but my ability to log in or create a user is still not working. On Sunday, October 14, 2012 6:07:33 PM UTC-5, Alan Etkin wrote: Hmmm. These lines do not work so I'm unsure where to insert them. I wonder if you shouldn't call .define_tables() before calling auth.wiki(), there could be need of configuring auth tables before creating the wiki tables. --
[web2py] Re: auth.wiki usage
the index displays the login page but after logging in returns the login page without logging in the user (user is in db) editing the user from auth_user edit user page returns the edit user page without committing the changes. registering a new user or adding one from auth_user simply returns the same page without creating the user. I thought I would try using the sqllite db like you did. The error said that auth user tables were not created so I cleared my session information, editited auth.define_tables(username=True, migrate=True) #set migrate=True and re-started the server...ooopsnot good. Traceback (most recent call last): File C:\web2py\gluon\restricted.py, line 209, in restricted exec ccode in environment File C:/web2py/applications/TAMOTO/models/db.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py, line 70, in module auth.wiki(resolve=False) File C:\web2py\gluon\tools.py, line 3192, in wiki env=env) File C:\web2py\gluon\tools.py, line 4597, in __init__ args.append(field) UnboundLocalError: local variable 'args' referenced before assignment On Sunday, October 14, 2012 6:59:09 PM UTC-5, Alan Etkin wrote: Made 2 changes but don't know which one fixed the AtributeError. Hard to tell if the filedata blob field is working because I doubt it has something to do with the changes in the patch to tools.py. I have created a scaffolding app with the default Sqlite connection that extends the wiki_page table with extra fields, list the wiki tables in appadmin and does auth_user crud without issues. What is the output if you submit an auth_user create form? Does web2py return any error traceback or anything? --
[web2py] Re: Cannot connect to Oracle from web2py? — Just want to use the DAL…
I did not have much luck with 64 bit anything. I think Oracle XE might can be 64 bit but I am using cx_Oracle-5.1.2-11g.win32-py2.7 with 32 bit python 2.7 and web2py 2.0.9. On Saturday, October 13, 2012 4:58:55 AM UTC-5, Alec Taylor wrote: Getting this error: raise RuntimeError, no driver available %s, self.drivers TypeError: raise: arg 3 must be a traceback or None Even though I've installed the driver (instantclient-basic-windows.x64-11.2.0.3.0.zip from http://www.oracle.com/technetwork/topics/winx64soft-089540.html; + set ORACLE_HOME env_var to dir where it extracted + added it to PATH) and python module (cx_Oracle-5.1.2-11g.win-amd64-py2.7.msi from http://sourceforge.net/projects/cx-oracle/files/5.1.2/). Basically I just want to use web2py's DAL, so is there a way I can fake everything? Just want to get the SQL Output to plug directly into my DB. Thanks for all suggestions, Alec Taylor --
[web2py] Re: auth.wiki usage
Hello Allen, my code looks like: from gluon import DAL from gluon.tools import Auth, Crud, Service, PluginManager, prettydate, Wiki auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() ## create all tables needed by auth if not custom tables auth.define_tables(username=True, migrate=False) auth.wiki(resolve=False) . . . media=db.wiki_media media.fields.append(Field('filedata', 'blob')) media.filedata.represent = lambda value,row: \ A('get it', _href=URL('download', args=value)) db.wiki_media.filename.uploadfield='filedata' And produces the error: Traceback (most recent call last): File C:\web2py\gluon\restricted.py, line 209, in restricted exec ccode in environment File C:/web2py/applications/TAMOTO/models/db.py http://127.0.0.1:8000/admin/default/edit/TAMOTO/models/db.py, line 103, in module media.filedata.represent = lambda value,row: \ File C:\web2py\gluon\dal.py, line 7626, in __getitem__ return ogetattr(self, str(key)) AttributeError: 'Table' object has no attribute 'filedata' So I think I'm close. Just not aware of how to add that field yet. -Bill On Friday, October 12, 2012 5:08:18 PM UTC-5, Alan Etkin wrote: ¿What error do you get? To force the wiki class to define the tables before serving the wiki pages (so you can customize them) you must add something like this to the model auth.wiki(resolve=False) El viernes, 12 de octubre de 2012 18:47:10 UTC-3, Bill Thayer escribió: I applied the patch to gluon tools (basically just give the Wiki.__init__(...,render=None,...) a default value of 'markmin' instead of None to remove the first error. Now I need to add an upload field to wiki_media but this does not work: media=db.tables(db.wiki_media) media.fields.append(Field('filedata', 'blob')) media.filedata.represent = lambda value,row: \ A('get it', _href=URL('download', args=value)) db.wiki_media.filename.uploadfield='filedata' On Friday, October 12, 2012 3:48:11 PM UTC-5, Bill Thayer wrote: I'm just starting down the same road so I hope you found success or at least some resources. So far I've had to manually add the tables found in tools.py to Oracle. From here it looks like I might need: from gluon.tools import Auth, Crud, Service, PluginManager, prettydate, Wiki auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() wiki = Wiki(auth=auth, render='html') or perhaps I'll put it after auth.define_tables(username=True, migrate=False) I'll keep you posted. -Bill On Friday, September 21, 2012 7:44:13 PM UTC-5, guruyaya wrote: I'm trying to figure out how to use the built in auth.wiki feature. I read the markmin syntax allows expending the syntax using the extra tag. Is there a way to implement it in auth.wiki? where should the de of the extra functionality be? *Is there a guide containing all options for this feature?* Thanks in advance Yair --
[web2py] Re: Legacy db / references
I'm certainly no expert but I might try to define: ref_asset_category.format=('%(asset_category_name)s') or something like that. Check my syntax of course. Hope it works. -Bill On Saturday, October 13, 2012 7:11:35 PM UTC-5, Kenneth wrote: Hello, this is my first time trying to connect to a legacy database. My database models file looks like this: db.define_table('ref_asset_category', Field('asset_category_id', type='id'), Field('asset_category_name', type='string')) db.define_table('assets', Field('asset_id', type='id'), Field('asset_label', type='string'), Field('asset_category_id', 'reference ref_asset_category')) When using crud to edit a assets record the asset_catefory_id is only shown as an text box, not as an drop down selection box. What am I doing wrong? Kenneth --
[web2py] Re: auth.wiki usage
I'm just starting down the same road so I hope you found success or at least some resources. So far I've had to manually add the tables found in tools.py to Oracle. From here it looks like I might need: from gluon.tools import Auth, Crud, Service, PluginManager, prettydate, Wiki auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() wiki = Wiki(auth=auth, render='html') or perhaps I'll put it after auth.define_tables(username=True, migrate=False) I'll keep you posted. -Bill On Friday, September 21, 2012 7:44:13 PM UTC-5, guruyaya wrote: I'm trying to figure out how to use the built in auth.wiki feature. I read the markmin syntax allows expending the syntax using the extra tag. Is there a way to implement it in auth.wiki? where should the de of the extra functionality be? *Is there a guide containing all options for this feature?* Thanks in advance Yair --
[web2py] Re: auth.wiki usage
I applied the patch to gluon tools (basically just give the Wiki.__init__(...,render=None,...) a default value of 'markmin' instead of None to remove the first error. Now I need to add an upload field to wiki_media but this does not work: media=db.tables(db.wiki_media) media.fields.append(Field('filedata', 'blob')) media.filedata.represent = lambda value,row: \ A('get it', _href=URL('download', args=value)) db.wiki_media.filename.uploadfield='filedata' On Friday, October 12, 2012 3:48:11 PM UTC-5, Bill Thayer wrote: I'm just starting down the same road so I hope you found success or at least some resources. So far I've had to manually add the tables found in tools.py to Oracle. From here it looks like I might need: from gluon.tools import Auth, Crud, Service, PluginManager, prettydate, Wiki auth = Auth(db) crud, service, plugins = Crud(db), Service(), PluginManager() wiki = Wiki(auth=auth, render='html') or perhaps I'll put it after auth.define_tables(username=True, migrate=False) I'll keep you posted. -Bill On Friday, September 21, 2012 7:44:13 PM UTC-5, guruyaya wrote: I'm trying to figure out how to use the built in auth.wiki feature. I read the markmin syntax allows expending the syntax using the extra tag. Is there a way to implement it in auth.wiki? where should the de of the extra functionality be? *Is there a guide containing all options for this feature?* Thanks in advance Yair --
[web2py] Re: editing gluon.tools
Thank you! On Wednesday, October 10, 2012 8:54:16 PM UTC-5, Massimo Di Pierro wrote: This has already been fixed in trunk and the nightly built. file was replaced by filename. On Wednesday, 10 October 2012 19:18:24 UTC-5, Bill Thayer wrote: This question should show my lack of Python knowledge but here goes... In gluon.tools def Wiki(object): . . . table_definitions = { 'wiki_page':{ 'args':[ Field('slug', requires=[IS_SLUG(), IS_NOT_IN_DB(db,'wiki_page.slug')], readable=False,writable=False), Field('title',unique=True), Field('body','text',notnull=True), Field('tags','list:string'), Field('can_read','list:string', writable=perms, readable=perms, default=[Wiki.everybody]), Field('can_edit', 'list:string', writable=perms,readable=perms, default=[Wiki.everybody]), Field('changelog'), Field('html','text',compute=render, readable=False, writable=False), auth.signature], 'vars':{'format':'%(title)s'}}, 'wiki_tag':{ 'args':[ Field('name'), Field('wiki_page','reference wiki_page'), auth.signature], 'vars':{'format':'%(name)s'}}, 'wiki_media':{ 'args':[ Field('wiki_page','reference wiki_page'), Field('title',required=True), Field('file','upload',required=True), auth.signature], 'vars':{'format':'%(title)s'}} } Since file is an Oracle keyword and I'd like to save my file_data in the database how do I overwrite this Wiki class and still have it work in my application? Should I just edit gluon.tools? That seems dangerous when it comes time to upgrade. I also want db.wiki_media.file_data.represent = lambda value,row: \ A('get it',_href =URL('download', args=value)) but I think I can add that to db.py Perhaps I should copy gluon.tools to my application modules folder and edit it there? Regards, Bill --
[web2py] Re: My saga in parts bevcause Google is broken
Hi Massimo, auth.define_tables(username=True, signature=False, migrate=False, fake_migrate=False) The migrate=false here was an attempt to supress the Error: class 'cx_Oracle.DatabaseError' ORA-00955: name is already used by an existing object Changed my connection string to sqllite and did get a wiki page that said to create page: index. So I entered - test index creation - in the body and got this error: Traceback (most recent call last): File C:\web2py\gluon\restricted.py, line 209, in restricted exec ccode in environment File C:/web2py/applications/welcome/controllers/default.py http://127.0.0.1:8000/admin/default/edit/welcome/controllers/default.py, line 75, in module File C:\web2py\gluon\globals.py, line 186, in lambda self._caller = lambda f: f() File C:/web2py/applications/welcome/controllers/default.py http://127.0.0.1:8000/admin/default/edit/welcome/controllers/default.py, line 21, in index return dict(form=auth.wiki()) File C:\web2py\gluon\tools.py, line 3198, in wiki return self._wiki.read(slug)['content'] if slug else self._wiki() File C:\web2py\gluon\tools.py, line 4647, in __call__ return self.read(zero) File C:\web2py\gluon\tools.py, line 4695, in read return dict(content=XML(self.fix_hostname(page.html))) File C:\web2py\gluon\tools.py, line 4678, in fix_hostname return body.replace('://HOSTNAME','://%s' % self.host) AttributeError: 'NoneType' object has no attribute 'replace' On Tuesday, October 9, 2012 9:30:00 PM UTC-5, Massimo Di Pierro wrote: Bill, have you tried using web2py wil sqlite only? does that work for you? I do not understand the reason for migrate=false. On Tuesday, 9 October 2012 17:19:28 UTC-5, Bill Thayer wrote: Fixing broken migrations... db.define_table(,migrate=False,fake_migrate=True) means rebuild the table meta data according to the table definitions. db = DAL(...,fake_migrate_all=True) means you are fixing all the tables at once but will not help in narrowing down the problem. Looks like the metadata matches my table definitions. I have narrowed the problem down to wiki page does not exist in the database. Since it doesn't exist in metadata either then what's the problem? Shouldn't the behavior be to create the database table and the table metadata? That is my desire. if I delete all of my meta data that usually creates more problems. But in theory setting migrate=False, fake_migrate_all=True then all the metadata gets rebuilt without touching the database. Not my intention as I want the missing tables added. db = DAL('oracle://uname/pw@dbserver:1521', migrate=False, fake_migrate_all=True) auth.define_tables(username=True, signature=False, migrate=False, fake_migrate=True) Error: class 'cx_Oracle.DatabaseError' ORA-00942: table or view does not exist and Welcome /database has 6 auth tables and wiki_media, page, tag So this should not build metadata but go ahead and build the tables not in the database: db = DAL('oracle://uname/pw@dbserver:1521', migrate=True) auth.define_tables(username=True, signature=False, migrate=True, fake_migrate=False) Error: class 'cx_Oracle.DatabaseError' ORA-00955: name is already used by an existing object No Kidding! There's no way I'm going to delete my auth_user table from Oracle at this point, I have another app using it! Perhaps this will create the missing tables? db = DAL('oracle://uname/pw@dbserver:1521', migrate=True) auth.define_tables(username=True, signature=False, migrate=False, fake_migrate=False) Now my browser is spinning and spinning. I suspect that the rocket server is hung again and I need to stop the process with the task manager. I'll give it a few minutes and see. --
[web2py] Re: My saga in parts bevcause Google is broken
Is this the correct controller? def index(): example action using the internationalization operator T and flash rendered by views/default/index.html or views/generic.html if you need a simple wiki simple replace the two lines below with: return auth.wiki() response.flash = T(Welcome to web2py!) return auth.wiki() On Tuesday, October 9, 2012 9:30:00 PM UTC-5, Massimo Di Pierro wrote: Bill, have you tried using web2py wil sqlite only? does that work for you? I do not understand the reason for migrate=false. On Tuesday, 9 October 2012 17:19:28 UTC-5, Bill Thayer wrote: Fixing broken migrations... db.define_table(,migrate=False,fake_migrate=True) means rebuild the table meta data according to the table definitions. db = DAL(...,fake_migrate_all=True) means you are fixing all the tables at once but will not help in narrowing down the problem. Looks like the metadata matches my table definitions. I have narrowed the problem down to wiki page does not exist in the database. Since it doesn't exist in metadata either then what's the problem? Shouldn't the behavior be to create the database table and the table metadata? That is my desire. if I delete all of my meta data that usually creates more problems. But in theory setting migrate=False, fake_migrate_all=True then all the metadata gets rebuilt without touching the database. Not my intention as I want the missing tables added. db = DAL('oracle://uname/pw@dbserver:1521', migrate=False, fake_migrate_all=True) auth.define_tables(username=True, signature=False, migrate=False, fake_migrate=True) Error: class 'cx_Oracle.DatabaseError' ORA-00942: table or view does not exist and Welcome /database has 6 auth tables and wiki_media, page, tag So this should not build metadata but go ahead and build the tables not in the database: db = DAL('oracle://uname/pw@dbserver:1521', migrate=True) auth.define_tables(username=True, signature=False, migrate=True, fake_migrate=False) Error: class 'cx_Oracle.DatabaseError' ORA-00955: name is already used by an existing object No Kidding! There's no way I'm going to delete my auth_user table from Oracle at this point, I have another app using it! Perhaps this will create the missing tables? db = DAL('oracle://uname/pw@dbserver:1521', migrate=True) auth.define_tables(username=True, signature=False, migrate=False, fake_migrate=False) Now my browser is spinning and spinning. I suspect that the rocket server is hung again and I need to stop the process with the task manager. I'll give it a few minutes and see. --
[web2py] editing gluon.tools
This question should show my lack of Python knowledge but here goes... In gluon.tools def Wiki(object): . . . table_definitions = { 'wiki_page':{ 'args':[ Field('slug', requires=[IS_SLUG(), IS_NOT_IN_DB(db,'wiki_page.slug')], readable=False,writable=False), Field('title',unique=True), Field('body','text',notnull=True), Field('tags','list:string'), Field('can_read','list:string', writable=perms, readable=perms, default=[Wiki.everybody]), Field('can_edit', 'list:string', writable=perms,readable=perms, default=[Wiki.everybody]), Field('changelog'), Field('html','text',compute=render, readable=False, writable=False), auth.signature], 'vars':{'format':'%(title)s'}}, 'wiki_tag':{ 'args':[ Field('name'), Field('wiki_page','reference wiki_page'), auth.signature], 'vars':{'format':'%(name)s'}}, 'wiki_media':{ 'args':[ Field('wiki_page','reference wiki_page'), Field('title',required=True), Field('file','upload',required=True), auth.signature], 'vars':{'format':'%(title)s'}} } Since file is an Oracle keyword and I'd like to save my file_data in the database how do I overwrite this Wiki class and still have it work in my application? Should I just edit gluon.tools? That seems dangerous when it comes time to upgrade. I also want db.wiki_media.file_data.represent = lambda value,row: \ A('get it', _href= URL('download', args=value)) but I think I can add that to db.py Perhaps I should copy gluon.tools to my application modules folder and edit it there? Regards, Bill --
[web2py] Re: Very frustrated....
Hi Cliff, Via SQL developer and also through using DAL on the command line. I've seen delays from problems in syntax and misplellings too however omething else is going on. The rocket server will actually lock up and require me to end it's process. Too. On Monday, October 8, 2012 9:08:58 PM UTC-5, Cliff Kachinske wrote: Can you connect to the database outside of Web2py? The long delay can mean connection problems, which I have induced by typing the db name incorrectly. On Monday, October 8, 2012 8:06:58 PM UTC-4, Bill Thayer wrote: Hi Massimo, Thank you. After installing the latest version I deleted the contents of the databases folder and run with DAL(...,migrate=True) got one error, set the table causing the error to migrate=false and re-ran. Now all the database tables are created but now (after seting my settings.migrate to False in 0.py the browser just shows the spinner when I try to access my app's index page. The progress bar is shows only half progress. Regards, Bill On Monday, October 8, 2012 5:53:04 PM UTC-5, Massimo Di Pierro wrote: LOL - Make sure you use stable Version 2.0.9 (2012-09-13 23:51:30) of the latest trunk. Not any intermediate version. - do not use the wizard if you do not want crap. The wizard is experimental and not the best piece of web2py. - If your tables already exist and you are happy with them run onces with db = DAL(,fake_migrate=True) and then run with DAL(...,migrate=false) - If instead you want web2py to create tables and use migrations, delete you database, re-create it empty, delete everything under yourapp/databases/ and run with DAL(...,migrate=True). On Monday, 8 October 2012 17:33:06 UTC-5, Bill Thayer wrote: Ok, I have my Oracle database. From some attempted migrations I have the auth tables defined and two other tables defined of about 17 tables.The typical error is Object with that name already exists or some crap like that. I figured clicking the clean button would help... DONT DO THAT! Now my browser just spins and spins. My SQL log has a bunch of crap that i do not want created in my database like archive tables that the wizard created. Yet if I delete the log file it will not re-create with a fresh log. After restoiring my backup my sql.log file has 2627 lines in it and the time stamps go back 6 days when I started this all from scratch. Without having to re-create my application again. How can i just get a nice clean SQL file and how, once connect to my DB can I get my new db.py or db_wizard.py definitions to make the database tables that aren't already created without throwing errors for the ones that already are? --