Hooks changed or whole approach?

Hey guys,

Today I noticed my startup script (hook when doc is opened) isn’t working anymore. Perhaps things have changed and I never noticed until now …

I even tried moving things from py2.7 to py3 … but nothing is triggered.

(folder structure: myextension.extension / hooks / doc-opened.py)

import os
import re
from pyrevit.forms import alert
from pyrevit import revit, DB, HOST_APP, script
from pyrevit import EXEC_PARAMS

def clean_filename(file_path):
    filename = os.path.basename(file_path)
    filename_no_ext = os.path.splitext(filename)[0]
    cleaned_name = re.sub(r"_(?!r\d+$)[^_]+$", "", filename_no_ext)
    return cleaned_name + ".rvt"

def starts_with_four_digits(s):
    return re.match(r'^\d{4}', s) is not None

def checkfilename(doc):
    if not HOST_APP.is_newer_than(2021):
        script.exit()
    if doc.IsFamilyDocument:
        script.exit()
    try:
        ProjectInformations = list(DB.FilteredElementCollector(revit.doc).OfCategory(DB.BuiltInCategory.OST_ProjectInformation))
        current_pi = ProjectInformations[-1]

        s_blad_bestandsnaam = current_pi.LookupParameter("s_blad_bestandsnaam")
        print(s_blad_bestandsnaam)  # Fixed
        if not s_blad_bestandsnaam:
            script.exit()

        bestandsnaam_huidig = s_blad_bestandsnaam.AsString()
        bestandsnaam = clean_filename(revit.doc.PathName)
        print(bestandsnaam)  # Fixed

        if not starts_with_four_digits(bestandsnaam):
            script.exit()

        param_mapping = {
            "s_project_nummer": "Project Number",
            "s_project_naam": "Project Name",
            "s_project_locatie": "Project Address",
            "s_opdrachtgever_naam": "Client Name"
        }

        with revit.Transaction("s_blad_bestandsnaam aanpassen"):
            for source_name, target_name in param_mapping.items():  # Fixed
                source_param = current_pi.LookupParameter(source_name)
                target_param = current_pi.LookupParameter(target_name)
                try:
                    s_blad_bestandsnaam.Set(bestandsnaam)
                    if source_param and target_param:
                        if source_param.StorageType == DB.StorageType.String:
                            target_param.Set(source_param.AsString())
                        elif source_param.StorageType == DB.StorageType.Integer:
                            target_param.Set(source_param.AsInteger())
                        elif source_param.StorageType == DB.StorageType.Double:
                            target_param.Set(source_param.AsDouble())
                        elif source_param.StorageType == DB.StorageType.ElementId:
                            target_param.Set(source_param.AsElementId())
                    else:
                        print('error')  # Fixed
                except Exception as e:
                    print(e)  # Fixed

        if bestandsnaam_huidig != bestandsnaam:
            alert("Projectparameter \"bestandsnaam\" aangepast van \"{}\" naar \"{}\".".format(bestandsnaam_huidig, bestandsnaam))

    except Exception as e:
        print("Error: {}".format(e))  # Fixed
        script.exit()

if __name__ == "__main__":
    doc = EXEC_PARAMS.event_args.Document
    print(doc)  # Fixed
    if not isinstance(doc, DB.Document):
        script.exit()
    checkfilename(doc)

Should be fixed via here.
Can you try a version > 6.1.0.26052+1326 or the latest wip ?

ughhh. I installed 6.3.0. that was a mistake. :smiley: see below. I think a .net version is missing.

The wip build you mentioned: that worked!


ERROR [pyrevit.loader.sessionmgr] Error building/loading extension 'pyRevitCore': System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Het systeem kan het opgegeven bestand niet vinden. 
File name: 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildWithRoslyn(ParsedExtension extension, String outputPath, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildExtensionAssembly(ParsedExtension extension, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.SessionManager.SessionManagerService.LoadSession()


ERROR [pyrevit.loader.sessionmgr] Error building/loading extension 'pyRevitDevTools': System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Het systeem kan het opgegeven bestand niet vinden. 
File name: 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildWithRoslyn(ParsedExtension extension, String outputPath, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildExtensionAssembly(ParsedExtension extension, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.SessionManager.SessionManagerService.LoadSession()


ERROR [pyrevit.loader.sessionmgr] Error building/loading extension 'pyRevitTemplates': System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Het systeem kan het opgegeven bestand niet vinden. 
File name: 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildWithRoslyn(ParsedExtension extension, String outputPath, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildExtensionAssembly(ParsedExtension extension, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.SessionManager.SessionManagerService.LoadSession()


ERROR [pyrevit.loader.sessionmgr] Error building/loading extension 'pyRevitTools': System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Het systeem kan het opgegeven bestand niet vinden. 
File name: 'System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildWithRoslyn(ParsedExtension extension, String outputPath, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.AssemblyMaker.AssemblyBuilderService.BuildExtensionAssembly(ParsedExtension extension, IEnumerable`1 libraryExtensions, Boolean rocketMode) 
 at pyRevitAssemblyBuilder.SessionManager.SessionManagerService.LoadSession()


WARNING [pyrevit.loader.sessionmgr] No pyRevit assemblies found

@jvandermeulen @pyrevti we have users reporting the same pyRevit loading error on 6.3. What WIP release fixed it for you? Do you have a link?

This is the latest with ADC 2027 Support, Revit 2027 Ready wip will be available shortly.

perf: optimize C# loader to match legacy load times (#3268) · pyrevitlabs/pyRevit@cee72aa