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
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
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
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
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
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