コード例 #1
0
    def readjsonstructure(self,
                          project_id,
                          visibility_filter=StaticFiltersFactory.FULL_VIEW,
                          first_level=None,
                          second_level=None,
                          filter_value=None):
        """
        AJAX exposed method. 
        Will return the complete JSON for Project's structure, or filtered tree
        (filter only Relevant entities or Burst only Data).
        """
        if first_level is None or second_level is None:
            first_level, second_level = self.get_project_structure_grouping()
        else:
            self.set_project_structure_grouping(first_level, second_level)

        selected_filter = StaticFiltersFactory.build_datatype_filters(
            single_filter=visibility_filter)
        if project_id == 'undefined':
            project_id = common.get_current_project().id
        project = self.project_service.find_project(project_id)
        json_structure = self.project_service.get_project_structure(
            project, selected_filter, first_level, second_level, filter_value)
        # This JSON encoding is necessary, otherwise we will get an error
        # from JSTree library while trying to load with AJAX
        # the content of the tree.
        encoder = JSONEncoder()
        return encoder.iterencode(json_structure)
コード例 #2
0
 def test_get_project_structure(self):
     """
     Tests project structure is as expected and contains all datatypes
     """
     dt_factory = datatypes_factory.DatatypesFactory()
     self._create_datatypes(dt_factory, 3)
     node_json = self.project_service.get_project_structure(
         dt_factory.project, None, 'Data_State', 'Data_Subject', None)
     encoder = JSONEncoder()
     encoder.iterencode(node_json)
     # No exceptions were raised so far.
     project_dts = dao.get_datatypes_for_project(dt_factory.project.id)
     for dt in project_dts:
         self.assertTrue(
             dt.gid in node_json,
             "Should have all datatypes present in resulting json.")
コード例 #3
0
ファイル: json.py プロジェクト: dominicgs/Website
    def iterencode(self, obj):
        def _iterconvert(obj):
            # namedtuple/sqlalchemy result
            if isinstance(obj, tuple) and hasattr(obj, '_asdict'):
                # this doesn't include any columns without label()s
                dct = obj._asdict()
                # sqlalchemy result's asdict has broken ordering
                if not isinstance(dct, OrderedDict):
                    dct = OrderedDict((k, dct[k]) for k in obj._fields)
                obj = dct

            if isinstance(obj, db.Model.query_class):
                return [_iterconvert(o) for o in obj]
            elif isinstance(obj, db.Model):
                return to_dict(obj)
            elif isinstance(obj, (list, tuple)):
                return [_iterconvert(o) for o in obj]
            elif isinstance(obj, dict):
                items = obj.items()
                if not isinstance(obj, OrderedDict):
                    # same as sort_keys=True
                    items = sorted(items, key=lambda kv: kv[0])
                return OrderedDict([(k, _iterconvert(v)) for k, v in items])

            return obj

        return JSONEncoder.iterencode(self, _iterconvert(obj))
コード例 #4
0
ファイル: json.py プロジェクト: roseregina/Website
    def iterencode(self, obj):
        def _iterconvert(obj):
            # namedtuple/sqlalchemy result
            if isinstance(obj, tuple) and hasattr(obj, '_asdict'):
                # this doesn't include any columns without label()s
                dct = obj._asdict()
                # sqlalchemy result's asdict has broken ordering
                if not isinstance(dct, OrderedDict):
                    dct = OrderedDict((k, dct[k]) for k in obj._fields)
                obj = dct

            if isinstance(obj, db.Model.query_class):
                return [_iterconvert(o) for o in obj]
            elif isinstance(obj, db.Model):
                return to_dict(obj)
            elif isinstance(obj, (list, tuple)):
                return [_iterconvert(o) for o in obj]
            elif isinstance(obj, dict):
                items = obj.items()
                if not isinstance(obj, OrderedDict):
                    # same as sort_keys=True
                    items = sorted(items, key=lambda kv: kv[0])
                return OrderedDict([(k, _iterconvert(v)) for k, v in items])

            return obj

        return JSONEncoder.iterencode(self, _iterconvert(obj))
コード例 #5
0
    def readjsonstructure(self, project_id, visibility_filter=StaticFiltersFactory.FULL_VIEW,
                          first_level=None, second_level=None, filter_value=None):
        """
        AJAX exposed method. 
        Will return the complete JSON for Project's structure, or filtered tree
        (filter only Relevant entities or Burst only Data).
        """
        if first_level is None or second_level is None:
            first_level, second_level = self.get_project_structure_grouping()
        else:
            self.set_project_structure_grouping(first_level, second_level)

        selected_filter = StaticFiltersFactory.build_datatype_filters(single_filter=visibility_filter)

        project = self.project_service.find_project(project_id)
        json_structure = self.project_service.get_project_structure(project, selected_filter,
                                                                    first_level, second_level, filter_value)
        # This JSON encoding is necessary, otherwise we will get an error
        # from JSTree library while trying to load with AJAX 
        # the content of the tree.     
        encoder = JSONEncoder()
        return encoder.iterencode(json_structure)