I would download and start fresh... How did you get 2.14.5? git clone? If so did you clone --recursive?
On Thu, Jun 16, 2016 at 12:41 PM, Richard Vézina < ml.richard.vez...@gmail.com> wrote: > Do they share the same Database, if not it make no sens that auth_user > already exists... Did you modify the welcome app.ini db config? I ask > because web2py use welcome as template for new app... > > On Thu, Jun 16, 2016 at 12:36 PM, Marty Jones <murtin.jo...@gmail.com> > wrote: > >> The reason I suspect a non-application-specific issue is that creating a >> new simple app from the web2py admin console results in a similar database >> issue. Visiting the default/index of the new app spits back: >> >> Traceback (most recent call last): >> File "/home/murtyjones/app/gluon/restricted.py", line 227, in restricted >> exec ccode in environment >> File "/home/murtyjones/app/applications/test_users/models/db.py" >> <https://nolabills.com/admin/default/edit/test_users/models/db.py>, line 93, >> in <module> >> auth.define_tables(username=False, signature=False) >> File "/home/murtyjones/app/gluon/tools.py", line 2376, in define_tables >> format='%(first_name)s %(last_name)s (%(id)s)')) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/base.py", line 576, in >> define_table >> table = self.lazy_define_table(tablename,*fields,**args) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/base.py", line 615, in >> lazy_define_table >> polymodel=polymodel) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", >> line 768, in create_table >> return self.migrator.create_table(*args, **kwargs) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/migrator.py", line >> 269, in create_table >> self.adapter.create_sequence_and_triggers(query, table) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", >> line 820, in create_sequence_and_triggers >> self.execute(query) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/__init__.py", >> line 68, in wrap >> return f(*args, **kwargs) >> File "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", >> line 417, in execute >> rv = self.cursor.execute(command, *args[1:], **kwargs) >> OperationalError: table auth_user already exists >> >> >> >> >> On Thursday, June 16, 2016 at 12:28:35 PM UTC-4, Richard wrote: >>> >>> There shouldn't be issue specific to SQLite (I mean it should work >>> properly), though there is maybe a specific unnoticed issue with it as >>> there has been a big refactoring of pyDAL, I don't recall it the refactored >>> pyDAL was present in 2.14.5 >>> >>> >>> >>> On Thu, Jun 16, 2016 at 12:22 PM, Marty Jones <murtin...@gmail.com> >>> wrote: >>> >>>> Done - no change. >>>> >>>> Is it possible that the issue is SQLite specific and I need to migrate >>>> to MySQL or some other db? >>>> >>>> On Thursday, June 16, 2016 at 12:14:51 PM UTC-4, Richard wrote: >>>>> >>>>> Can you comment out the part of the scheduler, the db lock file may >>>>> come from there... >>>>> >>>>> On Thu, Jun 16, 2016 at 12:05 PM, Marty Jones <murtin...@gmail.com> >>>>> wrote: >>>>> >>>>>> Controller logic is below. Error 1 is occuring under the "dashboard" >>>>>> function. Errors 2/3 under the user function. >>>>>> >>>>>> # -*- coding: utf-8 -*- >>>>>> # this file is released under public domain and you can use without >>>>>> limitations >>>>>> >>>>>> >>>>>> ############################################################################### >>>>>> ## Launch with all settings via "sudo python run_server.py" >>>>>> >>>>>> ############################################################################### >>>>>> >>>>>> import operator # needed for manager_status variable >>>>>> >>>>>> response.title = 'nolabills' >>>>>> >>>>>> def jspage(): >>>>>> link = URL('static', 'main.js') >>>>>> return dict(link=link) >>>>>> >>>>>> def index(): >>>>>> """ >>>>>> For registered users, redirects to the requests page >>>>>> For unregistered users, displays intro message >>>>>> """ >>>>>> >>>>>> signup = URL(a=request.application, c='default', >>>>>> f='user/register') >>>>>> >>>>>> return dict(is_logged_in=auth.is_logged_in(), signup=signup) >>>>>> >>>>>> @auth.requires_membership('manager') >>>>>> def manage(): >>>>>> """ >>>>>> This page, accessible by only managers, shows the current >>>>>> employees >>>>>> of a company as well as any users who are registering themselves >>>>>> as >>>>>> employees of the company. >>>>>> From this page a manager can approve a pending user's membership, >>>>>> as well as revoke the membership of a user on the current >>>>>> employee list. >>>>>> """ >>>>>> pending_list = [] >>>>>> approved_list = [] >>>>>> if request.post_vars: >>>>>> for each in request.post_vars: >>>>>> key = request.post_vars.keys()[0] >>>>>> underscore = key.find('_') >>>>>> id = key[0:underscore] >>>>>> change = key[underscore+1:len(key)] >>>>>> change = None if change == "approve" else "unapproved" >>>>>> # modify db accordingly >>>>>> record = db(db.auth_user.id==id).select().first() >>>>>> record.registration_key=change >>>>>> record.update_record() >>>>>> >>>>>> for row in db().select(): >>>>>> #for row in db(db.auth_user.company==auth.user.company).select(): >>>>>> if row.registration_key: # if pending approval by manager >>>>>> pending_list.append({row.id: >>>>>> {"first":row.first_name,"last":row.last_name}}) >>>>>> else: >>>>>> manager_status = auth.has_membership('manager', row.id) >>>>>> approved_list.append({row.id: >>>>>> {"first":row.first_name,"last":row.last_name,"manager_status":manager_status}}) >>>>>> return dict(pending_list=pending_list, >>>>>> approved_list=approved_list) >>>>>> >>>>>> @auth.requires_login() >>>>>> def dashboard(): >>>>>> """ >>>>>> This page allows a user to send an email to >>>>>> a potential customer, requesting access to bill data >>>>>> """ >>>>>> i = 0 >>>>>> already_submitted = False # default is false; can only be changed >>>>>> if request.post_vars == True >>>>>> >>>>>> # SQLFORM version >>>>>> data_requests = >>>>>> SQLFORM.grid(db(db.data_requests.company==auth.user.company), >>>>>> fields=[db.data_requests.last_name, \ >>>>>> db.data_requests.first_name, >>>>>> \ >>>>>> db.data_requests.email, \ >>>>>> db.data_requests.status, \ >>>>>> db.data_requests.bill_1, >>>>>> ], >>>>>> >>>>>> headers={'data_requests.bill_1':'Most Recent Bill'}, >>>>>> sortable=False, >>>>>> create=False, >>>>>> editable=False, >>>>>> deletable=True, >>>>>> details=False, >>>>>> maxtextlength=30, >>>>>> csv=False, >>>>>> upload=URL('download'), >>>>>> ) >>>>>> >>>>>> pending_list = db().select(db.data_requests.email) >>>>>> # if a new request has been made, update the database >>>>>> if request.post_vars: >>>>>> >>>>>> while not already_submitted and i <= len(data_requests): >>>>>> already_submitted = [True for row in pending_list if >>>>>> row.email == request.post_vars.email] >>>>>> i += 1 >>>>>> >>>>>> from entergy_scraper import download >>>>>> from mailer import send_request >>>>>> >>>>>> if not already_submitted: >>>>>> # generate token >>>>>> import random, base64, sha >>>>>> token = >>>>>> base64.b64encode(sha.sha(str(random.random())).hexdigest())[:8] >>>>>> db.tokens.insert(token = token, >>>>>> first_name = >>>>>> request.post_vars.first_name, >>>>>> last_name = request.post_vars.last_name, >>>>>> email = request.post_vars.email, >>>>>> company = auth.user.company, >>>>>> ) >>>>>> >>>>>> # send request to user >>>>>> db.scheduler_task.insert(status = 'QUEUED', >>>>>> application_name = >>>>>> request.application+'/default', >>>>>> task_name = 'request', >>>>>> group_name = 'email', >>>>>> function_name = 'send_request', >>>>>> args = '["{0}", "{1}", "{2}", >>>>>> "{3}"]'.format( \ >>>>>> request.post_vars.first, >>>>>> request.post_vars.last, request.post_vars.email, token), >>>>>> vars = '{}', >>>>>> enabled = True, >>>>>> start_time = request.now, >>>>>> timeout = 500, # should take >>>>>> less than 500 secs >>>>>> ) >>>>>> # update data_requests to show that the task is >>>>>> AWAITING_CUSTOMER >>>>>> db.data_requests.insert(first_name = >>>>>> request.post_vars.first_name, >>>>>> last_name = >>>>>> request.post_vars.last_name, >>>>>> email = request.post_vars.email, >>>>>> company = auth.user.company, >>>>>> status = 'AWAITING_CUSTOMER', >>>>>> ) >>>>>> >>>>>> >>>>>> return dict(already_submitted=already_submitted, >>>>>> data_requests=data_requests, pending_list=pending_list) >>>>>> >>>>>> def approve_request(): >>>>>> """ >>>>>> Allows a customer to approve a data request >>>>>> """ >>>>>> submitted = 'submitted' >>>>>> valid_token = 'valid_token' >>>>>> invalid_token = 'invalid_token' >>>>>> >>>>>> >>>>>> # if the user has submitted their data and it's not already in >>>>>> the database, let them know we'll get their data >>>>>> if request.post_vars: >>>>>> status = submitted >>>>>> >>>>>> token_submitted = True if db(db.data_requests.email == >>>>>> request.post_vars.email).select(db.tokens.submitted).first() else False >>>>>> >>>>>> if token_submitted == False: >>>>>> # download data >>>>>> db.data_requests.insert(first_name = >>>>>> request.post_vars.first_name, >>>>>> last_name = >>>>>> request.post_vars.last_name, >>>>>> email = request.post_vars.email, >>>>>> company = auth.user.company, >>>>>> energy_username = >>>>>> request.post_vars.energy_username, >>>>>> energy_password = >>>>>> request.post_vars.energy_password, >>>>>> ) >>>>>> >>>>>> # if no submission of info, try to give them the option to do so >>>>>> else: >>>>>> try: >>>>>> status = valid_token >>>>>> token = request.get_vars.token >>>>>> token_row = db(db.tokens.token == token).select().first() >>>>>> first_name = token_row.first_name >>>>>> last_name = token_row.last_name >>>>>> email = token_row.email >>>>>> except: >>>>>> status = invalid_token >>>>>> >>>>>> if status == submitted or status == invalid_token: >>>>>> return dict(status=status, submitted=submitted, >>>>>> invalid_token=invalid_token, token_submitted=token_submitted) >>>>>> else: >>>>>> return dict(status=status, first_name=first_name, >>>>>> last_name=last_name, email=email, submitted=False, invalid_token=False, >>>>>> token_submitted=False) >>>>>> >>>>>> def user(): >>>>>> """ >>>>>> exposes: >>>>>> http://..../[app]/default/user/login >>>>>> http://..../[app]/default/user/logout >>>>>> http://..../[app]/default/user/register >>>>>> http://..../[app]/default/user/profile >>>>>> http://..../[app]/default/user/retrieve_password >>>>>> http://..../[app]/default/user/change_password >>>>>> http://..../[app]/default/user/bulk_register >>>>>> use @auth.requires_login() >>>>>> @auth.requires_membership('group name') >>>>>> @auth.requires_permission('read','table name',record_id) >>>>>> to decorate functions that need access control >>>>>> also notice there is http://..../[app]/appadmin/manage/auth to >>>>>> allow administrator to manage users >>>>>> """ >>>>>> return dict(form=auth()) >>>>>> >>>>>> @cache.action() >>>>>> def download(): >>>>>> """ >>>>>> allows downloading of uploaded files >>>>>> http://..../[app]/default/download/[filename] >>>>>> """ >>>>>> return response.download(request, db) >>>>>> >>>>>> def call(): >>>>>> """ >>>>>> exposes services. for example: >>>>>> http://..../[app]/default/call/jsonrpc >>>>>> decorate with @services.jsonrpc the functions to expose >>>>>> supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv >>>>>> """ >>>>>> return service() >>>>>> >>>>>> >>>>>> >>>>>> On Thursday, June 16, 2016 at 9:36:18 AM UTC-4, Marty Jones wrote: >>>>>> >>>>>>> I uploaded a local application to my DigitalOcean droplet and have >>>>>>> been having a nightmare of a time with the databases. I get this >>>>>>> variety of >>>>>>> errors on various pages: >>>>>>> >>>>>>> *Error 1:* >>>>>>> >>>>>>> Traceback (most recent call last): >>>>>>> File "/home/murtyjones/app/gluon/restricted.py", line 227, in >>>>>>> restricted >>>>>>> exec ccode in environment >>>>>>> File >>>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>>> line 230, in <module> >>>>>>> File "/home/murtyjones/app/gluon/globals.py", line 417, in <lambda> >>>>>>> self._caller = lambda f: f() >>>>>>> File "/home/murtyjones/app/gluon/tools.py", line 4241, in f >>>>>>> return action(*a, **b) >>>>>>> File >>>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>>> line 73, in dashboard >>>>>>> data_requests = >>>>>>> SQLFORM.grid(db(db.data_requests.company==auth.user.company), >>>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/objects.py", line >>>>>>> 91, in __getattr__ >>>>>>> raise AttributeError >>>>>>> AttributeError >>>>>>> >>>>>>> >>>>>>> *Error 2 (trying to apply changes as a user to own profile):* >>>>>>> >>>>>>> Traceback (most recent call last): >>>>>>> File "/home/murtyjones/app/gluon/restricted.py", line 227, in >>>>>>> restricted >>>>>>> exec ccode in environment >>>>>>> File >>>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>>> line 230, in <module> >>>>>>> File "/home/murtyjones/app/gluon/globals.py", line 417, in <lambda> >>>>>>> self._caller = lambda f: f() >>>>>>> File >>>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>>> line 211, in user >>>>>>> return dict(form=auth()) >>>>>>> File "/home/murtyjones/app/gluon/tools.py", line 1941, in __call__ >>>>>>> return getattr(self, args[0])() >>>>>>> File "/home/murtyjones/app/gluon/tools.py", line 4026, in profile >>>>>>> hideerror=self.settings.hideerror): >>>>>>> File "/home/murtyjones/app/gluon/sqlhtml.py", line 1744, in accepts >>>>>>> self.id_field_name]).update(**fields) >>>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/objects.py", line >>>>>>> 2041, in update >>>>>>> ret = db._adapter.update("%s" % table._tablename, self.query, >>>>>>> fields) >>>>>>> File >>>>>>> "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", line >>>>>>> 519, in update >>>>>>> raise e >>>>>>> OperationalError: attempt to write a readonly database >>>>>>> >>>>>>> >>>>>>> *Error 3 (trying to logout as a user):* >>>>>>> >>>>>>> Traceback (most recent call last): >>>>>>> File "/home/murtyjones/app/gluon/restricted.py", line 227, in >>>>>>> restricted >>>>>>> exec ccode in environment >>>>>>> File >>>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>>> line 230, in <module> >>>>>>> File "/home/murtyjones/app/gluon/globals.py", line 417, in <lambda> >>>>>>> self._caller = lambda f: f() >>>>>>> File >>>>>>> "/home/murtyjones/app/applications/nolabills/controllers/default.py" >>>>>>> <https://nolabills.com/admin/default/edit/nolabills/controllers/default.py>, >>>>>>> line 211, in user >>>>>>> return dict(form=auth()) >>>>>>> File "/home/murtyjones/app/gluon/tools.py", line 1941, in __call__ >>>>>>> return getattr(self, args[0])() >>>>>>> File "/home/murtyjones/app/gluon/tools.py", line 3235, in logout >>>>>>> self.log_event(log, self.user) >>>>>>> File "/home/murtyjones/app/gluon/tools.py", line 2530, in log_event >>>>>>> self.table_event().insert(description=str(description % vars), >>>>>>> origin=origin, user_id=user_id) >>>>>>> File "/home/murtyjones/app/gluon/packages/dal/pydal/objects.py", line >>>>>>> 740, in insert >>>>>>> ret = self._db._adapter.insert(self, self._listify(fields)) >>>>>>> File >>>>>>> "/home/murtyjones/app/gluon/packages/dal/pydal/adapters/base.py", line >>>>>>> 482, in insert >>>>>>> raise e >>>>>>> IntegrityError: FOREIGN KEY constraint failed >>>>>>> >>>>>>> >>>>>>> *db.py* >>>>>>> ## app configuration made easy. Look inside private/appconfig.ini >>>>>>> from gluon.contrib.appconfig import AppConfig >>>>>>> ## import current for current.db = db line >>>>>>> from gluon import current >>>>>>> >>>>>>> ## once in production, remove reload=True to gain full speed >>>>>>> myconf = AppConfig(reload=True) >>>>>>> >>>>>>> ## if NOT running on Google App Engine use SQLite or other DB >>>>>>> db = DAL(myconf.take('db.uri'), >>>>>>> pool_size=myconf.take('db.pool_size', cast=int), migrate_enabled = >>>>>>> myconf.get('db.migrate'), check_reserved=['all']) >>>>>>> >>>>>>> ## define current.db for module usage >>>>>>> current.db = db >>>>>>> >>>>>>> ## by default give a view/generic.extension to all actions from >>>>>>> localhost >>>>>>> ## none otherwise. a pattern can be 'controller/function.extension' >>>>>>> response.generic_patterns = ['*'] if request.is_local else [] >>>>>>> ## choose a style for forms >>>>>>> response.formstyle = myconf.take('forms.formstyle') # or >>>>>>> 'bootstrap3_stacked' or 'bootstrap2' or other >>>>>>> response.form_label_separator = myconf.take('forms.separator') >>>>>>> >>>>>>> from gluon.tools import Auth, Service, PluginManager >>>>>>> >>>>>>> auth = Auth(db) >>>>>>> service = Service() >>>>>>> plugins = PluginManager() >>>>>>> >>>>>>> auth.settings.extra_fields['auth_user']= [ >>>>>>> Field('company'), >>>>>>> ] >>>>>>> >>>>>>> ## create all tables needed by auth if not custom tables >>>>>>> auth.define_tables(username=False, signature=False, migrate=True, >>>>>>> fake_migrate=True) >>>>>>> >>>>>>> ## configure email >>>>>>> mail = auth.settings.mailer >>>>>>> mail.settings.server = 'smtp.gmail.com' >>>>>>> mail.settings.sender = 'em...@gmail.com' >>>>>>> mail.settings.login = 'em...@gmail.com:password' >>>>>>> >>>>>>> ## configure auth policy >>>>>>> auth.settings.registration_requires_verification = True >>>>>>> auth.settings.registration_requires_approval = True >>>>>>> auth.settings.reset_password_requires_verification = True >>>>>>> >>>>>>> ## after defining tables, uncomment below to enable auditing >>>>>>> # auth.enable_record_versioning(db) >>>>>>> >>>>>>> >>>>>>> ## create list of companies for which this is available >>>>>>> db.define_table('company_info', >>>>>>> Field('name'), >>>>>>> Field('street_address'), >>>>>>> ) >>>>>>> >>>>>>> ## create a table for the queue of not yet fulfilled data requests >>>>>>> db.define_table('data_requests', >>>>>>> Field('first_name'), >>>>>>> Field('last_name'), >>>>>>> Field('entergy_username'), >>>>>>> Field('entergy_password'), >>>>>>> Field('email'), >>>>>>> Field('company'), >>>>>>> Field('status', default='QUEUED'), >>>>>>> Field('runs', 'integer', default=0), >>>>>>> Field('bill_1', 'upload', uploadfield='bill_1_file'), >>>>>>> Field('bill_1_file', 'blob'), >>>>>>> ) >>>>>>> >>>>>>> >>>>>>> ## create a table for generating tokens >>>>>>> db.define_table('tokens', >>>>>>> Field('first_name'), >>>>>>> Field('last_name'), >>>>>>> Field('email'), >>>>>>> Field('company'), >>>>>>> Field('token'), >>>>>>> Field('submitted', default=False), >>>>>>> ) >>>>>>> >>>>>>> >>>>>>> >>>>>>> *sql.log* >>>>>>> timestamp: 2016-06-15T14:20:52.811948 >>>>>>> CREATE TABLE auth_user( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> first_name CHAR(128), >>>>>>> last_name CHAR(128), >>>>>>> email CHAR(512), >>>>>>> password CHAR(512), >>>>>>> registration_key CHAR(512), >>>>>>> reset_password_key CHAR(512), >>>>>>> registration_id CHAR(512) >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:20:52.856816 >>>>>>> CREATE TABLE auth_group( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> role CHAR(512), >>>>>>> description TEXT >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:20:52.899975 >>>>>>> CREATE TABLE auth_membership( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> user_id INTEGER REFERENCES auth_user (id) ON DELETE CASCADE , >>>>>>> group_id INTEGER REFERENCES auth_group (id) ON DELETE CASCADE >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:20:53.040386 >>>>>>> CREATE TABLE auth_permission( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> group_id INTEGER REFERENCES auth_group (id) ON DELETE CASCADE , >>>>>>> name CHAR(512), >>>>>>> table_name CHAR(512), >>>>>>> record_id INTEGER >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:20:53.092848 >>>>>>> CREATE TABLE auth_event( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> time_stamp TIMESTAMP, >>>>>>> client_ip CHAR(512), >>>>>>> user_id INTEGER REFERENCES auth_user (id) ON DELETE CASCADE , >>>>>>> origin CHAR(512), >>>>>>> description TEXT >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:20:53.223004 >>>>>>> CREATE TABLE auth_cas( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> user_id INTEGER REFERENCES auth_user (id) ON DELETE CASCADE , >>>>>>> created_on TIMESTAMP, >>>>>>> service CHAR(512), >>>>>>> ticket CHAR(512), >>>>>>> renew CHAR(1) >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:53.166163 >>>>>>> ALTER TABLE auth_user ADD company CHAR(512); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:53.554653 >>>>>>> CREATE TABLE company_info( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> name CHAR(512), >>>>>>> street_address CHAR(512) >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:53.604055 >>>>>>> CREATE TABLE data_requests( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> first_name CHAR(512), >>>>>>> last_name CHAR(512), >>>>>>> entergy_username CHAR(512), >>>>>>> entergy_password CHAR(512), >>>>>>> email CHAR(512), >>>>>>> company CHAR(512), >>>>>>> status CHAR(512), >>>>>>> runs INTEGER, >>>>>>> bill_1 CHAR(512), >>>>>>> bill_1_file BLOB >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:53.645905 >>>>>>> CREATE TABLE tokens( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> first_name CHAR(512), >>>>>>> last_name CHAR(512), >>>>>>> email CHAR(512), >>>>>>> company CHAR(512), >>>>>>> token CHAR(512), >>>>>>> submitted CHAR(512) >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:56.435830 >>>>>>> CREATE TABLE scheduler_task( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> application_name CHAR(512), >>>>>>> task_name CHAR(512), >>>>>>> group_name CHAR(512), >>>>>>> status CHAR(512), >>>>>>> function_name CHAR(512), >>>>>>> uuid CHAR(255) UNIQUE, >>>>>>> args TEXT, >>>>>>> vars TEXT, >>>>>>> enabled CHAR(1), >>>>>>> start_time TIMESTAMP, >>>>>>> next_run_time TIMESTAMP, >>>>>>> stop_time TIMESTAMP, >>>>>>> repeats INTEGER, >>>>>>> retry_failed INTEGER, >>>>>>> period INTEGER, >>>>>>> prevent_drift CHAR(1), >>>>>>> timeout INTEGER, >>>>>>> sync_output INTEGER, >>>>>>> times_run INTEGER, >>>>>>> times_failed INTEGER, >>>>>>> last_run_time TIMESTAMP, >>>>>>> assigned_worker_name CHAR(512) >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:56.501649 >>>>>>> CREATE TABLE scheduler_run( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> task_id INTEGER REFERENCES scheduler_task (id) ON DELETE CASCADE >>>>>>> , >>>>>>> status CHAR(512), >>>>>>> start_time TIMESTAMP, >>>>>>> stop_time TIMESTAMP, >>>>>>> run_output TEXT, >>>>>>> run_result TEXT, >>>>>>> traceback TEXT, >>>>>>> worker_name CHAR(512) >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:56.546304 >>>>>>> CREATE TABLE scheduler_worker( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> worker_name CHAR(255) UNIQUE, >>>>>>> first_heartbeat TIMESTAMP, >>>>>>> last_heartbeat TIMESTAMP, >>>>>>> status CHAR(512), >>>>>>> is_ticker CHAR(1), >>>>>>> group_names TEXT, >>>>>>> worker_stats TEXT >>>>>>> ); >>>>>>> success! >>>>>>> timestamp: 2016-06-15T14:22:56.589493 >>>>>>> CREATE TABLE scheduler_task_deps( >>>>>>> id INTEGER PRIMARY KEY AUTOINCREMENT, >>>>>>> job_name CHAR(512), >>>>>>> task_parent INTEGER, >>>>>>> task_child INTEGER REFERENCES scheduler_task (id) ON DELETE >>>>>>> CASCADE , >>>>>>> can_visit CHAR(1) >>>>>>> ); >>>>>>> success! >>>>>>> >>>>>>> No idea where to even start with this and would appreciate help. >>>>>>> >>>>>>> -- >>>>>> Resources: >>>>>> - http://web2py.com >>>>>> - http://web2py.com/book (Documentation) >>>>>> - http://github.com/web2py/web2py (Source code) >>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>>>>> --- >>>>>> 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+un...@googlegroups.com. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >>>> Resources: >>>> - http://web2py.com >>>> - http://web2py.com/book (Documentation) >>>> - http://github.com/web2py/web2py (Source code) >>>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>>> --- >>>> 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+un...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> Resources: >> - http://web2py.com >> - http://web2py.com/book (Documentation) >> - http://github.com/web2py/web2py (Source code) >> - https://code.google.com/p/web2py/issues/list (Report Issues) >> --- >> 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/d/optout. >> > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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/d/optout.