Exemplo n.º 1
0
class ActionGroup():
    def __init__(self, name=None, assimilate=True):
        self._rvt_transaction_group = TransactionGroup(
            self.doc, name if name else DEFAULT_TRANSACTION_NAME)
        self.assimilate = assimilate

    def __enter__(self):
        self._rvt_transaction_group.Start()
        return self

    def __exit__(self, exception, exception_value, traceback):
        if exception:
            self._rvt_transaction_group.RollBack()
            logger.error('Error in TransactionGroup Context: has rolled back.')
            logger.error('{}:{}'.format(exception, exception_value))
        else:
            try:
                if self.assimilate:
                    self._rvt_transaction_group.Assimilate()
                else:
                    self._rvt_transaction_group.Commit()
            except Exception as errmsg:
                self._rvt_transaction_group.RollBack()
                logger.error(
                    'Error in TransactionGroup Commit: has rolled back.')
                logger.error('Error: {}'.format(errmsg))

    @property
    def name(self):
        return self._rvt_transaction_group.GetName()

    @name.setter
    def name(self, new_name):
        return self._rvt_transaction_group.SetName(new_name)

    @property
    def status(self):
        return ActionStatus.from_rvt_trans_stat(
            self._rvt_transaction_group.GetStatus())

    def has_started(self):
        return self._rvt_transaction_group.HasStarted()

    def has_ended(self):
        return self._rvt_transaction_group.HasEnded()
    for el in els:
        symbol = doc.GetElement(el.GetTypeId())
        if not symbol.LookupParameter('Сортамент'):
            continue
        param = symbol.LookupParameter('Сортамент').AsString()
        settings = json.loads(param or '{}')
        if not settings:
            continue
        # if el.LookupParameter('Диаметр (Размер по каталогу)'):
        #     size = str(round(float(el.LookupParameter('Диаметр (Размер по каталогу)').AsDouble() * k), 1))
        if el.LookupParameter('Размер'):
            size = el.LookupParameter('Размер').AsString().split()[0].split('-')[0]
        # print(size)
        # print(settings)
        el.LookupParameter('ADSK_Наименование').Set(settings['ADSK_Наименование'][size])
        el.LookupParameter('ADSK_Марка').Set(settings['ADSK_Марка'][size])
        el.LookupParameter('ADSK_Код изделия').Set(settings['ADSK_Код изделия'][size])
        if el.LookupParameter('Длина'):
            length = el.LookupParameter('Длина').AsDouble() * k * float(settings['Множитель длины'])
            el.LookupParameter('ХТ Длина ОВ').Set(length)
        # if el.LookupParameter('Кабельная трасса'):  # смотри "Test: Кабельная трасса в Комментарии"
        #     res = el.LookupParameter('Кабельная трасса').AsString()
        #     res = ', '.join(res.split('\n'))
        #     el.LookupParameter('Комментарии').Set(res)

    set_progress(pb, 100)

    t.Commit()
    tg.SetName('{} ({}, {:.1f} с)'.format(tg.GetName(), time.strftime('%H:%M', time.localtime()), time.time() - startTime))
    tg.Assimilate()