Yes you have to when cloning with git, if you don't pyDAL module don't get clone/fresh... You can confirm that, which version of pyDAL you run on, by looking in gluon/packages/dal/pydal/init.py
You should have 16.03 Richard On Thu, Jun 16, 2016 at 12:46 PM, Marty Jones <murtin.jo...@gmail.com> wrote: > believe i did clone, but can't remember if i did recursive. should i? > > i will get a new start and report back > > On Thursday, June 16, 2016 at 12:42:43 PM UTC-4, Richard wrote: >> >> 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.richa...@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...@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+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.