示例#1
0
 def get_meta_information(self, meta_data, value):
     """
     For retrieving meta values, otherwise returns {}
     """
     meta = {}
     for key in meta_data or {}:
         if key == 'count':
             show_related_counts = self.context['request'].query_params.get(
                 'related_counts', False)
             if utils.is_truthy(show_related_counts):
                 meta[key] = website_utils.rapply(meta_data[key],
                                                  _url_val,
                                                  obj=value,
                                                  serializer=self.parent)
             elif utils.is_falsy(show_related_counts):
                 continue
             if not utils.is_truthy(show_related_counts):
                 raise InvalidQueryStringError(
                     detail=
                     "Acceptable values for the related_counts query param are 'true' or 'false'; got '{0}'"
                     .format(show_related_counts),
                     parameter='related_counts')
         else:
             meta[key] = website_utils.rapply(meta_data[key],
                                              _url_val,
                                              obj=value,
                                              serializer=self.parent)
     return meta
示例#2
0
    def get_meta_information(self, meta_data, value):
        """
        For retrieving meta values, otherwise returns {}
        """
        meta = {}
        for key in meta_data or {}:
            if key == 'count' or key == 'unread':
                show_related_counts = self.context['request'].query_params.get('related_counts', False)
                if self.context['request'].parser_context.get('kwargs'):
                    if self.context['request'].parser_context['kwargs'].get('is_embedded'):
                        show_related_counts = False
                field_counts_requested = self.process_related_counts_parameters(show_related_counts, value)

                if utils.is_truthy(show_related_counts):
                    meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
                elif utils.is_falsy(show_related_counts):
                    continue
                elif self.field_name in field_counts_requested:
                    meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
                else:
                    continue
            elif key == 'projects_in_common':
                if not get_user_auth(self.context['request']).user:
                    continue
                if not self.context['request'].query_params.get('show_projects_in_common', False):
                    continue
                meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
            else:
                meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
        return meta
示例#3
0
    def get_meta_information(self, meta_data, value):
        """
        For retrieving meta values, otherwise returns {}
        """
        meta = {}
        for key in meta_data or {}:
            if key == 'count' or key == 'unread':
                show_related_counts = self.context['request'].query_params.get(
                    'related_counts', False)
                field_counts_requested = self.process_related_counts_parameters(
                    show_related_counts, value)

                if utils.is_truthy(show_related_counts):
                    meta[key] = website_utils.rapply(meta_data[key],
                                                     _url_val,
                                                     obj=value,
                                                     serializer=self.parent)
                elif utils.is_falsy(show_related_counts):
                    continue
                elif self.field_name in field_counts_requested:
                    meta[key] = website_utils.rapply(meta_data[key],
                                                     _url_val,
                                                     obj=value,
                                                     serializer=self.parent)
                else:
                    continue
            else:
                meta[key] = website_utils.rapply(meta_data[key],
                                                 _url_val,
                                                 obj=value,
                                                 serializer=self.parent)
        return meta
示例#4
0
 def test_rapply_preserves_args_and_kwargs(self):
     def zero_if_not_check(item, check, checkFn=lambda n: n):
         if check and checkFn(item):
             return item
         return 0
     inputs = range(5)
     outputs = util.rapply(inputs, zero_if_not_check, True, checkFn=lambda n: n % 2)
     assert_equal(outputs, [0, 1, 0, 3, 0])
     outputs = util.rapply(inputs, zero_if_not_check, False, checkFn=lambda n: n % 2)
     assert_equal(outputs, [0, 0, 0, 0, 0])
示例#5
0
 def test_rapply_preserves_args_and_kwargs(self):
     def zero_if_not_check(item, check, checkFn=lambda n: n):
         if check and checkFn(item):
             return item
         return 0
     inputs = range(5)
     outputs = util.rapply(inputs, zero_if_not_check, True, checkFn=lambda n: n % 2)
     assert_equal(outputs, [0, 1, 0, 3, 0])
     outputs = util.rapply(inputs, zero_if_not_check, False, checkFn=lambda n: n % 2)
     assert_equal(outputs, [0, 0, 0, 0, 0])
示例#6
0
 def test_rapply_on_set(self):
     inputs = set(i for i in range(5))
     add_one = lambda n: n + 1
     outputs = util.rapply(inputs, add_one)
     for i in inputs:
         assert_in(i + 1, outputs)
     assert_true(isinstance(outputs, set))
示例#7
0
 def test_rapply_on_tuple(self):
     inputs = tuple(i for i in range(5))
     add_one = lambda n: n + 1
     outputs = util.rapply(inputs, add_one)
     for i in inputs:
         assert_equal(outputs[i], i + 1)
     assert_equal(type(outputs), tuple)
示例#8
0
def update_draft_registration(auth, node, draft, *args, **kwargs):
    """Update an existing draft registration

    :return: serialized draft registration
    :rtype: dict
    :raises: HTTPError
    """
    check_draft_state(draft)
    data = request.get_json()

    schema_data = data.get('schema_data', {})
    schema_data = rapply(schema_data, strip_html)

    schema_name = data.get('schema_name')
    schema_version = data.get('schema_version', 1)
    if schema_name:
        meta_schema = get_schema_or_fail(
            Q(name=schema_name, schema_version=schema_version))
        existing_schema = draft.registration_schema
        if (existing_schema.name, existing_schema.schema_version) != (
                meta_schema.name, meta_schema.schema_version):
            draft.registration_schema = meta_schema

    draft.update_metadata(schema_data)
    draft.save()
    return serialize_draft_registration(draft, auth), http.OK
示例#9
0
    def test_rapply_on_str(self):
        input = "bob"
        convert = lambda s: s.upper()
        outputs = util.rapply(input, convert)

        assert_equal("BOB", outputs)
        assert_true(isinstance(outputs, basestring))
示例#10
0
    def test_rapply_on_str(self):
        input = "bob"
        convert = lambda s: s.upper()
        outputs = util.rapply(input, convert)

        assert_equal("BOB", outputs)
        assert_true(isinstance(outputs, basestring))
示例#11
0
 def test_rapply_on_tuple(self):
     inputs = tuple(i for i in range(5))
     add_one = lambda n: n + 1
     outputs = util.rapply(inputs, add_one)
     for i in inputs:
         assert_equal(outputs[i], i + 1)
     assert_equal(type(outputs), tuple)
示例#12
0
 def test_rapply_on_set(self):
     inputs = set(i for i in range(5))
     add_one = lambda n: n + 1
     outputs = util.rapply(inputs, add_one)
     for i in inputs:
         assert_in(i + 1, outputs)
     assert_true(isinstance(outputs, set))
示例#13
0
文件: drafts.py 项目: Alpani/osf.io
def update_draft_registration(auth, node, draft, *args, **kwargs):
    """Update an existing draft registration

    :return: serialized draft registration
    :rtype: dict
    :raises: HTTPError
    """
    check_draft_state(draft)
    data = request.get_json()

    schema_data = data.get('schema_data', {})
    schema_data = rapply(schema_data, strip_html)

    schema_name = data.get('schema_name')
    schema_version = data.get('schema_version', 1)
    if schema_name:
        meta_schema = get_schema_or_fail(
            Q('name', 'eq', schema_name) &
            Q('schema_version', 'eq', schema_version)
        )
        existing_schema = draft.registration_schema
        if (existing_schema.name, existing_schema.schema_version) != (meta_schema.name, meta_schema.schema_version):
            draft.registration_schema = meta_schema

    draft.update_metadata(schema_data)
    draft.save()
    return serialize_draft_registration(draft, auth), http.OK
示例#14
0
    def test_rapply(self):
        inputs = {
            'foo': 'bar',
            'baz': {
                'boom': ['kapow'],
                'bang': 'bam'
            },
            'bat': ['man']
        }
        outputs = util.rapply(inputs, str.upper)
        assert_equal(outputs['foo'], 'bar'.upper())
        assert_equal(outputs['baz']['boom'], ['kapow'.upper()])
        assert_equal(outputs['baz']['bang'], 'bam'.upper())
        assert_equal(outputs['bat'], ['man'.upper()])

        r_assert = lambda s: assert_equal(s.upper(), s)
        util.rapply(outputs, r_assert)
示例#15
0
    def test_rapply(self):
        inputs = {
            'foo': 'bar',
            'baz': {
                'boom': ['kapow'],
                'bang': 'bam'
            },
            'bat': ['man']
        }
        outputs = util.rapply(inputs, str.upper)
        assert_equal(outputs['foo'], 'bar'.upper())
        assert_equal(outputs['baz']['boom'], ['kapow'.upper()])
        assert_equal(outputs['baz']['bang'], 'bam'.upper())
        assert_equal(outputs['bat'], ['man'.upper()])

        r_assert = lambda s: assert_equal(s.upper(), s)
        util.rapply(outputs, r_assert)
示例#16
0
    def to_representation(self, value):
        """
        Returns nested dictionary in format {'links': {'self.link_type': ... }

        If no meta information, self.link_type is equal to a string containing link's URL.  Otherwise,
        the link is represented as a links object with 'href' and 'meta' members.
        """
        meta = website_utils.rapply(self.meta, _url_val, obj=value, serializer=self.parent)
        return {'links': {self.link_type: {'href': value.referent.get_absolute_url(), 'meta': meta}}}
示例#17
0
    def to_representation(self, value):
        """
        Returns nested dictionary in format {'links': {'self.link_type': ... }

        If no meta information, self.link_type is equal to a string containing link's URL.  Otherwise,
        the link is represented as a links object with 'href' and 'meta' members.
        """
        meta = website_utils.rapply(self.meta, _url_val, obj=value, serializer=self.parent)
        return {'links': {self.link_type: {'href': value.referent.get_absolute_url(), 'meta': meta}}}
示例#18
0
 def get_meta_information(self, meta_data, value):
     """
     For retrieving meta values, otherwise returns {}
     """
     meta = {}
     for key in meta_data or {}:
         if key == 'count' or key == 'unread':
             show_related_counts = self.context['request'].query_params.get('related_counts', False)
             if utils.is_truthy(show_related_counts):
                 meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
             elif utils.is_falsy(show_related_counts):
                 continue
             if not utils.is_truthy(show_related_counts):
                 raise InvalidQueryStringError(
                     detail="Acceptable values for the related_counts query param are 'true' or 'false'; got '{0}'".format(show_related_counts),
                     parameter='related_counts'
                 )
         else:
             meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
     return meta
示例#19
0
    def get_meta_information(self, meta_data, value):
        """
        For retrieving meta values, otherwise returns {}
        """
        meta = {}
        for key in meta_data or {}:
            if key == 'count' or key == 'unread':
                show_related_counts = self.context['request'].query_params.get('related_counts', False)
                field_counts_requested = self.process_related_counts_parameters(show_related_counts, value)

                if utils.is_truthy(show_related_counts):
                    meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
                elif utils.is_falsy(show_related_counts):
                    continue
                elif self.field_name in field_counts_requested:
                    meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
                else:
                    continue
            else:
                meta[key] = website_utils.rapply(meta_data[key], _url_val, obj=value, serializer=self.parent)
        return meta
示例#20
0
    def is_valid(self, clean_html=True, **kwargs):
        """
        After validation, scrub HTML from validated_data prior to saving (for create and update views)

        Exclude 'type' from validated_data.

        """
        ret = super(JSONAPIListSerializer, self).is_valid(**kwargs)

        if clean_html is True:
            self._validated_data = website_utils.rapply(self.validated_data, strip_html)

        for data in self._validated_data:
            data.pop('type', None)

        return ret
示例#21
0
    def is_valid(self, clean_html=True, **kwargs):
        """
        After validation, scrub HTML from validated_data prior to saving (for create and update views)

        Exclude 'type' from validated_data.

        """
        ret = super(JSONAPIListSerializer, self).is_valid(**kwargs)

        if clean_html is True:
            self._validated_data = website_utils.rapply(self.validated_data, strip_html)

        for data in self._validated_data:
            data.pop('type', None)

        return ret
示例#22
0
    def is_valid(self, clean_html=True, **kwargs):
        """
        After validation, scrub HTML from validated_data prior to saving (for create and update views)

        Exclude 'type' and '_id' from validated_data.

        """
        ret = super(JSONAPISerializer, self).is_valid(**kwargs)

        if clean_html is True:
            self._validated_data = website_utils.rapply(self.validated_data, strip_html)

        self._validated_data.pop('type', None)
        self._validated_data.pop('target_type', None)

        if self.context['request'].method in utils.UPDATE_METHODS:
            self._validated_data.pop('_id', None)

        return ret
示例#23
0
    def is_valid(self, clean_html=True, **kwargs):
        """
        After validation, scrub HTML from validated_data prior to saving (for create and update views)

        Exclude 'type' and '_id' from validated_data.

        """
        ret = super(JSONAPISerializer, self).is_valid(**kwargs)

        if clean_html is True:
            self._validated_data = website_utils.rapply(self.validated_data, strip_html)

        self._validated_data.pop('type', None)
        self._validated_data.pop('target_type', None)

        if self.context['request'].method in utils.UPDATE_METHODS:
            self._validated_data.pop('_id', None)

        return ret
示例#24
0
 def test_rapply_on_list(self):
     inputs = range(5)
     add_one = lambda n: n + 1
     outputs = util.rapply(inputs, add_one)
     for i in inputs:
         assert_equal(outputs[i], i + 1)
示例#25
0
 def test_rapply_on_list(self):
     inputs = range(5)
     add_one = lambda n: n + 1
     outputs = util.rapply(inputs, add_one)
     for i in inputs:
         assert_equal(outputs[i], i + 1)
示例#26
0
 def sanitize_data(self):
     return website_utils.rapply(self.validated_data, strip_html)
示例#27
0
文件: node.py 项目: adlius/osf.io
from website.util.permissions import ADMIN, READ, WRITE, CREATOR_PERMISSIONS
from website.util.rubeus import collect_addon_js
from website.project.model import has_anonymous_link, NodeUpdateError, validate_title
from website.project.forms import NewNodeForm
from website.project.metadata.utils import serialize_meta_schemas
from osf.models import AbstractNode as Node, PrivateLink, Comment
from osf.models.licenses import serialize_node_license_record
from website import settings
from website.views import find_bookmark_collection, validate_page_num
from website.views import serialize_node_summary
from website.profile import utils
from website.util.sanitize import strip_html
from website.util import rapply


r_strip_html = lambda collection: rapply(collection, strip_html)
logger = logging.getLogger(__name__)

@must_be_valid_project
@must_have_permission(WRITE)
@must_not_be_registration
def edit_node(auth, node, **kwargs):
    post_data = request.json
    edited_field = post_data.get('name')
    value = post_data.get('value', '')

    new_val = None
    if edited_field == 'title':
        try:
            node.set_title(value, auth=auth)
        except ValidationError as e:
示例#28
0
from osf.models import AbstractNode, PrivateLink, Contributor, Node, NodeRelation
from osf.models.contributor import get_contributor_permissions
from osf.models.licenses import serialize_node_license_record
from website import settings
from website.views import find_bookmark_collection, validate_page_num
from website.views import serialize_node_summary
from website.profile import utils
from website.util.sanitize import strip_html
from website.util import rapply
from addons.mendeley.provider import MendeleyCitationsProvider
from addons.zotero.provider import ZoteroCitationsProvider
from addons.wiki.utils import serialize_wiki_widget
from addons.dataverse.utils import serialize_dataverse_widget
from addons.forward.utils import serialize_forward_widget

r_strip_html = lambda collection: rapply(collection, strip_html)
logger = logging.getLogger(__name__)


@must_be_valid_project
@must_have_permission(WRITE)
@must_not_be_registration
def edit_node(auth, node, **kwargs):
    post_data = request.json
    edited_field = post_data.get('name')
    value = post_data.get('value', '')

    new_val = None
    if edited_field == 'title':
        try:
            node.set_title(value, auth=auth)
示例#29
0
 def sanitize_data(self):
     return website_utils.rapply(self.validated_data, strip_html)