~openerp-dev/openobject-server/trunk-gunicorn-signaling-vmt

« back to all changes in this revision

Viewing changes to openerp/tools/convert.py

  • Committer: Vo Minh Thu
  • Date: 2012-03-07 11:10:30 UTC
  • mfrom: (4001.1.83 server)
  • Revision ID: vmt@openerp.com-20120307111030-8hzhzm0zoo34nuj7
[MERGE] merged trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
import time
31
31
import openerp.release as release
32
32
 
 
33
import assertion_report
 
34
 
33
35
_logger = logging.getLogger(__name__)
34
36
 
35
37
try:
200
202
def escape(x):
201
203
    return x.replace('\\/', '/')
202
204
 
203
 
class assertion_report(object):
204
 
    def __init__(self):
205
 
        self._report = {}
206
 
 
207
 
    def record_assertion(self, success, severity):
208
 
        """
209
 
            Records the result of an assertion for the failed/success count
210
 
            returns success
211
 
        """
212
 
        if severity in self._report:
213
 
            self._report[severity][success] += 1
214
 
        else:
215
 
            self._report[severity] = {success:1, not success: 0}
216
 
        return success
217
 
 
218
 
    def get_report(self):
219
 
        return self._report
220
 
 
221
 
    def __str__(self):
222
 
        res = '\nAssertions report:\nLevel\tsuccess\tfailed\n'
223
 
        success = failed = 0
224
 
        for sev in self._report:
225
 
            res += sev + '\t' + str(self._report[sev][True]) + '\t' + str(self._report[sev][False]) + '\n'
226
 
            success += self._report[sev][True]
227
 
            failed += self._report[sev][False]
228
 
        res += 'total\t' + str(success) + '\t' + str(failed) + '\n'
229
 
        res += 'end of report (' + str(success + failed) + ' assertion(s) checked)'
230
 
        return res
231
 
 
232
205
class xml_import(object):
233
206
    @staticmethod
234
207
    def nodeattr2bool(node, attr, default=False):
358
331
            # Special check for report having attribute menu=False on update
359
332
            value = 'ir.actions.report.xml,'+str(id)
360
333
            self._remove_ir_values(cr, res['name'], value, res['model'])
361
 
        return False
 
334
        return id
362
335
 
363
336
    def _tag_function(self, cr, rec, data_node=None):
364
337
        if self.isnoupdate(data_node) and self.mode != 'init':
712
685
        rec_src = rec.get("search",'').encode('utf8')
713
686
        rec_src_count = rec.get("count")
714
687
 
715
 
        severity = rec.get("severity",'').encode('ascii') or loglevels.LOG_ERROR
716
688
        rec_string = rec.get("string",'').encode('utf8') or 'unknown'
717
689
 
718
690
        ids = None
727
699
            if rec_src_count:
728
700
                count = int(rec_src_count)
729
701
                if len(ids) != count:
730
 
                    self.assert_report.record_assertion(False, severity)
 
702
                    self.assertion_report.record_failure()
731
703
                    msg = 'assertion "%s" failed!\n'    \
732
704
                          ' Incorrect search count:\n'  \
733
705
                          ' expected count: %d\n'       \
734
706
                          ' obtained count: %d\n'       \
735
707
                          % (rec_string, count, len(ids))
736
 
                    sevval = getattr(logging, severity.upper())
737
 
                    _logger.log(sevval, msg)
738
 
                    if sevval >= config['assert_exit_level']:
739
 
                        # TODO: define a dedicated exception
740
 
                        raise Exception('Severe assertion failure')
 
708
                    _logger.error(msg)
741
709
                    return
742
710
 
743
711
        assert ids is not None,\
759
727
                expected_value = _eval_xml(self, test, self.pool, cr, uid, self.idref, context=context) or True
760
728
                expression_value = unsafe_eval(f_expr, globals_dict)
761
729
                if expression_value != expected_value: # assertion failed
762
 
                    self.assert_report.record_assertion(False, severity)
 
730
                    self.assertion_report.record_failure()
763
731
                    msg = 'assertion "%s" failed!\n'    \
764
732
                          ' xmltag: %s\n'               \
765
733
                          ' expected value: %r\n'       \
766
734
                          ' obtained value: %r\n'       \
767
735
                          % (rec_string, etree.tostring(test), expected_value, expression_value)
768
 
                    sevval = getattr(logging, severity.upper())
769
 
                    _logger.log(sevval, msg)
770
 
                    if sevval >= config['assert_exit_level']:
771
 
                        # TODO: define a dedicated exception
772
 
                        raise Exception('Severe assertion failure')
 
736
                    _logger.error(msg)
773
737
                    return
774
738
        else: # all tests were successful for this assertion tag (no break)
775
 
            self.assert_report.record_assertion(True, severity)
 
739
            self.assertion_report.record_success()
776
740
 
777
741
    def _tag_record(self, cr, rec, data_node=None):
778
742
        rec_model = rec.get("model").encode('ascii')
906
870
        self.pool = pooler.get_pool(cr.dbname)
907
871
        self.uid = 1
908
872
        if report is None:
909
 
            report = assertion_report()
910
 
        self.assert_report = report
 
873
            report = assertion_report.assertion_report()
 
874
        self.assertion_report = report
911
875
        self.noupdate = noupdate
912
876
        self._tags = {
913
877
            'menuitem': self._tag_menuitem,