Пример #1
0
    def __call__(self, version=None, include_items=True):
        result = super(SerializeCollectionToJson,
                       self).__call__(version=version)

        include_items = self.request.form.get("include_items", include_items)
        include_items = boolean_value(include_items)
        if include_items:
            results = self.context.results(batch=False)
            batch = HypermediaBatch(self.request, results)

            if not self.request.form.get("fullobjects"):
                result["@id"] = batch.canonical_url
            result["items_total"] = batch.items_total
            if batch.links:
                result["batching"] = batch.links

            if "fullobjects" in list(self.request.form):
                result["items"] = [
                    getMultiAdapter((brain.getObject(), self.request),
                                    ISerializeToJson)() for brain in batch
                ]
            else:
                result["items"] = [
                    getMultiAdapter((brain, self.request),
                                    ISerializeToJsonSummary)()
                    for brain in batch
                ]

        return result
Пример #2
0
def get_param(value, default=False, extra_include_name=None, serializer=None):
    """If current serialized element is an extra_include,
       infos in request.form are relative to extra_include,
       else information are directly available.
       For extra_include, a parameter is passed like :
       ?extra_include=extra_include_name:parameter_name:value so
       ?extra_include_category_include_all=false."""
    request = getRequest()
    # extra_include_name is stored on serializer or passed as parameter when serializer
    # still not initialized, this is the case for parameter "fullobjects" as from this
    # will depend the interface to use to get the serializer
    extra_include_name = serializer and \
        getattr(serializer, "_extra_include_name", extra_include_name)
    if extra_include_name:
        # change param value
        value = "extra_include_{0}_{1}".format(extra_include_name, value)

    param = request.form.get(value, None)

    # param was not found in request.form
    if param is None:
        param = default
    elif default in (True, False):
        param = boolean_value(param)
    return param
Пример #3
0
    def __call__(self, version=None, include_items=True):
        folder_metadata = super(SerializeFolderToJson,
                                self).__call__(version=version)

        folder_metadata.update({'is_folderish': True})
        result = folder_metadata

        include_items = self.request.form.get('include_items', include_items)
        include_items = boolean_value(include_items)
        if include_items:
            query = self._build_query()

            catalog = getToolByName(self.context, 'portal_catalog')
            brains = catalog(query)

            batch = HypermediaBatch(self.request, brains)

            if not self.request.form.get('fullobjects'):
                result['@id'] = batch.canonical_url
            result['items_total'] = batch.items_total
            if batch.links:
                result['batching'] = batch.links

            result['items'] = [
                getMultiAdapter((brain, self.request),
                                ISerializeToJsonSummary)() for brain in batch
            ]
        return result
Пример #4
0
    def reply(self):
        obj = _get_obj_from_uid(self.uid)
        self.context = obj
        self._check_obj()
        # set include_items=False by default in request
        if not self.request.form.get("include_items", None):
            self.request.form["include_items"] = False

        # boolean_value of "" is True
        fullobjects = boolean_value(self.request.form.get(
            "fullobjects", False))
        if fullobjects:
            serializer = queryMultiAdapter((self.context, self.request),
                                           ISerializeToJson)
        else:
            serializer = queryMultiAdapter((self.context, self.request),
                                           ISerializeToJsonSummary)

        if serializer is None:
            self.request.response.setStatus(501)
            return dict(error=dict(message="No serializer available."))

        if fullobjects:
            return serializer(version=self.request.get("version"))
        else:
            return serializer()
Пример #5
0
    def __call__(self, version=None, include_items=True):
        folder_metadata = super(SerializeFolderToJson, self).__call__(version=version)

        folder_metadata.update({"is_folderish": True})
        result = folder_metadata

        include_items = self.request.form.get("include_items", include_items)
        include_items = boolean_value(include_items)
        if include_items:
            query = self._build_query()

            catalog = getToolByName(self.context, "portal_catalog")
            brains = catalog(query)

            batch = HypermediaBatch(self.request, brains)

            if not self.request.form.get("fullobjects"):
                result["@id"] = batch.canonical_url
            result["items_total"] = batch.items_total
            if batch.links:
                result["batching"] = batch.links

            if "fullobjects" in list(self.request.form):
                result["items"] = getMultiAdapter(
                    (brains, self.request), ISerializeToJson
                )(fullobjects=True)["items"]
            else:
                result["items"] = [
                    getMultiAdapter((brain, self.request), ISerializeToJsonSummary)()
                    for brain in batch
                ]
        return result
Пример #6
0
 def _set_query_meetings_accepting_items(self):
     """ """
     query = {}
     form = self.request.form
     if self.type == "meeting" and boolean_value(
             form.get("meetings_accepting_items", False)):
         query.update(self.cfg._getMeetingsAcceptingItemsQuery())
     return query
Пример #7
0
 def values(self):
     if not self._values:
         self._values = {
             k.lower(): boolean_value(os.getenv(k, default)) if isinstance(
                 default, bool) else os.getenv(k, default)
             for k, default in self._env_keys.items()
         }
     return self._values
Пример #8
0
def serialize_extra_include_annexes(result, serializer):
    """ """
    # compute filters to get annexes
    filters = {}
    for filter_value in ANNEXES_FILTER_VALUES:
        value = serializer._get_param(filter_value,
                                      default=None,
                                      extra_include_name="annexes")
        if value is not None:
            filters[filter_value] = boolean_value(value)
    result["extra_include_annexes"] = serialize_annexes(
        serializer.context, filters, "annexes", serializer)
    return result
Пример #9
0
    def _stats(self):
        """ """
        include_stats = self.request.form.get("include_stats", False)
        stats = {}
        if boolean_value(include_stats):
            user = api.user.get_current()
            if not user.has_role("Manager"):
                raise Unauthorized(STATS_UNAUTHORIZED)

            # all this was gently borrowed from imio.updates inst_infos.py
            stats["users"] = self._stats_users()
            stats["groups"] = self._stats_groups()
            stats["types"] = self._stats_types()
            stats["database"] = self._stats_database()
        return stats
Пример #10
0
 def search(self, query=None):
     if query is None:
         solr_query = {}
     else:
         solr_query = deepcopy(query)
     fl = self.get_fields_list(solr_query)
     facets = boolean_value(solr_query.get("facets", False))
     facet_fields = solr_query.get("facet_fields", [])
     query_params = {"fl": fl}
     if facets:
         query_params["facets"] = facets
         if facet_fields:
             query_params["facet_fields"] = facet_fields
             del solr_query["facet_fields"]
         if "facets" in solr_query:
             del solr_query["facets"]
     query_params["query"] = solr_query
     return self.serialize_results(solr_search(**query_params))
Пример #11
0
    def __call__(self, expand=False):
        result = {
            "annexes": {
                "@id": "{}/@annexes".format(self.context.absolute_url())
            }
        }
        if not expand:
            return result

        # extend batch? DEFAULT_BATCH_SIZE = 25
        # self.request.form['b_size'] = 50

        # get filters from request.form
        # it is possible to filter annexes on every boolean attributes :
        # to_print, confidential, publishable, to_sign/signed
        filters = {
            k: boolean_value(v)
            for k, v in self.request.form.items() if k in ANNEXES_FILTER_VALUES
        }
        result = serialize_annexes(self.context, filters)
        return result
 def test_false_int(self):
     self.assertFalse(boolean_value(0))
Пример #13
0
    def __call__(self, object_uid, redirect=True):
        """ """
        if not self.context._mayChangeAttendees():
            raise Unauthorized

        # redirect can by passed by jQuery, in this case, we receive '0' or '1'
        redirect = boolean_value(redirect)
        vote_number = int(object_uid)
        item_uid = self.context.UID()
        meeting = self.context.getMeeting()
        if item_uid in meeting.item_votes:
            item_votes = meeting.item_votes[item_uid]
            assert self.context._voteIsDeletable(vote_number)

            vote_to_delete = item_votes[vote_number]
            if self.context.get_votes_are_secret():
                originnal_vote_keys = [
                    str(vote_count) for vote_value, vote_count in
                    vote_to_delete['votes'].items()
                ]
                originnal_vote_keys = "__".join(originnal_vote_keys)
                originnal_vote_values = [
                    vote_value for vote_value, vote_count in
                    vote_to_delete['votes'].items()
                ]
                originnal_vote_values = "__".join(originnal_vote_values)
                fp_extras_pattern = 'item={0} vote_number={1} vote_label={2} vote_count={3} vote_values={4}'
            else:
                originnal_vote_keys = [
                    voter_uid for voter_uid in vote_to_delete['voters']
                ]
                originnal_vote_keys = "__".join(originnal_vote_keys)
                originnal_vote_values = [
                    vote_value
                    for vote_value in vote_to_delete['voters'].values()
                ]
                originnal_vote_values = "__".join(originnal_vote_values)
                fp_extras_pattern = 'item={0} vote_number={1} vote_label={2} voter_uids={3} vote_values={4}'
                # call clean_voters_linked_to with every values NOT_ENCODED_VOTE_VALUE
                # to liberate every values
                new_voters = vote_to_delete['voters'].copy()
                new_voters = {
                    voter_uid: NOT_ENCODED_VOTE_VALUE
                    for voter_uid, vote_value in new_voters.items()
                    if vote_value != NOT_VOTABLE_LINKED_TO_VALUE
                }
                clean_voters_linked_to(self.context, meeting, vote_number,
                                       new_voters)

            # delete from meeting itemVote
            deleted_vote = meeting.item_votes[item_uid].pop(vote_number)
            # if deleted last existing vote (vote_number 0) remove context UID from meeting itemVotes
            if not meeting.item_votes[item_uid]:
                del meeting.item_votes[item_uid]
            # finish deletion
            label = deleted_vote['label'] or ""
            extras = fp_extras_pattern.format(repr(self.context), vote_number,
                                              label.encode('utf-8'),
                                              originnal_vote_keys,
                                              originnal_vote_values)
            fplog('delete_item_votes', extras=extras)
        # message
        api.portal.show_message(_(
            "Votes number ${vote_number} have been deleted for current item.",
            mapping={'vote_number': vote_number + 1}),
                                request=self.request)
        self._finished = True
Пример #14
0
 def test_false_string(self):
     self.assertFalse(boolean_value("false"))
 def test_true_bool(self):
     self.assertTrue(boolean_value(True))
 def test_true_string(self):
     self.assertTrue(boolean_value('true'))
 def test_true_string_uppercase(self):
     self.assertTrue(boolean_value('True'))
 def test_true_int_string(self):
     self.assertTrue(boolean_value('1'))
 def test_true_int(self):
     self.assertTrue(boolean_value(1))
 def test_true_other_value(self):
     self.assertTrue(boolean_value('foobar'))
 def test_false_int_string(self):
     self.assertFalse(boolean_value('0'))
Пример #22
0
def get_return_fullobject_after_creation_default():
    """ Return the return_fullobject_after_creation_default defined in instance config """
    return boolean_value(
        os.getenv("RETURN_FULLOBJECT_AFTER_CREATION_DEFAULT", True))
 def test_false_string_uppercase(self):
     self.assertFalse(boolean_value('False'))
 def test_false_bool(self):
     self.assertFalse(boolean_value(False))