iDrDex / stargeo

Other
2 stars 0 forks source link

Can't delete series_tags #2

Closed iDrDex closed 9 years ago

iDrDex commented 9 years ago

Tried to delete an annotation and got below traceback that its in the validation queue. See below

iDrDex commented 9 years ago

<!DOCTYPE html>

``` ticket stargeo/171.66.219.128.2015-03-12.21-56-05.1e350303-a154-42aa-a82b-29f00b9f5736 ```

Error ticket for "stargeo"

Ticket ID

171.66.219.128.2015-03-12.21-56-05.1e350303-a154-42aa-a82b-29f00b9f5736

Version

web2py™ Version 2.9.12-stable+timestamp.2015.01.17.06.11.03
Python Python 2.7.6: /usr/local/bin/uwsgi (prefix: /usr)

Traceback

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.
Traceback (most recent call last):
File "/home/www-data/web2py/gluon/main.py", line 472, in wsgibase
BaseAdapter.close_all_instances('commit')
File "/home/www-data/web2py/gluon/dal/connection.py", line 44, in close_all_instances
db._adapter.close(action)
File "/home/www-data/web2py/gluon/dal/connection.py", line 24, in close
getattr(self, action)()
File "/home/www-data/web2py/gluon/dal/adapters/base.py", line 1269, in commit
return self.connection.commit()
File "/home/www-data/web2py/gluon/contrib/pg8000/dbapi.py", line 455, in _fn
return fn(self, *args, **kwargs)
File "/home/www-data/web2py/gluon/contrib/pg8000/dbapi.py", line 539, in commit
self.conn.commit()
File "/home/www-data/web2py/gluon/contrib/pg8000/interface.py", line 612, in commit
self._commit.execute()
File "/home/www-data/web2py/gluon/contrib/pg8000/interface.py", line 169, in execute
self._row_desc, cmd = self.c.bind(self._portal_name, self._statement_name, args, self._parse_row_desc, kwargs.get("stream"))
File "/home/www-data/web2py/gluon/contrib/pg8000/protocol.py", line 943, in _fn
return fn(self, *args, **kwargs)
File "/home/www-data/web2py/gluon/contrib/pg8000/protocol.py", line 1142, in bind
return reader.handle_messages()
File "/home/www-data/web2py/gluon/contrib/pg8000/protocol.py", line 911, in handle_messages
retval = handler(msg, *args, **kwargs)
File "/home/www-data/web2py/gluon/contrib/pg8000/protocol.py", line 1181, in _bind_nodata
reader.handle_messages()
File "/home/www-data/web2py/gluon/contrib/pg8000/protocol.py", line 916, in handle_messages
raise exc
ProgrammingError: ('ERROR', '23503', 'update or delete on table "series_tag" violates foreign key constraint "validation_job_series_tag_id_753f178d05a7d70f_fk_series_tag_id" on table "validation_job"')

Error snapshot help Detailed traceback description

<class 'gluon.contrib.pg8000.errors.ProgrammingError'>(('ERROR', '23503', 'update or delete on table "series_tag" violates foreign key constraint "validation_job_series_tag_id_753f178d05a7d70f_fk_series_tag_id" on table "validation_job"'))

inspect attributes

Exception instance attributes

__module__ 'gluon.contrib.pg8000.errors'
__getslice__ <method-wrapper '__getslice__' of ProgrammingError object>
__str__ <method-wrapper '__str__' of ProgrammingError object>
__getattribute__ <method-wrapper '__getattribute__' of ProgrammingError object>
__dict__ {}
__sizeof__ <built-in method __sizeof__ of ProgrammingError object>
__weakref__ None
__init__ <method-wrapper '__init__' of ProgrammingError object>
__setattr__ <method-wrapper '__setattr__' of ProgrammingError object>
__reduce_ex__ <built-in method __reduce_ex__ of ProgrammingError object>
__new__ <built-in method __new__ of type object>
__format__ <built-in method __format__ of ProgrammingError object>
__class__ <class 'gluon.contrib.pg8000.errors.ProgrammingError'>
__doc__ None
__getitem__ <method-wrapper '__getitem__' of ProgrammingError object>
__setstate__ <built-in method __setstate__ of ProgrammingError object>
__reduce__ <built-in method __reduce__ of ProgrammingError object>
args ('ERROR', '23503', 'update or delete on table "series_tag" violates ...7d70f_fk_series_tag_id" on table "validation_job"')
__subclasshook__ <built-in method __subclasshook__ of type object>
__unicode__ <built-in method __unicode__ of ProgrammingError object>
__delattr__ <method-wrapper '__delattr__' of ProgrammingError object>
__repr__ <method-wrapper '__repr__' of ProgrammingError object>
__hash__ <method-wrapper '__hash__' of ProgrammingError object>

Frames

  • File /home/www-data/web2py/gluon/main.py in wsgibase at line 472 code arguments variables

    Function argument list

    (environ={'CONTENT_LENGTH': '1507', 'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundarySx67y1Q1djRetTzX', 'DOCUMENT_ROOT': '/usr/share/nginx/html', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_CONTENT_LENGTH': '1507', 'HTTP_CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundarySx67y1Q1djRetTzX', 'HTTP_COOKIE': '__utma=64793325.604585692.1411750749.1412876238....1.66.219.128-a167e22f-d093-4176-917f-f071376122da', ...}, responder=<built-in function uwsgi_spit>)

    Code listing
    467.
    468.
    469.
    470.
    471.
    472.

    473.
    474.
    475.
    476.
                        if response.do_not_commit is True:
    BaseAdapter.close_all_instances(None)
    elif response.custom_commit:
    BaseAdapter.close_all_instances(response.custom_commit)
    else:
    BaseAdapter.close_all_instances('commit')


    # ##################################################
    # if session not in db try store session on filesystem
    # this must be done after trying to commit database!
    Variables
    BaseAdapter.close_all_instances <function close_all_instances>
    global BaseAdapter <class 'gluon.dal.adapters.base.BaseAdapter'>
  • File /home/www-data/web2py/gluon/dal/connection.py in close_all_instances at line 44 code arguments variables

    Function argument list

    (action='commit')

    Code listing
    39.
    40.
    41.
    42.
    43.
    44.

    45.
    46.
    47.
    48.
            """ to close cleanly databases in a multithreaded environment """
    dbs = getattr(THREAD_LOCAL,'db_instances',{}).items()
    for db_uid, db_group in dbs:
    for db in db_group:
    if hasattr(db,'_adapter'):
    db._adapter.close(action)

    getattr(THREAD_LOCAL,'db_instances',{}).clear()
    getattr(THREAD_LOCAL,'db_instances_zombie',{}).clear()
    if callable(action):
    action(None)
    Variables
    action 'commit'
    db._adapter <gluon.dal.adapters.postgres.PostgreSQLAdapter object>
    db <DAL uri="postgres:******@star.cwxuiazqnkkn.us-west-2.rds.amazonaws.com/star">
    db._adapter.close <bound method PostgreSQLAdapter.close of <gluon.dal.adapters.postgres.PostgreSQLAdapter object>>
  • File /home/www-data/web2py/gluon/dal/connection.py in close at line 24 code arguments variables

    Function argument list

    (self=<gluon.dal.adapters.postgres.PostgreSQLAdapter object>, action='commit', really=True)

    Code listing
    19.
    20.
    21.
    22.
    23.
    24.

    25.
    26.
    27.
    28.
        def close(self,action='commit',really=True):
    if action:
    if callable(action):
    action(self)
    else:
    getattr(self, action)()

    # ## if you want pools, recycle this connection
    if self.pool_size:
    GLOBAL_LOCKER.acquire()
    pool = ConnectionPool.POOLS[self.uri]
    Variables
    action 'commit'
    self <gluon.dal.adapters.postgres.PostgreSQLAdapter object>
    builtingetattr <built-in function getattr>
  • File /home/www-data/web2py/gluon/dal/adapters/base.py in commit at line 1269 code arguments variables

    Function argument list

    (self=<gluon.dal.adapters.postgres.PostgreSQLAdapter object>)

    Code listing
    1264.
    1265.
    1266.
    1267.
    1268.
    1269.

    1270.
    1271.
    1272.
    1273.
                        tables = tables.union(self.tables(query.second))
    return list(tables)

    def commit(self):
    if self.connection:
    return self.connection.commit()


    def rollback(self):
    if self.connection:
    return self.connection.rollback()
    Variables
    self <gluon.dal.adapters.postgres.PostgreSQLAdapter object>
    self.connection None
    self.connection.commit undefined
  • File /home/www-data/web2py/gluon/contrib/pg8000/dbapi.py in _fn at line 455 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.dbapi.ConnectionWrapper object>, *args=(), **kwargs={})

    Code listing
    450.
    451.
    452.
    453.
    454.
    455.

    456.
    457.
    458.
    459.

    def require_open_connection(fn):
    def _fn(self, *args, **kwargs):
    if self.conn == None:
    raise ConnectionClosedError()
    return fn(self, *args, **kwargs)

    return _fn

    ##
    # The class of object returned by the {@link #connect connect method}.
    Variables
    self <gluon.contrib.pg8000.dbapi.ConnectionWrapper object>
    args ()
    fn <function commit>
    kwargs {}
  • File /home/www-data/web2py/gluon/contrib/pg8000/dbapi.py in commit at line 539 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.dbapi.ConnectionWrapper object>)

    Code listing
    534.
    535.
    536.
    537.
    538.
    539.

    540.
    541.
    542.
    543.
            # statements on other threads.  Support for that type of lock will
    # be done later.
    if self.__tpc_xid:
    raise ProgrammingError("Cannot do a normal commit() inside a "
    "TPC transaction!"
    )
    self.conn.commit()


    ##
    # Rolls back the current database transaction.
    # <p>
    Variables
    self <gluon.contrib.pg8000.dbapi.ConnectionWrapper object>
    self.conn.commit undefined
    self.conn None
  • File /home/www-data/web2py/gluon/contrib/pg8000/interface.py in commit at line 612 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.interface.Connection object>)

    Code listing
    607.
    608.
    609.
    610.
    611.
    612.

    613.
    614.
    615.
    616.
        # <p>
    # Stability: Added in v1.00, stability guaranteed for v1.xx.
    def commit(self):
    if self.is_closed:
    raise ConnectionClosedError()
    self._commit.execute()

    self.in_transaction = False

    ##
    # Rolls back the running transaction.
    Variables
    self <gluon.contrib.pg8000.interface.Connection object>
    self._commit <gluon.contrib.pg8000.interface.PreparedStatement object>
    self._commit.execute <bound method PreparedStatement.execute of <gluo...ntrib.pg8000.interface.PreparedStatement object>>
  • File /home/www-data/web2py/gluon/contrib/pg8000/interface.py in execute at line 169 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.interface.PreparedStatement object>, *args=(), **kwargs={})

    Code listing
    164.
    165.
    166.
    167.
    168.
    169.

    170.
    171.
    172.
    173.
                    self._ongoing_row_count = 0
    if self._portal_name != None:
    self.c.close_portal(self._portal_name)
    self._command_complete = False
    self
    ._portal_name = "pg8000_portal_%s" % self._statement_number
    self._row_desc, cmd = self.c.bind(self._portal_name, self._statement_name, args, self._parse_row_desc, kwargs.get("stream"))

    if self._row_desc:
    # We execute our cursor right away to fill up our cache. This
    # prevents the cursor from being destroyed, apparently, by a rogue
    # Sync between Bind and Execute. Since it is quite likely that
    Variables
    kwargs.get <built-in method get of dict object>
    args ()
    self.c <gluon.contrib.pg8000.protocol.Connection object>
    self <gluon.contrib.pg8000.interface.PreparedStatement object>
    cmd undefined
    self._row_desc None
    self.c.bind <bound method Connection._fn of <gluon.contrib.pg8000.protocol.Connection object>>
    self._statement_name 'pg8000_statement_959'
    self._parse_row_desc (None, [])
    kwargs {}
    self._portal_name 'pg8000_portal_959'
  • File /home/www-data/web2py/gluon/contrib/pg8000/protocol.py in _fn at line 943 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.protocol.Connection object>, *args=('pg8000_portal_959', 'pg8000_statement_959', (), (None, []), None), **kwargs={})

    Code listing
    938.
    939.
    940.
    941.
    942.
    943.

    944.
    945.
    946.
    947.

    def sync_on_error(fn):
    def _fn(self, *args, **kwargs):
    try:
    self._sock_lock.acquire()
    return fn(self, *args, **kwargs)

    except:
    self._sync()
    raise
    finally
    :
    Variables
    self <gluon.contrib.pg8000.protocol.Connection object>
    args ('pg8000_portal_959', 'pg8000_statement_959', (), (None, []), None)
    fn <function bind>
    kwargs {}
  • File /home/www-data/web2py/gluon/contrib/pg8000/protocol.py in bind at line 1142 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.protocol.Connection object>, portal='pg8000_portal_959', statement='pg8000_statement_959', params=(), parse_data=(None, []), copy_stream=None)

    Code listing
    1137.
    1138.
    1139.
    1140.
    1141.
    1142.

    1143.
    1144.
    1145.
    1146.

    # Return the new row desc, since it will have the format types we
    # asked the server for
    reader.add_message(RowDescription, lambda msg: (msg, None))

    return reader.handle_messages()


    def _copy_in_response(self, copyin, fileobj, old_reader):
    if fileobj == None:
    raise CopyQueryWithoutStreamError()
    Variables
    reader.handle_messages <bound method MessageReader.handle_messages of <gluon.contrib.pg8000.protocol.MessageReader object>>
    reader <gluon.contrib.pg8000.protocol.MessageReader object>
  • File /home/www-data/web2py/gluon/contrib/pg8000/protocol.py in handle_messages at line 911 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.protocol.MessageReader object>)

    Code listing
    906.
    907.
    908.
    909.
    910.
    911.

    912.
    913.
    914.
    915.
                msg = self._conn._read_message()
    msg_handled = False
    for
    (msg_class, handler, args, kwargs) in self._msgs:
    if isinstance(msg, msg_class):
    msg_handled = True
    retval = handler(msg, *args, **kwargs)

    if retval:
    # The handler returned a true value, meaning that the
    # message loop should be aborted.
    if exc != None:
    Variables
    msg <gluon.contrib.pg8000.protocol.NoData object>
    handler <bound method Connection._bind_nodata of <gluon.contrib.pg8000.protocol.Connection object>>
    retval 0
    args ('pg8000_portal_959', <gluon.contrib.pg8000.protocol.MessageReader object>, None)
    kwargs {}
  • File /home/www-data/web2py/gluon/contrib/pg8000/protocol.py in _bind_nodata at line 1181 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.protocol.Connection object>, msg=<gluon.contrib.pg8000.protocol.NoData object>, portal='pg8000_portal_959', old_reader=<gluon.contrib.pg8000.protocol.MessageReader object>, copy_stream=None)

    Code listing
    1176.
    1177.
    1178.
    1179.
    1180.
    1181.

    1182.
    1183.
    1184.
    1185.
            reader.add_message(CopyOutResponse, self._copy_out_response, copy_stream, reader)
    reader.add_message(CopyInResponse, self._copy_in_response, copy_stream, reader)
    reader.add_message(CommandComplete, lambda msg, out: out.setdefault('msg', msg) and False, output)
    reader.add_message(ReadyForQuery, lambda msg: 1)
    reader.delay_raising_exception = True
    reader.handle_messages()


    old_reader.return_value((None, output['msg']))

    @sync_on_error
    Variables
    reader.handle_messages <bound method MessageReader.handle_messages of <gluon.contrib.pg8000.protocol.MessageReader object>>
    reader <gluon.contrib.pg8000.protocol.MessageReader object>
  • File /home/www-data/web2py/gluon/contrib/pg8000/protocol.py in handle_messages at line 916 code arguments variables

    Function argument list

    (self=<gluon.contrib.pg8000.protocol.MessageReader object>)

    Code listing
    911.
    912.
    913.
    914.
    915.
    916.

    917.
    918.
    919.
    920.
                        retval = handler(msg, *args, **kwargs)
    if retval:
    # The handler returned a true value, meaning that the
    # message loop should be aborted.
    if exc != None:
    raise exc

    return retval
    elif hasattr(self, "_retval"):
    # The handler told us to return -- used for non-true
    # return values
    Variables
    exc ProgrammingError('ERROR', '23503', 'update or de...70f_fk_series_tag_id" on table "validation_job"')

Context

locals request session response

locals

args:
()
exc:
ProgrammingError('ERROR', '23503', 'update or de...70f_fk_series_tag_id" on table "validation_job"')
handler:
<function <lambda>>
kwargs:
{}
msg:
<ReadyForQuery Idle>
msg_class:
<class 'gluon.contrib.pg8000.protocol.ReadyForQuery'>
msg_handled:
True
retval:
1
self:
<gluon.contrib.pg8000.protocol.MessageReader object>

request

ajax:
False
application:
stargeo
args:
db
series_tag
2663
cid:
None
client:
171.66.219.128
controller:
appadmin
cookies:
session_id_admin:
171.66.219.128-3fd23e65-8cf2-4c1a-8abd-fe307f2de3ab
comment:
domain:
expires:
httponly:
max-age:
path:
secure:
version:
session_id_init:
171.66.219.134-6814190a-db67-46af-bfa9-d4953883bfde
comment:
domain:
expires:
httponly:
max-age:
path:
secure:
version:
session_id_stargeo:
171.66.219.128-a167e22f-d093-4176-917f-f071376122da
comment:
domain:
expires:
httponly:
max-age:
path:
secure:
version:
stargeo_user:
e30=
comment:
domain:
expires:
httponly:
max-age:
path:
secure:
version:
env:
CONTENT_LENGTH:
1507
CONTENT_TYPE:
multipart/form-data; boundary=----WebKitFormBoundarySx67y1Q1djRetTzX
DOCUMENT_ROOT:
/usr/share/nginx/html
HTTP_ACCEPT:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING:
gzip, deflate
HTTP_ACCEPT_LANGUAGE:
en-us
HTTP_CONNECTION:
keep-alive
HTTP_CONTENT_LENGTH:
1507
HTTP_CONTENT_TYPE:
multipart/form-data; boundary=----WebKitFormBoundarySx67y1Q1djRetTzX
HTTP_COOKIE:
__utma=64793325.604585692.1411750749.1412876238.1412883567.6; __utmz=64793325.1411750749.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _ga=GA1.2.604585692.1411750749; _gat=1; stargeo_user="e30="; session_id_admin=171.66.219.128-3fd23e65-8cf2-4c1a-8abd-fe307f2de3ab; session_id_init=171.66.219.134-6814190a-db67-46af-bfa9-d4953883bfde; session_id_stargeo=171.66.219.128-a167e22f-d093-4176-917f-f071376122da
HTTP_HOST:
stargeo.org
HTTP_ORIGIN:
https://stargeo.org
HTTP_REFERER:
https://stargeo.org/stargeo/appadmin/update/db/series_tag/2663
HTTP_USER_AGENT:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18
PATH_INFO:
/stargeo/appadmin/update/db/series_tag/2663
QUERY_STRING:
REMOTE_ADDR:
171.66.219.128
REMOTE_PORT:
48359
REQUEST_METHOD:
POST
REQUEST_URI:
/stargeo/appadmin/update/db/series_tag/2663
SERVER_NAME:
ip-172-31-26-46
SERVER_PORT:
443
SERVER_PROTOCOL:
HTTP/1.1
SERVER_SOFTWARE:
nginx/1.4.6
UWSGI_SCHEME:
https
app_folders:
set(['/home/www-data/web2py/applications/stargeo/', '/home/www-data/web2py/applications/admin/', '/home/www-data/web2py/applications/init/'])
applications_parent:
/home/www-data/web2py
content_length:
1507
content_type:
multipart/form-data; boundary=----WebKitFormBoundarySx67y1Q1djRetTzX
db_sessions:
set([])
debugging:
False
document_root:
/usr/share/nginx/html
gluon_parent:
/home/www-data/web2py
http_accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
http_accept_encoding:
gzip, deflate
http_accept_language:
en-us
http_connection:
keep-alive
http_content_length:
1507
http_content_type:
multipart/form-data; boundary=----WebKitFormBoundarySx67y1Q1djRetTzX
http_cookie:
__utma=64793325.604585692.1411750749.1412876238.1412883567.6; __utmz=64793325.1411750749.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _ga=GA1.2.604585692.1411750749; _gat=1; stargeo_user="e30="; session_id_admin=171.66.219.128-3fd23e65-8cf2-4c1a-8abd-fe307f2de3ab; session_id_init=171.66.219.134-6814190a-db67-46af-bfa9-d4953883bfde; session_id_stargeo=171.66.219.128-a167e22f-d093-4176-917f-f071376122da
http_host:
stargeo.org
http_origin:
https://stargeo.org
http_referer:
https://stargeo.org/stargeo/appadmin/update/db/series_tag/2663
http_user_agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18
is_jython:
False
is_pypy:
False
is_source:
True
local_hosts:
ip-172-31-26-46
::ffff:127.0.0.1
::1
172.31.26.46
ip-172-31-26-46.us-west-2.compute.internal
127.0.0.1
path_info:
/stargeo/appadmin/update/db/series_tag/2663
query_string:
remote_addr:
171.66.219.128
remote_port:
48359
request_method:
POST
request_uri:
/stargeo/appadmin/update/db/series_tag/2663
server_name:
ip-172-31-26-46
server_port:
443
server_protocol:
HTTP/1.1
server_software:
nginx/1.4.6
uwsgi.node:
ip-172-31-26-46
uwsgi.version:
2.0.9
uwsgi_node:
ip-172-31-26-46
uwsgi_scheme:
https
uwsgi_version:
2.0.9
web2py_path:
/home/www-data/web2py
web2py_version:
2.9.12-stable+timestamp.2015.01.17.06.11.03
wsgi.errors:
<open file 'wsgi_errors', mode 'w' at 0x7f6c35a309c0>
wsgi.file_wrapper:
<built-in function uwsgi_sendfile>
wsgi.input:
<uwsgi._Input object at 0x7f6c2999e060>
wsgi.multiprocess:
True
wsgi.multithread:
False
wsgi.run_once:
False
wsgi.url_scheme:
https
wsgi.version:
1
0
wsgi_errors:
<open file 'wsgi_errors', mode 'w' at 0x7f6c35a309c0>
wsgi_file_wrapper:
<built-in function uwsgi_sendfile>
wsgi_input:
<uwsgi._Input object at 0x7f6c2999e060>
wsgi_multiprocess:
True
wsgi_multithread:
False
wsgi_run_once:
False
wsgi_url_scheme:
https
wsgi_version:
1
0
extension:
html
folder:
/home/www-data/web2py/applications/stargeo/
function:
update
global_settings:
app_folders:
set(['/home/www-data/web2py/applications/stargeo/', '/home/www-data/web2py/applications/admin/', '/home/www-data/web2py/applications/init/'])
applications_parent:
/home/www-data/web2py
db_sessions:
set([])
debugging:
False
gluon_parent:
/home/www-data/web2py
is_jython:
False
is_pypy:
False
is_source:
True
local_hosts:
ip-172-31-26-46
::ffff:127.0.0.1
::1
172.31.26.46
ip-172-31-26-46.us-west-2.compute.internal
127.0.0.1
web2py_version:
2.9.12-stable+timestamp.2015.01.17.06.11.03
is_https:
True
is_local:
False
is_restful:
False
is_sheduler:
None
is_shell:
None
now:
datetime.datetime(2015, 3, 12, 21, 56, 5, 563044)
raw_args:
db/series_tag/2663
raw_extension:
None
url:
/stargeo/appadmin/update/db/series_tag/2663
utcnow:
datetime.datetime(2015, 3, 12, 21, 56, 5, 563044)
uuid:
stargeo/171.66.219.128.2015-03-12.21-56-05.1e350303-a154-42aa-a82b-29f00b9f5736
wsgi:
<gluon.main.LazyWSGI object at 0x7f6c2a380f50>

session

flash:
done!
last_orderby:
None
last_query:
db.series_tag.id==2663

response

body:
<cStringIO.StringO object at 0x7f6c2a37cdf8>
cookies:
session_id_stargeo:
171.66.219.128-a167e22f-d093-4176-917f-f071376122da
comment:
domain:
expires:
httponly:
max-age:
path:
/
secure:
version:
stargeo_user:
e30=
comment:
domain:
.stargeo.org
expires:
httponly:
max-age:
path:
/
secure:
version:
delimiters:
{{
}}
files:
https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css
https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css
https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js
//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css
flash:
form_label_separator:
:
formstyle:
table3cols
generic_patterns:
google_analytics_id:
UA-42964640-3
headers:
X-Powered-By:
web2py
logo:
menu:
design
False
/admin/default/design/stargeo
db
False
/stargeo/appadmin/index
state
False
/stargeo/appadmin/state
cache
False
/stargeo/appadmin/ccache
meta:
author:
Dexter Hadley <dexter@stanford.edu>
generator:
Search Tag Analyze Resource
keywords:
web2py, python, framework, meta-analysis, microarray, public data, crowdsource, gene signature, big data, translational genomics
models_to_run:
^\w+\.py$
^appadmin/\w+\.py$
^appadmin/update/\w+\.py$
postprocessing:
session_client:
171.66.219.128
session_cookie_compression_level:
None
session_cookie_expires:
None
session_cookie_key:
None
session_data_name:
session_data_stargeo
session_file:
<open file '/home/www-data/web2py/applications/stargeo/sessions/088/0c4/171.66.219.128-a167e22f-d093-4176-917f-f071376122da', mode 'rb+' at 0x7f6c29a09db0>
session_filename:
/home/www-data/web2py/applications/stargeo/sessions/171.66.219.128-a167e22f-d093-4176-917f-f071376122da
session_hash:
90e0f5de543b54edf3550e85f6b50a9e
session_id:
171.66.219.128-a167e22f-d093-4176-917f-f071376122da
session_id_name:
session_id_stargeo
session_locked:
True
session_masterapp:
stargeo
session_new:
False
session_storage_type:
file
status:
200
subtitle:
Database Administration (appadmin)
title:
STAR
view:
appadmin.html

In file: Framework

1.

Powered by web2py™ created by Massimo Di Pierro ©2007-2015 - Admin language

``` ```
Suor commented 9 years ago

series_tag can't be deleted 'cause there are depending rows. In this case it's a scheduled validation job, which I can set to delete cascade. But what should I do with validations? Should they be deleted with their series_tag (in this case someones work could be lost) or should they prevent series_tag deletion (as now but probably with nicer message)?

Suor commented 9 years ago

Another option is set series_validation.series_tag_id to ON DELETE SET NULL - unbind validation on annotation deletion. This will permit arbitrary series_tag deletions and in a way preserve most data.

iDrDex commented 9 years ago

Fine for now. Makes sense. Eventually annotations need to get staged before becoming valid and public. We assume for now all 100K are valid. Lets fix problem by retiring this repo and moving to star-django. :)