You probably also want to call os.path.abspath after joining everything:

path = os.path.abspath(os.path.join(os.path.dirname(callingFile), path))



From: Nathan Rusch 
Sent: Friday, November 07, 2014 6:18 PM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] Using the Nuke resolution of relative filenames

I don't think it's doing anything special to resolve the relative filenames... 
I think it just keeps track of where the current init.py is being executed 
from, and resolves non-absolute paths relative to that.

You can do pretty much the same thing from within your customAdd function by 
pulling the calling file from the stack:

import inspect
import os

def customAdd(path):
    if not os.path.isabs(path):
        callingFile = inspect.getfile(inspect.currentframe(1))
        path = os.path.join(os.path.dirname(callingFile), path)
    # Do something with full path...


This obviously won't work for calls to customAdd from the script editor, but 
nuke.pluginAddPath doesn't resolve relative paths at that point either, so you 
wouldn't be skipping over any functionality.

Hope this helps.

-Nathan



From: Sebastian Kral 
Sent: Friday, November 07, 2014 5:48 PM
To: Nuke Python discussion 
Subject: [Nuke-python] Using the Nuke resolution of relative filenames

Hi all,


I am trying to re-purpose the code from pluginAddPath(). Copying the behavior 
especially the resolution of relative filenames.


The idea is to have a function which will be executed in a similar fashion 
inside init.py scripts. It would be very neat if I could run 
customAddPath('./custom') and Nuke would resolve the path for me. I don't want 
my custom path to be added to the pluginPath in the end. I would just add it 
and remove it again to use the resolution part.


My first approach was to add the path to the plugin path so Nuke resolves it 
but before I do that make a backup and after Nuke resolved the path revert 
pluginPath to the backed up list.

Unfortunately this doesn't work because _nuke.pluginPath() is not a list but a 
function.


e.g. pretty close to Nuke8.0v6/plugins/nuke/overrides.py - pluginAddPath()

    # Nuke does it's own resolution of relative filenames, so that they end up
    # relative to the right location. Rather than duplicating that logic here,
    # we just get the difference between the pluginPath before and after we've
    # added the new paths.
    backup_plugin_path = _nuke.pluginPath
    oldPluginPath = tuple(_nuke.pluginPath())

    for i in args:
        _nuke.pluginAddPath(i)

    newPaths = [p for p in _nuke.pluginPath() if p not in oldPluginPath]
    for path in newPaths:
        if path not in custom_paths:
            custom_paths.insert(0, path)

    _nuke.pluginPath = backup_plugin_path

Two questions come to mind:
1. Is there a way I can remove paths from the pluginPath()? This way I could 
use the resolution but remove what I added afterwards.
2. Can I just use the resolution of relative paths which is Nuke using 
internally?


Perhaps someone has a good idea.


Thanks,

Sebastian



--------------------------------------------------------------------------------
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python



--------------------------------------------------------------------------------
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to