Esempio n. 1
0
    def PreprocessFailures(self, failuresAccessor):
        severity = failuresAccessor.GetSeverity()
        # log some info
        mlogger.debug('processing failure with severity: %s', severity)

        if severity == coreutils.get_enum_none(DB.FailureSeverity):
            mlogger.debug('clean document. returning with'
                          'FailureProcessingResult.Continue')
            return DB.FailureProcessingResult.Continue

        # log the failure messages
        failures = failuresAccessor.GetFailureMessages()
        mlogger.debug('processing %s failure messages.', len(failures))
        for failure in failures:
            # log some info
            mlogger.debug(
                'processing failure msg: %s',
                getattr(failure.GetFailureDefinitionId(), 'Guid', ''))
            mlogger.debug('\tseverity: %s', failure.GetSeverity())
            mlogger.debug('\tdescription: %s', failure.GetDescriptionText())
            mlogger.debug(
                '\telements: %s',
                [x.IntegerValue for x in failure.GetFailingElementIds()])
            mlogger.debug('\thas resolutions: %s', failure.HasResolutions())

        # now go through failures and attempt resolution
        action_taken = False
        for failure in failures:
            mlogger.debug(
                'attempt resolving failure: %s',
                getattr(failure.GetFailureDefinitionId(), 'Guid', ''))
            # iterate through resolution options, pick one and resolve
            for res_type in RESOLUTION_TYPES:
                found_resolution = False
                if failure.GetSeverity() != DB.FailureSeverity.Warning \
                        and failure.HasResolutionOfType(res_type):
                    mlogger.debug('setting failure resolution to: %s',
                                  res_type)
                    failure.SetCurrentResolutionType(res_type)
                    action_taken = found_resolution = True
                    break

            if found_resolution:
                failuresAccessor.ResolveFailure(failure)

        # report back
        if action_taken:
            mlogger.debug('resolving failures with '
                          'FailureProcessingResult.ProceedWithCommit')
            return DB.FailureProcessingResult.ProceedWithCommit
        else:
            mlogger.debug('resolving failures with '
                          'FailureProcessingResult.Continue')
            return DB.FailureProcessingResult.Continue
Esempio n. 2
0
def create_revision(description=None, by=None, to=None, date=None,
                    alphanum=False, nonum=False, doc=None):
    new_rev = DB.Revision.Create(doc or HOST_APP.doc)
    new_rev.Description = description
    new_rev.IssuedBy = by or ''
    new_rev.IssuedTo = to or ''
    if alphanum:
        new_rev.NumberType = DB.RevisionNumberType.Alphanumeric
    if nonum:
        new_rev.NumberType = coreutils.get_enum_none(DB.RevisionNumberType)
    new_rev.RevisionDate = date or ''
    return new_rev
Esempio n. 3
0
def get_commit_points():
    commit_points = []
    # grab defined packages
    dockpkgs = []
    docpkg_finder = \
        re.compile(r'docpkg(\d+)\s*[-_]*?\s*(.+)', flags=re.IGNORECASE)
    for project_param in revit.query.get_project_parameters(doc=revit.doc):
        pkg_match = docpkg_finder.match(project_param.name)
        if pkg_match:
            pkg_idx, pkg_name = pkg_match.groups()
            dockpkgs.append(
                DocPkg(param_name=project_param.name,
                       pkg_idx=int(pkg_idx),
                       pkg_name=pkg_name))
        elif 'docpkg' in project_param.name.lower():
            mlogger.warning(
                'Package parameter "%s" is not formatted '
                'correctly and is skipped.', project_param.name)

    last_docpkg_idx = -1
    for idx, docpkg in enumerate(sorted(dockpkgs, key=lambda x: x.pkg_idx)):
        last_docpkg_idx = idx
        commit_points.append(
            CommitPoint(cptype=CommitPointTypes.Package,
                        target=docpkg.param_name,
                        idx=idx,
                        name=docpkg.pkg_name,
                        desc='Bound to "{}" Project Parameter'.format(
                            docpkg.param_name)))
    # grab revisions
    none_numtype = coreutils.get_enum_none(DB.RevisionNumberType)
    docrevs = sorted(revit.query.get_revisions(),
                     key=lambda x: x.SequenceNumber)
    commit_points.extend([
        CommitPoint(cptype=CommitPointTypes.Revision,
                    target=x.Id.IntegerValue,
                    idx=last_docpkg_idx + i + 1,
                    name='R{}'.format(x.SequenceNumber),
                    desc='{}{} (Sequence #{})'.format(
                        '{} - '.format(x.RevisionNumber)
                        if hasattr(x, 'RevisionNumber')
                        and x.NumberType != none_numtype else '',
                        x.Description, x.SequenceNumber))
        for i, x in enumerate(docrevs)
    ])

    sorted_cpoints = sorted(commit_points, key=lambda x: x.idx)
    mlogger.debug(sorted_cpoints)
    return sorted_cpoints
Esempio n. 4
0
    def _get_schedule_text_data(self, schedule_view):
        schedule_data_file = \
            script.get_instance_data_file(str(schedule_view.Id.IntegerValue))
        vseop = DB.ViewScheduleExportOptions()
        vseop.TextQualifier = coreutils.get_enum_none(DB.ExportTextQualifier)
        schedule_view.Export(op.dirname(schedule_data_file),
                             op.basename(schedule_data_file), vseop)

        sched_data = []
        try:
            with codecs.open(schedule_data_file, 'r', EXPORT_ENCODING) \
                    as sched_data_file:
                return [x.strip() for x in sched_data_file.readlines()]
        except Exception as open_err:
            logger.error('Error opening sheet index export: %s | %s',
                         schedule_data_file, open_err)
            return sched_data
Esempio n. 5
0
        iskeynotelegend = view.Definition.CategoryId == \
            revit.query.get_category(DB.BuiltInCategory.OST_KeynoteTags).Id

        return not (isrevsched or isintkeynote or iskeynotelegend)

    return False


if basefolder:
    logger.debug(basefolder)
    schedules_to_export = forms.select_views(title="Select Schedules",
                                             filterfunc=is_schedule)

    if schedules_to_export:
        vseop = DB.ViewScheduleExportOptions()
        vseop.ColumnHeaders = coreutils.get_enum_none(DB.ExportColumnHeaders)
        vseop.TextQualifier = DB.ExportTextQualifier.DoubleQuote

        # determine which separator to use
        csv_sp = ','
        regional_sep = user_config.get_list_separator()
        if regional_sep != ',':
            if forms.alert("Regional settings list separator is \"{}\"\n"
                           "Do you want to use this instead of comma?"
                           .format(regional_sep), yes=True, no=True):
                csv_sp = regional_sep

        if csv_sp:
            vseop.FieldDelimiter = csv_sp
            vseop.Title = False
            vseop.HeadersFootersBlanks = False
Esempio n. 6
0
    def PreprocessFailures(self, failuresAccessor):
        """Required IFailuresPreprocessor interface method"""
        severity = failuresAccessor.GetSeverity()
        # log some info
        mlogger.debug('processing failure with severity: %s', severity)

        if severity == coreutils.get_enum_none(DB.FailureSeverity):
            mlogger.debug('clean document. returning with'
                          'FailureProcessingResult.Continue')
            return DB.FailureProcessingResult.Continue

        # log the failure messages
        failures = failuresAccessor.GetFailureMessages()
        mlogger.debug('processing %s failure messages.', len(failures))

        # go through failures and attempt resolution
        action_taken = False
        for failure in failures:

            failure_id = failure.GetFailureDefinitionId()
            failure_guid = getattr(failure_id, 'Guid', '')
            failure_severity = failure.GetSeverity()
            failure_desc = failure.GetDescriptionText()
            failure_has_res = failure.HasResolutions()

            # log failure info
            mlogger.debug('processing failure msg: %s', failure_guid)
            mlogger.debug('\tseverity: %s', failure_severity)
            mlogger.debug('\tdescription: %s', failure_desc)
            mlogger.debug(
                '\telements: %s',
                [x.IntegerValue for x in failure.GetFailingElementIds()])
            mlogger.debug('\thas resolutions: %s', failure_has_res)

            # attempt resolution
            mlogger.debug('attempt resolving failure: %s', failure_guid)

            # if it's a warning and does not have any resolution
            # delete it! it might have a popup window
            if not failure_has_res \
                    and failure_severity == DB.FailureSeverity.Warning:
                failuresAccessor.DeleteWarning(failure)
                mlogger.debug(
                    'deleted warning with no acceptable resolution: %s',
                    failure_guid)
                continue

            # find failure definition id
            # at this point the failure_has_res is True
            failure_def_accessor = get_failure_by_id(failure_id)
            default_res = failure_def_accessor.GetDefaultResolutionType()

            # iterate through resolution options, pick one and resolve
            for res_type in RESOLUTION_TYPES:
                if default_res == res_type:
                    mlogger.debug('using default failure resolution: %s',
                                  res_type)
                    self._set_and_resolve(failuresAccessor, failure, res_type)
                    action_taken = True
                    break
                elif failure.HasResolutionOfType(res_type):
                    mlogger.debug('setting failure resolution to: %s',
                                  res_type)
                    self._set_and_resolve(failuresAccessor, failure, res_type)
                    # marked as action taken
                    action_taken = True
                    break
                else:
                    mlogger.debug('invalid failure resolution: %s', res_type)

        # report back
        if action_taken:
            mlogger.debug('resolving failures with '
                          'FailureProcessingResult.ProceedWithCommit')
            return DB.FailureProcessingResult.ProceedWithCommit
        else:
            mlogger.debug('resolving failures with '
                          'FailureProcessingResult.Continue')
            return DB.FailureProcessingResult.Continue