Exemplo n.º 1
0
 def get_all_groups(self, login_bundle):
     """Return array of all groups (atom_tags). List may include groups that are not
     active or not accessible by user.
     """
     user = self._check_login(login_bundle)
     groups = []
     for group_id, group in get_group_database().root.iteritems():
         groups.append(atom_id(group))
     return groups
Exemplo n.º 2
0
 def user_atom_id(self, login_bundle, user_id):
     """Given a short user id (e.g. 'u123456789') return the corresponding user's atom_tag,
     which is required by other API calls.
     """
     cur_user = self._check_login(login_bundle)
     user = get_user_database().get_user(user_id)
     if user:
         return atom_id(user)
     return None
Exemplo n.º 3
0
 def group_atom_id(self, login_bundle, group_id):
     """Given a short group id (e.g. 'community-general') return the corresponding group's atom_tag,
     which is required by other API calls.
     """
     cur_user = self._check_login(login_bundle)
     group = get_group_database().get_group(group_id)
     if group:
         return atom_id(group)
     return None
Exemplo n.º 4
0
    def _format_revision(self, revision, format=None):
        struct = dict(
                atom_tag = atom_id(revision),
                )

        if format == 'html':
            struct['html'] = str(revision.html2())
        elif format == 'text':
            struct['text'] = revision.get_raw()

        return struct
Exemplo n.º 5
0
    def _format_page(self, page, format=None):
        struct = dict(
                atom_tag = atom_id(page),
                name = page.name,
                )

        if format == 'html':
            struct['html'] = str(page.get_cached_html2())
        elif format == 'text':
            struct['text'] = page.versions[-1].get_raw()

        return struct
Exemplo n.º 6
0
    def _create_login_bundle(self, user):
        """Given a user, return a login_bundle for the user."""

        (digest, creation, nonce) = qon.atom.create_password_digest(user.get_password_hash())
        atom_tag = atom_id(user)

        return dict(
                username=user.get_user_id(),
                passdigest=digest,
                created=creation,
                nonce=nonce,
                atom_tag=atom_tag,
                )
Exemplo n.º 7
0
 def item_info(item):
     """Return struct with standard item information."""
     return dict(atom_tag=atom_id(item),
             title=item.watchable_name(),
             score=item.get_karma_score(),
             )
Exemplo n.º 8
0
    def user_data(self, login_bundle, atom_tag, fields):
        """Return struct containing requested fields for user atom_tag.

        Parameters:
            atom_tag: the atom tag of the user for which requesting data
            fields: array of zero or more of the following:
                'name':         currently-specified name to be displayed
                'fscore':       feedback score
                'fbank':        feedback bank
                'fpos':         positive feedback received
                'fneg':         negative feedback received
                'fposgiv':      positive feedback given
                'fneggiv':      negative feedback given
                'fcom':         net comment feedback received
                'fcompos':      positive comment feedback received
                'fcomneg':      negative comment feedback received
                'membsince':    member since date
                'lastlogin':    last login (may return 'never' or 'inactive')
                'idletime':     idle time or 'none' if not logged in
                'posffrom':     positive feedback from (array of user_ids)
                'posffromnum':  number of positive feedback givers
                'negffrom':     negative feedback from (if visible)
                'neggfromnum':  number of negative feedback givers
                'emaildomain:   domain portion of email
                'groupown':     groups owned by user
                'groupmemb':    groups user is a member of
                'all':          all of the above

        Returns struct containing one entry per requested field.
        """
        user_db = get_user_database()
        group_db = get_group_database()

        cur_user = self._check_login(login_bundle)
        user = lookup_atom_id(atom_tag)
        if not user or not isinstance(user, qon.user.User):
            raise xmlrpclib.Fault(FAULT_INVALID_ITEM, 'Invalid user id')

        all = 'all' in fields
        result = {}

        if all or 'name' in fields:
            result['name'] = user.display_name()
        if all or 'fscore' in fields:
            result['fscore'] = user.get_karma_score()
        if all or 'fbank' in fields:
            result['fbank'] = user.get_karma_bank_balance()
        if all or 'fpos' in fields:
            result['fpos'] = user.karma_plus_received()
        if all or 'fneg' in fields:
            result['fneg'] = user.karma_minus_received()
        if all or 'fposgiv' in fields:
            result['fposgiv'] = user.karma_plus_given()
        if all or 'fneggiv' in fields:
            result['fneggiv'] = user.karma_minus_given()

        if all or ('fcom' in fields) or ('fcompos' in fields) or ('fcomneg' in fields):
            fcompos, fcomneg = get_list_database().karma_user_content_totals(user)
        if all or 'fcom' in fields:
            result['fcom'] = fcompos + fcomneg
        if all or 'fcompos' in fields:
            result['fcompos'] = fcompos
        if all or 'fcomneg' in fields:
            result['fcomneg'] = fcomneg

        if all or 'membsince' in fields:
            dt = user.get_user_data().member_since()
            result['membsince'] = _format_dt(dt)
        if all or 'lastlogin' in fields:
            result['lastlogin'] = _format_dt(getattr(user, 'last_login', None))
        if all or 'idletime' in fields:
            if user.is_disabled():
                sec = 'inactive'
            else:
                idle = user.idle_time()
                if idle:
                    sec = idle.seconds
                else:
                    sec = 'none'
            result['idletime'] = sec

        if all or 'posffrom' in fields:
            result['posffrom'] = [atom_id(user_db.get_user(uid)) \
                    for karma, uid in user.positive_karma_givers()]

        if all or 'posffromnum' in fields:
            result['posffromnum'] = len(user.positive_karma_givers())

        if all or 'negffrom' in fields:
            result['negffrom'] = [atom_id(user_db.get_user(uid)) \
                    for karma, uid in user.negative_karma_givers()]

        if all or 'negffromnum' in fields:
            result['negffromnum'] = len(user.negative_karma_givers())

        if all or 'emaildomain' in fields:
            e = user.get_primary_email()
            result['emaildomain'] = e[e.find('@')+1:]
        if all or 'groupown' in fields:
            result['groupown'] = [atom_id(g) \
                    for g in group_db.owned_groups(user)]
        if all or 'groupmemb' in fields:
            result['groupmemb'] = [atom_id(g) \
                    for g in group_db.member_groups(user)]

        return result
Exemplo n.º 9
0
def _format_user(user):
    return dict(
            atom_tag = atom_id(user),
            display_name = xml_escape(user.display_name()),
            feedback_score = user.get_karma_score(),
            )
Exemplo n.º 10
0
 def atom_id(self):
     if self.item:
         return atom_id(self.item)
     return None