Exemple #1
0
    def handle_uncaught_exception(self, request, resolver, exc_info):
        """
        Processing for any otherwise uncaught exceptions (those that will
        generate HTTP 500 responses). Can be overridden by subclasses who want
        customised 500 handling.

        Be *very* careful when overriding this because the error could be
        caused by anything, so assuming something like the database is always
        available would be an error.
        """
        from djangocg.conf import settings

        if settings.DEBUG_PROPAGATE_EXCEPTIONS:
            raise

        logger.error('Internal Server Error: %s', request.path,
            exc_info=exc_info,
            extra={
                'status_code': 500,
                'request': request
            }
        )

        if settings.DEBUG:
            from djangocg.views import debug
            return debug.technical_500_response(request, *exc_info)

        # If Http500 handler is not installed, re-raise last exception
        if resolver.urlconf_module is None:
            six.reraise(*exc_info)
        # Return an HttpResponse that displays a friendly error message.
        callback, param_dict = resolver.resolve500()
        return callback(request, **param_dict)
Exemple #2
0
 def executemany(self, query, args):
     try:
         return self.cursor.executemany(query, args)
     except Database.IntegrityError as e:
         six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
     except Database.DatabaseError as e:
         six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
Exemple #3
0
 def executemany(self, query, param_list):
     query = self.convert_query(query)
     try:
         return Database.Cursor.executemany(self, query, param_list)
     except Database.IntegrityError as e:
         six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
     except Database.DatabaseError as e:
         six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
Exemple #4
0
 def body(self):
     if not hasattr(self, '_body'):
         if self._read_started:
             raise Exception("You cannot access body after reading from request's data stream")
         try:
             self._body = self.read()
         except IOError as e:
             six.reraise(UnreadablePostError, UnreadablePostError(*e.args), sys.exc_info()[2])
         self._stream = BytesIO(self._body)
     return self._body
Exemple #5
0
 def executemany(self, query, args):
     try:
         return self.cursor.executemany(query, args)
     except Database.IntegrityError as e:
         six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
     except Database.OperationalError as e:
         # Map some error codes to IntegrityError, since they seem to be
         # misclassified and Django would prefer the more logical place.
         if e[0] in self.codes_for_integrityerror:
             six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
         six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
     except Database.DatabaseError as e:
         six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
Exemple #6
0
 def executemany(self, query, params=None):
     # cx_Oracle doesn't support iterators, convert them to lists
     if params is not None and not isinstance(params, (list, tuple)):
         params = list(params)
     try:
         args = [(':arg%d' % i) for i in range(len(params[0]))]
     except (IndexError, TypeError):
         # No params given, nothing to do
         return None
     # cx_Oracle wants no trailing ';' for SQL statements.  For PL/SQL, it
     # it does want a trailing ';' but not a trailing '/'.  However, these
     # characters must be included in the original query in case the query
     # is being passed to SQL*Plus.
     if query.endswith(';') or query.endswith('/'):
         query = query[:-1]
     query = convert_unicode(query % tuple(args), self.charset)
     formatted = [self._format_params(i) for i in params]
     self._guess_input_sizes(formatted)
     try:
         return self.cursor.executemany(query,
                             [self._param_generator(p) for p in formatted])
     except Database.IntegrityError as e:
         six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
     except Database.DatabaseError as e:
         # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
         if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
             six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
         six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
Exemple #7
0
 def _commit(self):
     if self.connection is not None:
         try:
             return self.connection.commit()
         except Database.IntegrityError as e:
             # In case cx_Oracle implements (now or in a future version)
             # raising this specific exception
             six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
         except Database.DatabaseError as e:
             # cx_Oracle 5.0.4 raises a cx_Oracle.DatabaseError exception
             # with the following attributes and values:
             #  code = 2091
             #  message = 'ORA-02091: transaction rolled back
             #            'ORA-02291: integrity constraint (TEST_DJANGOTEST.SYS
             #               _C00102056) violated - parent key not found'
             # We convert that particular case to our IntegrityError exception
             x = e.args[0]
             if hasattr(x, 'code') and hasattr(x, 'message') \
                and x.code == 2091 and 'ORA-02291' in x.message:
                 six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
             six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
Exemple #8
0
 def execute(self, query, params=None):
     if params is None:
         params = []
     else:
         params = self._format_params(params)
     args = [(':arg%d' % i) for i in range(len(params))]
     # cx_Oracle wants no trailing ';' for SQL statements.  For PL/SQL, it
     # it does want a trailing ';' but not a trailing '/'.  However, these
     # characters must be included in the original query in case the query
     # is being passed to SQL*Plus.
     if query.endswith(';') or query.endswith('/'):
         query = query[:-1]
     query = convert_unicode(query % tuple(args), self.charset)
     self._guess_input_sizes([params])
     try:
         return self.cursor.execute(query, self._param_generator(params))
     except Database.IntegrityError as e:
         six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
     except Database.DatabaseError as e:
         # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
         if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
             six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
         six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
Exemple #9
0
 def _commit(self):
     if self.connection is not None:
         try:
             return self.connection.commit()
         except Database.IntegrityError as e:
             six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])