def newest_feed_items(context, request): principals, created_by = _get_criteria(request) events = find_events(context) # Check to see if we're asking for most recent newer_than = request.params.get('newer_than') if newer_than: last_gen, last_index = newer_than.split(':') last_gen = long(last_gen) last_index = int(last_index) latest = list( events.newer(last_gen, last_index, principals, created_by)) else: last_gen = -1L last_index = -1 latest = list(islice(events.checked(principals, created_by), 20)) if not latest: return (last_gen, last_index, last_gen, last_index, ()) last_gen, last_index, ignored = latest[0] earliest_gen, earliest_index, ignored = latest[-1] feed_items = _update_feed_items(latest, request.application_url) return last_gen, last_index, earliest_gen, earliest_index, feed_items
def older_feed_items(context, request): older_than = request.params.get('older_than') # If we don't have params, bail out. if older_than is None: return -1, -1, () principals, created_by = _get_criteria(request) events = find_events(context) earliest_gen, earliest_index = older_than.split(':') earliest_gen = long(earliest_gen) earliest_index = int(earliest_index) older = list( islice( events.older(earliest_gen, earliest_index, principals, created_by), 20)) if not older: return (earliest_gen, earliest_index, ()) earliest_gen, earliest_index, ignored = older[-1] feed_items = _update_feed_items(older, request.application_url) return earliest_gen, earliest_index, feed_items
def newest_feed_items(context, request): principals, created_by = _get_criteria(request) events = find_events(context) # Check to see if we're asking for most recent newer_than = request.params.get('newer_than') if newer_than: last_gen, last_index = newer_than.split(':') last_gen = long(last_gen) last_index = int(last_index) latest = list(events.newer(last_gen, last_index, principals, created_by)) else: last_gen = -1L last_index = -1 latest = list(islice(events.checked(principals, created_by), 20)) if not latest: return (last_gen, last_index, last_gen, last_index, ()) last_gen, last_index, ignored = latest[0] earliest_gen, earliest_index, ignored = latest[-1] feed_items = _update_feed_items(latest, request.application_url) return last_gen, last_index, earliest_gen, earliest_index, feed_items
def user_tagged_content(event): if ITagAddedEvent.providedBy(event): request = get_current_request() context = getattr(request, "context", None) if context is None: return events = find_events(context) if not events: return site = find_site(context) catalog = find_catalog(context) path = catalog.document_map.address_for_docid(event.item) tagged = find_resource(site, path) if tagged is None: return profile_id = event.user if profile_id in (None, "None"): return profile = site["profiles"][profile_id] info = _getInfo(profile, tagged) if info is None: return if info["content_type"] == "Community": info["flavor"] = "tagged_community" elif info["content_type"] == "Person": info["flavor"] = "tagged_profile" else: info["flavor"] = "tagged_other" info["operation"] = "tagged" info["tagname"] = event.name events.push(**info)
def user_tagged_content(event): if ITagAddedEvent.providedBy(event): request = get_current_request() context = getattr(request, 'context', None) if context is None: return events = find_events(context) if not events: return site = find_site(context) catalog = find_catalog(context) path = catalog.document_map.address_for_docid(event.item) tagged = find_resource(site, path) if tagged is None: return profile_id = event.user if profile_id in (None, 'None'): return profile = site['profiles'][profile_id] info = _getInfo(profile, tagged) if info is None: return if info['content_type'] == 'Community': info['flavor'] = 'tagged_community' elif info['content_type'] == 'Person': info['flavor'] = 'tagged_profile' else: info['flavor'] = 'tagged_other' info['operation'] = 'tagged' info['tagname'] = event.name events.push(**info)
def feed_dump_csv(context, request): buf = StringIO() buf.write(','.join(_CSV_FIELD_NAMES) + '\n') writer = DictWriter(buf, _CSV_FIELD_NAMES) for gen, index, event_info in find_events(context): for key in list(event_info): if key not in _CSV_FIELD_NAMES: del event_info[key] for key, xform in _CSV_MAP.items(): event_info[key] = xform(event_info.get(key)) writer.writerow(event_info) response = Response(buf.getvalue()) response.content_type = 'application/x-csv' response.headers.add('Content-Disposition', 'attachment;filename=feed_dump.csv') return response
def feed_dump_csv(context, request): buf = StringIO() buf.write(','.join(_CSV_FIELD_NAMES) + '\n') writer = DictWriter(buf, _CSV_FIELD_NAMES) for gen, index, event_info in find_events(context): info = event_info.copy() for key in list(info): if key not in _CSV_FIELD_NAMES: del info[key] for key, xform in _CSV_MAP.items(): info[key] = xform(info.get(key)) writer.writerow(info) response = Response(buf.getvalue()) response.content_type = 'application/x-csv' response.headers.add('Content-Disposition', 'attachment;filename=feed_dump.csv') return response
def user_left_community(event): if IUserRemovedGroup.providedBy(event): delta = event.old_groups - event.groups left = [x for x in delta if x.startswith(MEMBER_PREFIX)] events = find_events(event.site) if not events or not left: return profile = event.site["profiles"][event.id] for group in left: community_id, gtype = group[len(MEMBER_PREFIX) :].split(":") if gtype == "members": community = event.site["communities"].get(community_id) if community is None: continue info = _getInfo(profile, community) info["flavor"] = "joined_left" info["operation"] = "left" events.push(**info)
def user_left_community(event): if IUserRemovedGroup.providedBy(event): delta = event.old_groups - event.groups left = [x for x in delta if x.startswith(MEMBER_PREFIX)] events = find_events(event.site) if not events or not left: return profile = event.site['profiles'][event.id] for group in left: community_id, gtype = group[len(MEMBER_PREFIX):].split(':') if gtype == 'members': community = event.site['communities'].get(community_id) if community is None: continue info = _getInfo(profile, community) info['flavor'] = 'joined_left' info['operation'] = 'left' events.push(**info)
def user_modified_content(modified, event): if IObjectModifiedEvent.providedBy(event): events = find_events(modified) if not events: return site = find_site(modified) profile_id = getattr(modified, "modified_by", None) if profile_id in (None, "None"): return profile = site["profiles"][profile_id] info = _getInfo(profile, modified) if info is None: return if info["content_type"] == "Community": info["flavor"] = "added_edited_community" elif info["content_type"] == "Person": info["flavor"] = "added_edited_profile" else: info["flavor"] = "added_edited_other" info["operation"] = "edited" events.push(**info)
def user_modified_content(modified, event): if IObjectModifiedEvent.providedBy(event): events = find_events(modified) if not events: return site = find_site(modified) profile_id = getattr(modified, 'modified_by', None) if profile_id in (None, 'None'): return profile = site['profiles'][profile_id] info = _getInfo(profile, modified) if info is None: return if info['content_type'] == 'Community': info['flavor'] = 'added_edited_community' elif info['content_type'] == 'Person': info['flavor'] = 'added_edited_profile' else: info['flavor'] = 'added_edited_other' info['operation'] = 'edited' events.push(**info)
def older_feed_items(context, request): older_than = request.params.get('older_than') # If we don't have params, bail out. if older_than is None: return -1, -1, () principals, created_by = _get_criteria(request) events = find_events(context) earliest_gen, earliest_index = older_than.split(':') earliest_gen = long(earliest_gen) earliest_index = int(earliest_index) older = list(islice(events.older(earliest_gen, earliest_index, principals, created_by), 20)) if not older: return (earliest_gen, earliest_index, ()) earliest_gen, earliest_index, ignored = older[-1] feed_items = _update_feed_items(older, request.application_url) return earliest_gen, earliest_index, feed_items
def rename_user(context, old_name, new_name, merge=False, out=None): """ Renames a user with the given userid to a new userid. If `merge` is `True` a user is expected to already exist with userid `new_name`. Moves all content and group memberships from old user to new user before removing the old user. """ profiles = find_profiles(context) users = find_users(context) old_user = users.get_by_id(old_name) old_profile = profiles.get(old_name) if not old_profile: raise ValueError("No such profile: %s" % old_name) old_title = old_profile.title if merge: if old_user is not None and users.get_by_id(new_name) is None: raise ValueError("No such user: %s" % new_name) if new_name not in profiles: raise ValueError("No such profile: %s" % new_name) new_title = profiles[new_name].title if out is not None: print >> out, "Merging user from %s to %s." % (old_name, new_name) if old_user is not None: for group in old_user['groups']: if not users.member_of_group(new_name, group): users.add_user_to_group(new_name, group) users.remove(old_name) del profiles[old_name] else: if users.get_by_id(new_name) is not None: raise ValueError("User already exists: %s" % new_name) if new_name in profiles: raise ValueError("Profile already exists: %s" % new_name) new_title = None if out is not None: print >> out, "Renaming user %s to %s." % (old_name, new_name) if old_user is not None: users.add(new_name, new_name, old_user['password'], old_user['groups'], encrypted=True) users.remove(old_name) profile = profiles[old_name] del profiles[old_name] profiles[new_name] = profile catalog = find_catalog(context) search = ICatalogSearch(context) index = catalog['creator'] count, docids, resolver = search(creator=old_name) for docid in docids: doc = resolver(docid) if out is not None: print >> out, "Updating creator for %s." % resource_path(doc) doc.creator = new_name index.reindex_doc(docid, doc) index = catalog['modified_by'] count, docids, resolver = search(modified_by=old_name) for docid in docids: doc = resolver(docid) if out is not None: print >> out, "Updating modified_by for %s." % resource_path(doc) doc.modified_by = new_name index.reindex_doc(docid, doc) content_feed = find_events(context) if content_feed: for gen, index, event in content_feed.checked(None, old_name): for key, value in event.items(): if isinstance(value, basestring): if old_name in value: event[key] = value.replace(old_name, new_name) if new_title and old_title in value: event[key] = value.replace(old_title, new_title)
def rename_user(context, old_name, new_name, merge=False, out=None): """ Renames a user with the given userid to a new userid. If `merge` is `True` a user is expected to already exist with userid `new_name`. Moves all content and group memberships from old user to new user before removing the old user. """ profiles = find_profiles(context) users = find_users(context) old_user = users.get_by_id(old_name) old_profile = profiles.get(old_name) if not old_profile: raise ValueError("No such profile: %s" % old_name) old_title = old_profile.title if merge: if old_user is not None and users.get_by_id(new_name) is None: raise ValueError("No such user: %s" % new_name) if new_name not in profiles: raise ValueError("No such profile: %s" % new_name) new_title = profiles[new_name].title if out is not None: print >>out, "Merging user from %s to %s." % (old_name, new_name) if old_user is not None: for group in old_user['groups']: if not users.member_of_group(new_name, group): users.add_user_to_group(new_name, group) users.remove(old_name) del profiles[old_name] else: if users.get_by_id(new_name) is not None: raise ValueError("User already exists: %s" % new_name) if new_name in profiles: raise ValueError("Profile already exists: %s" % new_name) new_title = None if out is not None: print >>out, "Renaming user %s to %s." % (old_name, new_name) if old_user is not None: users.add(new_name, new_name, old_user['password'], old_user['groups'], encrypted=True) users.remove(old_name) profile = profiles[old_name] del profiles[old_name] profiles[new_name] = profile catalog = find_catalog(context) search = ICatalogSearch(context) index = catalog['creator'] count, docids, resolver = search(creator=old_name) for docid in docids: doc = resolver(docid) if out is not None: print >>out, "Updating creator for %s." % resource_path(doc) doc.creator = new_name index.reindex_doc(docid, doc) index = catalog['modified_by'] count, docids, resolver = search(modified_by=old_name) for docid in docids: doc = resolver(docid) if out is not None: print >>out, "Updating modified_by for %s." % resource_path(doc) doc.modified_by = new_name index.reindex_doc(docid, doc) content_feed = find_events(context) if content_feed: for gen, index, event in content_feed.checked(None, old_name): for key, value in event.items(): if isinstance(value, basestring): if old_name in value: event[key] = value.replace(old_name, new_name) if new_title and old_title in value: event[key] = value.replace(old_title, new_title)