In the event an integrity error had been raised, simply refetch the object.
The other fetch_or_create function in models.py should probably also be looked at and handled.
2014-11-20 22:41:43,600 http://submit.cs.ucsb.edu/file/9cd0a010349fb354cc7c8d5d16447a6ac1406977/_
Traceback (most recent call last):
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid_exclog-0.7-py2.7.egg/pyramid_exclog/__init__.py", line 111, in exclog_tween
return handler(request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/router.py", line 163, in handle_request
response = view_callable(context, request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/config/views.py", line 596, in __call__
return view(context, request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/config/views.py", line 329, in attr_view
return view(context, request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/config/views.py", line 305, in predicate_wrapper
return view(context, request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/config/views.py", line 245, in _secured_view
return view(context, request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/config/views.py", line 355, in rendered_view
result = view(context, request)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/config/views.py", line 501, in _requestonly_view
response = view(request)
File "build/bdist.linux-i686/egg/pyramid_addons/validation.py", line 62, in wrapped
return function(request, **validated_params)
File "./nudibranch/views.py", line 213, in file_create
file_ = File.fetch_or_create(data, base_path, sha1sum=sha1sum)
File "./nudibranch/models.py", line 157, in fetch_or_create
Session.flush()
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 149, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1879, in flush
self._flush(objects)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1997, in _flush
transaction.rollback(_capture_exception=True)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 57, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1961, in _flush
flush_context.execute()
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 370, in execute
rec.execute(self)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 523, in execute
uow
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 64, in save_obj
mapper, table, insert)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 594, in _emit_insert_statements
execute(statement, params)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 717, in execute
return meth(self, multiparams, params)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 317, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 814, in _execute_clauseelement
compiled_sql, distilled_params
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 927, in _execute_context
context)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1076, in _handle_dbapi_exception
exc_info
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 185, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 920, in _execute_context
context)
File "/local/pyramid_apps/nudibranch/venv/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 425, in do_execute
cursor.execute(statement, parameters)
IntegrityError: (IntegrityError) duplicate key value violates unique constraint "file_sha1_key"
'INSERT INTO file (created_at, lines, sha1, size) VALUES (now(), %(lines)s, %(sha1)s, %(size)s) RETURNING file.id' {'sha1': u'9cd0a010349fb354cc7c8d5d16447a6ac1406977', 'lines': 6141, 'size': 1985873}
Exception handling around: https://github.com/ucsb-cs-education/nudibranch/blob/f71022d1d683d69f8c6b670ef7bdfe9542875baa/nudibranch/models.py#L157
In the event an integrity error had been raised, simply refetch the object.
The other
fetch_or_create
function inmodels.py
should probably also be looked at and handled.