Using pipeline

I am trying to use the pipeline to:

  1. Stage 1: Select a user from a dropdown menu users_sel.
  2. Stage 2: Use the user selected to glob.glob(f'/users/{user}') and update the objects available in in files_sel
  3. Stage 3: Download selected file.

Can’t seem to get from Stage 1 to Stage 2 though. Any ideas appreciated!

import glob

class Stage1(param.Parameterized):

    users_sel = param.ObjectSelector(
        default='abc', objects=['abc', 'def', 'ghi'])

    @param.output(param.String)
    def user(self):
        return self.users_sel

    @param.depends('users_sel')
    def view(self):
        return pn.widgets.TextInput(value=self.users_sel)

    def panel(self):
        return pn.Row(self.param, self.view)
    
class Stage2(param.Parameterized):

    user = param.String()

    files_sel = param.ObjectSelector()

    @param.output(param.List)
    def file(self):
        return self.users

    @param.depends('user')
    def view(self):
        self.files_sel.objects = glob.glob('/users/{user}/*')
        return pn.widgets.TextInput(value=", ".join(self.files_sel))

    def panel(self):
        return pn.Row(self.param, self.view)

pipeline = pn.pipeline.Pipeline(
    stages=[('User Input', Stage1), ('Files Input', Stage2)],
    debug=True
)
pipeline

Nevermind figured it out:

import glob

class Stage1(param.Parameterized):

    users_sel = param.ObjectSelector(
        default=['abc'], objects=['abc', 'def', 'ghi'])

    @param.output(param.String)
    def user(self):
        return self.users_sel

    @param.depends('users_sel')
    def view(self):
        return pn.widgets.TextInput(value=self.users_sel)

    def panel(self):
        return pn.Row(self.param, self.view)
    
class Stage2(param.Parameterized):

    user = param.String()

    files_sel = param.ObjectSelector()

    @param.output(param.List)
    def file(self):
        return self.users

    @param.depends('user')
    def view(self):
        self.param.files_sel.objects = glob.glob(f'/users/{self.user}/*')
        return pn.widgets.TextInput(value=self.files_sel)

    def panel(self):
        return pn.Row(self.param, self.view)

pipeline = pn.pipeline.Pipeline(
    stages=[('User Input', Stage1), ('Files Input', Stage2)],
    debug=True
)
pipeline