Пример #1
0
    def __init__(self, label='vector_file', **kwargs):

        # save the df for column naming (not using a gdf as geometry are useless)
        self.df = None

        # set the 3 wigets
        self.w_file = FileInput(['.shp', '.geojson', '.gpkg', '.kml'],
                                label=label)
        self.w_column = v.Select(_metadata={'name': 'column'},
                                 items=self.column_base_items,
                                 label='Column',
                                 v_model='ALL')
        self.w_value = v.Select(_metadata={'name': 'value'},
                                items=[],
                                label='Value',
                                v_model=None)
        su.hide_component(self.w_value)

        # create the Col Field
        self.children = [self.w_file, self.w_column, self.w_value]
        self.v_model = self.default_v_model

        super().__init__(**kwargs)

        # events
        self.w_file.observe(self._update_file, 'v_model')
        self.w_column.observe(self._update_column, 'v_model')
        self.w_value.observe(self._update_value, 'v_model')
Пример #2
0
    def test_hide_component(self):

        # hide a normal v component
        widget = v.Btn()
        su.hide_component(widget)
        self.assertIn('d-none', widget.class_)

        # hide a sepalwidget
        widget = sw.Btn()
        su.hide_component(widget)
        self.assertFalse(widget.viz)

        return
Пример #3
0
    def test_show_component(self):

        # show a normal v component
        widget = v.Btn()
        su.hide_component(widget)
        su.show_component(widget)
        self.assertNotIn('d-none', widget.class_)

        # show a sepalwidget
        widget = sw.Btn()
        su.hide_component(widget)
        su.show_component(widget)
        self.assertTrue(widget.viz)

        return
Пример #4
0
    def toggle_inputs(self, fields_2_show, fields):
        """
        Display only the widgets that are part of the input_list. the widget_list is the list of all the widgets of the tile.
    
        Args:
            fields_2_show ([v.widget]) : the list of input to be display
            fields ([v.widget]) : the list of the tile widget
            
        Return:
            self
        """

        for field in fields:
            if field in fields_2_show:
                su.show_component(field)
            else:
                su.hide_component(field)

        return self
Пример #5
0
    def _update_column(self, change):
        """Update the column name and empty the value list"""

        # reset value widget
        self.w_value.items = []
        self.w_value.v_model = None

        # set the value
        self.v_model['column'] = change['new']

        # hide value if "ALL" or none
        if change['new'] in ['ALL', None]:
            su.hide_component(self.w_value)
            return self

        # read the colmun
        self.w_value.items = sorted(set(self.df[change['new']].to_list()))
        su.show_component(self.w_value)

        return self
Пример #6
0
 def _on_driver_change(self, change):
     """adapt the inputs to the requested sources"""
     
     # empty the datas 
     self.reset_inputs()
     
     if change['new'] == 'planet':
         # remove source
         su.hide_component(self.sources)
         
         # display password
         self.planet_key.show()
         
         # display semesters 
         su.show_component(self.semester)
         self.semester.v_model = 'S1'
         
         # change bands options and select the default rgb
         self.bands.items = [*cp.planet_bands_combo]
         self.bands.v_model = [*cp.planet_bands_combo][0]
         
         # adapt dates to available data and default to all available
         self.start.items = [
             y for y 
             in range(cp.planet_min_start_year, cp.planet_max_end_year+1)
         ]
         self.start.v_model = cp.planet_min_start_year
         self.end.items = [
             y for y 
             in range(cp.planet_min_start_year, cp.planet_max_end_year+1)
         ]
         self.end.v_model = cp.planet_max_end_year
         
     elif change['new'] == 'gee':
         # remove password 
         self.planet_key.hide()
         
         # remove semester 
         su.hide_component(self.semester)
         
         # add source and default to landsat
         su.show_component(self.sources)
         self.sources.v_model = [cp.sources[0]]
         
         # change band options
         self.bands.items = [*cp.getAvailableBands()]
         self.bands.v_model = [*cp.getAvailableBands()][0]
         
         # adapt dates to available data
         self.start.items = [
             y for y 
             in range(cp.gee_min_start_year, cp.gee_max_end_year+1)
         ]
         self.start.v_model = 2005
         self.end.items = [
             y for y 
             in range(cp.gee_min_start_year, cp.gee_max_end_year+1)
         ]
         self.end.v_model = 2018
         
     return
Пример #7
0
 def __init__(self, viz_model, tb_model):
     
     # gather model
     self.viz_model = viz_model
     self.tb_model = tb_model
     
     # Create alert
     
     self.alert = sw.Alert()
     
     # create the widgets
     self.driver = v.RadioGroup(
         label = cm.viz.driver,
         row= True,
         v_model = self.viz_model.driver,
         children = [
             v.Radio(key=i, label=n, value=n) for i, n 
             in enumerate(cp.drivers)
         ]
     )
     
     self.sources = v.Select(
         items=cp.sources, 
         label=cm.viz.sources, 
         v_model=self.viz_model.sources, 
         multiple=True,
         chips=True
     )
     
     self.planet_key = sw.PasswordField(
         label = cm.planet.key_label
     ).hide()
     
     self.semester = v.RadioGroup(
         label = cm.viz.semester,
         row= True,
         v_model = None,
         children = [
             v.Radio(label=cp.planet_semesters[n], value=n) for n
             in [*cp.planet_date_ranges[cp.planet_min_start_year]]
         ]
     )
     
     su.hide_component(self.semester)
     
     self.bands = v.Select(
         items=[*cp.getAvailableBands()], 
         label=cm.viz.bands, 
         v_model=self.viz_model.bands
     )
     self.start = v.Select(
         class_='mr-5 ml-5', 
         items=[
             y for y 
             in range(cp.gee_min_start_year, cp.gee_max_end_year+1)
         ], 
         label=cm.viz.start_year, 
         v_model=self.viz_model.start_year
     )
     self.end = v.Select(
         class_='ml-5 mr-5',
         items=[y for y 
                in range(cp.gee_min_start_year, cp.gee_max_end_year+1)
         ], 
         label=cm.viz.end_year, 
         v_model=self.viz_model.end_year
     )
     years = v.Layout(
         xs=12, 
         row=True,  
         children=[self.start, self.end]
     )
     
     image_size = v.Slider(
         step=500, 
         min=cp.min_image, 
         max=cp.max_image, 
         label=cm.viz.image_size, 
         v_model=self.viz_model.image_size, 
         thumb_label='always', 
         class_='mt-5'
     )
     
     square_size = v.Slider(
         step=10, 
         min=cp.min_square, 
         max=cp.max_square, 
         label=cm.viz.square_size, 
         v_model=self.viz_model.square_size, 
         thumb_label='always', 
         class_='mt-5'
     )
     
     
     # bind the inputs
     self.viz_model.bind(self.sources, 'sources') \
             .bind(self.planet_key, 'planet_key') \
             .bind(self.bands, 'bands') \
             .bind(self.start, 'start_year') \
             .bind(self.end, 'end_year') \
             .bind(self.driver, 'driver') \
             .bind(image_size, 'image_size') \
             .bind(square_size, 'square_size') \
             .bind(self.semester, 'semester')
     
     # create the tile 
     super().__init__(
         id_ = "viz_widget",
         title = cm.viz.title,
         btn = sw.Btn(cm.viz.btn),
         inputs = [
             self.driver, self.sources, 
             self.planet_key, self.bands, 
             years, self.semester, 
             image_size, square_size
         ],
         alert = self.alert
     )
     
     # js behaviour 
     self.btn.on_event('click', self._display_data) 
     self.driver.observe(self._on_driver_change, 'v_model')