Watching custom folders

It seems that the issue was not importing directly the function, but rather importing the module.
What I’m currently doing is the following:

import inspect                                                                                                                                                                                                     
import os 
import streamlit as st                                                                                                                                                                                             
from streamlit import session_state as st_session                                                                                                                                                                  
from mypackage.module import foo, bar                                                                                                                                                                                
                                                                                                                                                                                                                 
def monitor_func(*args):                                                                                                                                                                                          
    if 'monitor' not in st_session:                                                                                                                                                                                
        st_session['monitor'] = set()                                                                                                                                                                              
    for func in args:                                                                                                                                                                                              
        path = inspect.getsourcefile(func)                                                                                                                                                                         
        st_session['monitor'].add(os.path.dirname(path))                                                                                                                                                           
    os.environ['PYTHONPATH'] = ':'.join(list(st_session['monitor']))                                                                                                                                               

monitor_func(foo, bar)                                                                                                                                                                                             
foo()                                                                                                                                                                                                              
bar()

Then changes in foo and bar are detected in the main app.

But if I do:

import inspect                                                                                                                                                                                                     
import os 
import streamlit as st                                                                                                                                                                                             
from streamlit import session_state as st_session                                                                                                                                                                  
from mypackage import module                                                                                                                                                                                
                                                                                                                                                                                                                 
def monitor_func(*args):                                                                                                                                                                                          
    if 'monitor' not in st_session:                                                                                                                                                                                
        st_session['monitor'] = set()                                                                                                                                                                              
    for func in args:                                                                                                                                                                                              
        path = inspect.getsourcefile(func)                                                                                                                                                                         
        st_session['monitor'].add(os.path.dirname(path))                                                                                                                                                           
    os.environ['PYTHONPATH'] = ':'.join(list(st_session['monitor']))                                                                                                                                               

monitor_func(module.foo, module.bar)                                                                                                                                                                                             
module.foo()                                                                                                                                                                                                              
module.bar()

Then changes are not detected

1 Like