Example #1
0
class ViewManager():
    """ A sort of proxy that facilitate views modification and views queries. """
    def __init__(self):
        self.__view = None
        self.__columns = None 
        self.__groupers = None
        self.__sorters = None
        self.__filters = None
    '''
    Set the view with the link_name. If a view is found, return the view found 
    '''
    def set_view(self, link_name):
        self.__view = View.query.filter_by(link_name=link_name).first()
        if self.__view:
            self.__columns = ViewColumn.query.filter_by(parent_id=self.__view.id).order_by(ViewColumn.id).all()
            self.__groupers = ViewGrouper.query.filter_by(parent_id=self.__view.id).order_by(ViewGrouper.id).all()
            self.__sorters = ViewSorter.query.filter_by(parent_id=self.__view.id).order_by(ViewSorter.id).all()
            self.__filters = self.__view.filters 
            return self.__view 
        else:
            return None
    
    def set_view_dummy(self, datasource):
        self.__view = View()
        self.__view.datasource = datasource

    def add_columns(self, columns, delete_before = False):
        if delete_before:
            for column in self.__columns:
                    db_session.delete(column)

        for column in columns:
            db_session.add(column)
        
        db_session.commit()

    def add_groupers(self, groupers, delete_before = False):
        if delete_before:
            for grouper in self.__groupers:
                    db_session.delete(grouper)

        for grouper in groupers:
            if grouper.column:
                db_session.add(grouper)
        
        db_session.commit()

    def add_sorters(self, sorters, delete_before = False):
        if delete_before:
            for sorter in self.__sorters:
                    db_session.delete(sorter)

        for sorter in sorters:
            if sorter.column:
                db_session.add(sorter)

        db_session.commit()

    def add_view(self, view):
        db_session.add(view)
        db_session.commit()
        
    def add_filters(self, filters):
        self.__view.filters = filters
        db_session.commit()

    def set_filters(self, filters):
        self.__filters.set_filters(filters)
    
    def set_extra_sorters(self, sorters):
        for colname, order in sorters.items():
            sorter = ViewSorter()
            sorter.column = colname
            sorter.sorter_option = order
            [self.__sorters.remove(sorter_item) for sorter_item in self.__sorters if sorter_item.column == colname]
            self.__sorters.append(sorter)

    def update_filters(self, filters):
        self.__view.filters.update(filters)
        db_session.commit()

    def get_filters(self):
        return self.__filters

    def get_columns_choices(self):
        return get_columns_pairs(self.__view.datasource)

    def get_columns(self):
        return self.__columns

    def get_sorters(self):
        return self.__sorters

    def get_sorters_columns(self):
        lst_columns = []
        for sorter in self.__sorters:
            lst_columns.append(sorter.column)
        return lst_columns

    def get_groupers(self):
        return self.__groupers
    
    def get_filter_display(self, form):
        lst_columns = cache_columns 
        lst_info = []
        for option, fil_col_names in lst_columns.iteritems():
            filter_name = option.replace("_option","")
            col_names = filters[filter_name].column_names
            filter_datasources = []
            for col_name in col_names:
                if painters.has_key(col_name):
                    filter_datasources = filter_datasources + painters[col_name].datasources
                if self.__view.datasource in filter_datasources:
                    option_field = getattr(form, option)
                    fields = []
                    for col in fil_col_names: 
                        fields.append(getattr(form, col))
                    lst_info.append(FilterFieldsInfo(option_field, fields))
        return lst_info
    
    def get_view(self):
        return self.__view

    def update_view(self, view):
        self.__view.update_view(view)
        db_session.commit()
Example #2
0
class ViewManager():
    """ A sort of proxy that facilitate views modification and views queries. """
    def __init__(self):
        self.__view = None
        self.__columns = None
        self.__groupers = None
        self.__sorters = None
        self.__filters = None

    '''
    Set the view with the link_name. If a view is found, return the view found 
    '''

    def set_view(self, link_name):
        self.__view = View.query.filter_by(link_name=link_name).first()
        if self.__view:
            self.__columns = ViewColumn.query.filter_by(
                parent_id=self.__view.id).order_by(ViewColumn.id).all()
            self.__groupers = ViewGrouper.query.filter_by(
                parent_id=self.__view.id).order_by(ViewGrouper.id).all()
            self.__sorters = ViewSorter.query.filter_by(
                parent_id=self.__view.id).order_by(ViewSorter.id).all()
            self.__filters = self.__view.filters
            return self.__view
        else:
            return None

    def set_view_dummy(self, datasource):
        self.__view = View()
        self.__view.datasource = datasource

    def add_columns(self, columns, delete_before=False):
        if delete_before:
            for column in self.__columns:
                db_session.delete(column)

        for column in columns:
            db_session.add(column)

        db_session.commit()

    def add_groupers(self, groupers, delete_before=False):
        if delete_before:
            for grouper in self.__groupers:
                db_session.delete(grouper)

        for grouper in groupers:
            if grouper.column:
                db_session.add(grouper)

        db_session.commit()

    def add_sorters(self, sorters, delete_before=False):
        if delete_before:
            for sorter in self.__sorters:
                db_session.delete(sorter)

        for sorter in sorters:
            if sorter.column:
                db_session.add(sorter)

        db_session.commit()

    def add_view(self, view):
        db_session.add(view)
        db_session.commit()

    def add_filters(self, filters):
        self.__view.filters = filters
        db_session.commit()

    def set_filters(self, filters):
        self.__filters.set_filters(filters)

    def set_extra_sorters(self, sorters):
        for colname, order in sorters.items():
            sorter = ViewSorter()
            sorter.column = colname
            sorter.sorter_option = order
            [
                self.__sorters.remove(sorter_item)
                for sorter_item in self.__sorters
                if sorter_item.column == colname
            ]
            self.__sorters.append(sorter)

    def update_filters(self, filters):
        self.__view.filters.update(filters)
        db_session.commit()

    def get_filters(self):
        return self.__filters

    def get_hidden_filters(self):
        filters_tuples = []
        filters_obj = self.__filters
        for option, fil_col_names in cache_columns.iteritems():
            if getattr(filters_obj, option) == 'hide':
                filter_name = option.replace("_option", "")
                column_name = filters[filter_name].column_names
                filters_tuples.append((filter_name, column_name[0]))
        return filters_tuples

    def get_columns_choices(self):
        return get_columns_pairs(self.__view.datasource)

    def get_links_choices(self):
        views = View.query.all()
        links_choices = []
        links_choices.append(('', ''))
        for x in views:
            if x.link_title:
                if not self.__view or not self.__view.link_title == x.link_title:
                    links_choices.append((x.link_name, x.link_title))
            else:
                if not self.__view or not self.__view.link_name == x.link_name:
                    links_choices.append((x.link_name, x.title))

        return links_choices

    def get_columns(self):
        return self.__columns

    def get_sorters(self):
        return self.__sorters

    def get_sorters_columns(self):
        lst_columns = []
        for sorter in self.__sorters:
            lst_columns.append(sorter.column)
        return lst_columns

    def get_groupers(self):
        return self.__groupers

    def get_filter_display(self, form):
        lst_columns = cache_columns
        lst_info = []
        for option, fil_col_names in lst_columns.iteritems():
            filter_name = option.replace("_option", "")
            col_names = filters[filter_name].column_names
            filter_datasources = []
            for col_name in col_names:
                if painters.has_key(col_name):
                    filter_datasources = filter_datasources + painters[
                        col_name].datasources
                if self.__view.datasource in filter_datasources:
                    option_field = getattr(form, option)
                    fields = []
                    for col in fil_col_names:
                        fields.append(getattr(form, col))
                    lst_info.append(FilterFieldsInfo(option_field, fields))
        return lst_info

    def get_view(self):
        return self.__view

    def update_view(self, view):
        self.__view.update_view(view)
        db_session.commit()