1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-03 16:10:26 +00:00

Use threaded rpc.

This commit is contained in:
killing
2012-06-25 20:42:19 +08:00
parent d342f92758
commit e86aa244c7
10 changed files with 81 additions and 80 deletions

View File

@@ -11,11 +11,11 @@ from auth import authenticate, login
from registration import signals
#from registration.forms import RegistrationForm
from registration.models import RegistrationProfile
from seaserv import ccnet_rpc, get_ccnetuser
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_ccnetuser
class UserManager(object):
def create_user(self, username, password=None, is_staff=False, is_active=False):
ccnet_rpc.add_emailuser(username, password, int(is_staff), int(is_active))
ccnet_threaded_rpc.add_emailuser(username, password, int(is_staff), int(is_active))
ccnetuser = get_ccnetuser(username=username)
return ccnetuser
@@ -48,7 +48,7 @@ class CcnetUser(object):
def validate_emailuser(self, email, raw_password):
self.set_password(raw_password)
return ccnet_rpc.validate_emailuser(email, raw_password)
return ccnet_threaded_rpc.validate_emailuser(email, raw_password)
def is_authenticated(self):
"""
@@ -65,9 +65,9 @@ class CcnetUser(object):
return False
def save(self):
emailuser = ccnet_rpc.get_emailuser(self.username)
emailuser = ccnet_threaded_rpc.get_emailuser(self.username)
if emailuser:
ccnet_rpc.update_emailuser(self.id, self.password,
ccnet_threaded_rpc.update_emailuser(self.id, self.password,
int(self.is_staff), int(self.is_active))
else:
self.objects.create_user(username=self.username,
@@ -79,8 +79,8 @@ class CcnetUser(object):
"""
Remove from ccnet EmailUser table and Binding table
"""
ccnet_rpc.remove_emailuser(self.username)
ccnet_rpc.remove_binding(self.username)
ccnet_threaded_rpc.remove_emailuser(self.username)
ccnet_threaded_rpc.remove_binding(self.username)
def get_and_delete_messages(self):
messages = []
@@ -201,7 +201,7 @@ class RegistrationBackend(object):
userid = kwargs['userid']
if userid:
ccnet_rpc.add_binding(new_user.username, userid)
ccnet_threaded_rpc.add_binding(new_user.username, userid)
signals.user_registered.send(sender=self.__class__,
user=new_user,
@@ -295,7 +295,7 @@ class RegistrationForm(forms.Form):
def clean_email(self):
email = self.cleaned_data['email']
emailuser = ccnet_rpc.get_emailuser(email)
emailuser = ccnet_threaded_rpc.get_emailuser(email)
if not emailuser:
return self.cleaned_data['email']
else:
@@ -336,7 +336,7 @@ class OrgRegistrationForm(RegistrationForm):
def clean_url_prefix(self):
url_prefix = self.cleaned_data['url_prefix']
org = ccnet_rpc.get_org_by_url_prefix(url_prefix)
org = ccnet_threaded_rpc.get_org_by_url_prefix(url_prefix)
if not org:
return url_prefix
else:
@@ -385,7 +385,7 @@ class OrgRegistrationBackend(object):
send_email=False)
# create orgnization account
try:
ccnet_rpc.create_org(org_name, url_prefix, username)
ccnet_threaded_rpc.create_org(org_name, url_prefix, username)
except SearpcError, e:
pass
else:

View File

@@ -10,7 +10,7 @@ from django.forms.models import modelformset_factory
from models import Contact
from models import AddContactForm
from seaserv import ccnet_rpc
from seaserv import ccnet_rpc, ccnet_threaded_rpc
@login_required
def contact_list(request):
@@ -29,7 +29,7 @@ def contact_add(request):
contact_email = form.cleaned_data['contact_email']
contact_name = form.cleaned_data['contact_name']
note = form.cleaned_data['note']
emailuser = ccnet_rpc.get_emailuser(contact_email)
emailuser = ccnet_threaded_rpc.get_emailuser(contact_email)
if not emailuser:
error_msg = u"用户不存在"
elif contact_email == request.user.username:
@@ -38,7 +38,7 @@ def contact_add(request):
contact_email=contact_email).count() > 0:
error_msg = u"联系人列表中已有该用户"
elif request.user.org and \
not ccnet_rpc.org_user_exists(request.user.org.org_id,
not ccnet_threaded_rpc.org_user_exists(request.user.org.org_id,
contact_email):
error_msg = u"当前企业不存在该用户"
else:
@@ -70,7 +70,7 @@ def contact_edit(request):
contact_email = form.cleaned_data['contact_email']
contact_name = form.cleaned_data['contact_name']
note = form.cleaned_data['note']
emailuser = ccnet_rpc.get_emailuser(contact_email)
emailuser = ccnet_threaded_rpc.get_emailuser(contact_email)
if not emailuser:
error_msg = u"用户不存在"
elif contact_email == request.user.username:

View File

@@ -2,7 +2,7 @@ from django import forms
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from seaserv import ccnet_rpc
from seaserv import ccnet_rpc, ccnet_threaded_rpc
class AddUserForm(forms.Form):
"""
@@ -15,7 +15,7 @@ class AddUserForm(forms.Form):
def clean_email(self):
email = self.cleaned_data['email']
emailuser = ccnet_rpc.get_emailuser(email)
emailuser = ccnet_threaded_rpc.get_emailuser(email)
if not emailuser:
return self.cleaned_data['email']
else:

View File

@@ -5,7 +5,7 @@ from django.shortcuts import render_to_response, redirect
from django.template import RequestContext
from auth.decorators import login_required
from seaserv import ccnet_rpc, seafserv_threaded_rpc, get_repo, \
from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, get_repo, \
get_group_repoids, check_group_staff
from pysearpc import SearpcError
@@ -25,17 +25,17 @@ def group_list(request):
return go_error(request, u'小组名称只能包含中英文字符,数字及下划线')
try:
group_id = ccnet_rpc.create_group(group_name.encode('utf-8'),
group_id = ccnet_threaded_rpc.create_group(group_name.encode('utf-8'),
request.user.username)
# TODO: transaction?
if request.user.org and group_id > 0:
ccnet_rpc.add_org_group(request.user.org.org_id,
ccnet_threaded_rpc.add_org_group(request.user.org.org_id,
group_id)
except SearpcError, e:
error_msg = e.msg
return go_error(request, error_msg)
groups = ccnet_rpc.get_groups(request.user.username);
groups = ccnet_threaded_rpc.get_groups(request.user.username);
return render_to_response("group/groups.html", {
"groups": groups,
@@ -59,16 +59,16 @@ def group_remove(request, group_id):
return HttpResponseRedirect(reverse('group_list', args=[]))
# Check whether user is the group staff or admin
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username) \
if not ccnet_threaded_rpc.check_group_staff(group_id_int, request.user.username) \
and not request.user.is_staff:
return go_permission_error(request, u'只有小组管理员有权解散小组')
try:
ccnet_rpc.remove_group(group_id_int, request.user.username)
ccnet_threaded_rpc.remove_group(group_id_int, request.user.username)
seafserv_threaded_rpc.remove_repo_group(group_id_int, None)
if request.user.org:
ccnet_rpc.remove_org_group(request.user.org.org_id,
ccnet_threaded_rpc.remove_org_group(request.user.org.org_id,
group_id_int)
except SearpcError, e:
return go_error(request, e.msg)
@@ -88,7 +88,7 @@ def group_quit(request, group_id):
return go_error(request, u'group id 不是有效参数')
try:
ccnet_rpc.quit_group(group_id_int, request.user.username)
ccnet_threaded_rpc.quit_group(group_id_int, request.user.username)
seafserv_threaded_rpc.remove_repo_group(group_id_int,
request.user.username)
except SearpcError, e:
@@ -105,14 +105,14 @@ def group_info(request, group_id):
# Check whether user belong to the group or admin
joined = False
groups = ccnet_rpc.get_groups(request.user.username)
groups = ccnet_threaded_rpc.get_groups(request.user.username)
for group in groups:
if group.id == group_id_int:
joined = True
if not joined and not request.user.is_staff:
return go_error(request, u'未加入该小组')
group = ccnet_rpc.get_group(group_id_int)
group = ccnet_threaded_rpc.get_group(group_id_int)
if not group:
return HttpResponseRedirect(reverse('group_list', args=[]))
@@ -121,7 +121,7 @@ def group_info(request, group_id):
else:
is_staff = False
members = ccnet_rpc.get_group_members(group_id_int)
members = ccnet_threaded_rpc.get_group_members(group_id_int)
managers = []
common_members = []
for member in members:
@@ -166,7 +166,7 @@ def group_members(request, group_id):
if not check_group_staff(group_id_int, request.user):
return go_permission_error(request, u'只有小组管理员有权管理小组')
group = ccnet_rpc.get_group(group_id_int)
group = ccnet_threaded_rpc.get_group(group_id_int)
if not group:
return HttpResponseRedirect(reverse('group_list', args=[]))
@@ -190,13 +190,13 @@ def group_members(request, group_id):
if request.user.org:
for member_name in member_name_dict.keys():
if not ccnet_rpc.org_user_exists(request.user.org.org_id,
if not ccnet_threaded_rpc.org_user_exists(request.user.org.org_id,
member_name):
err_msg = u'当前企业不存在 %s 用户' % member_name
return go_error(request, err_msg)
else:
try:
ccnet_rpc.group_add_member(group_id_int,
ccnet_threaded_rpc.group_add_member(group_id_int,
request.user.username,
member_name)
except SearpcError, e:
@@ -208,13 +208,13 @@ def group_members(request, group_id):
return go_error(request, err_msg)
else:
try:
ccnet_rpc.group_add_member(group_id_int,
ccnet_threaded_rpc.group_add_member(group_id_int,
request.user.username,
member_name)
except SearpcError, e:
return go_error(request, e.msg)
members = ccnet_rpc.get_group_members(group_id_int)
members = ccnet_threaded_rpc.get_group_members(group_id_int)
contacts = Contact.objects.filter(user_email=request.user.username)
return render_to_response('group/group_manage.html', {
@@ -249,7 +249,7 @@ def group_remove_member(request, group_id, user_name):
except ValueError:
return go_error(request, u'group id 不是有效参数')
try:
ccnet_rpc.group_remove_member(group_id_int, request.user.username,
ccnet_threaded_rpc.group_remove_member(group_id_int, request.user.username,
user_name)
seafserv_threaded_rpc.remove_repo_group(group_id_int, user_name)
except SearpcError, e:
@@ -263,13 +263,13 @@ def group_share_repo(request, repo_id, group_id, from_email):
"""
# Check whether group exists
group = ccnet_rpc.get_group(group_id)
group = ccnet_threaded_rpc.get_group(group_id)
if not group:
return go_error(request, u'共享失败:小组不存在')
# Check whether user belong to the group
joined = False
groups = ccnet_rpc.get_groups(request.user.username)
groups = ccnet_threaded_rpc.get_groups(request.user.username)
for group in groups:
if group.props.id == group_id:
joined = True
@@ -285,13 +285,13 @@ def group_unshare_repo(request, repo_id, group_id, from_email):
"""
# Check whether group exists
group = ccnet_rpc.get_group(group_id)
group = ccnet_threaded_rpc.get_group(group_id)
if not group:
return go_error(request, u'共享失败:小组不存在')
# Check whether user belong to the group
joined = False
groups = ccnet_rpc.get_groups(from_email)
groups = ccnet_threaded_rpc.get_groups(from_email)
for group in groups:
if group.props.id == group_id:
joined = True

View File

@@ -6,7 +6,7 @@ from django.shortcuts import render_to_response, get_object_or_404
from django.template import Context, RequestContext
from django.contrib.auth.decorators import login_required
from seaserv import ccnet_rpc, get_binding_peerids
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_binding_peerids
from pysearpc import SearpcError
from forms import ProfileForm
@@ -18,7 +18,7 @@ from seahub.contacts.models import Contact
def list_userids(request):
peer_list = []
try:
peers = ccnet_rpc.get_peers_by_email(request.user.username)
peers = ccnet_threaded_rpc.get_peers_by_email(request.user.username)
except:
peers = None
@@ -30,7 +30,7 @@ def logout_relay(request):
peer_id = request.GET.get('peer_id', '')
try:
ccnet_rpc.remove_one_binding(request.user.username, peer_id)
ccnet_threaded_rpc.remove_one_binding(request.user.username, peer_id)
except SearpcError, e:
return go_error(request, e.msg)
@@ -76,7 +76,7 @@ def user_profile(request, user):
err_msg = ''
try:
user_check = ccnet_rpc.get_emailuser(user)
user_check = ccnet_threaded_rpc.get_emailuser(user)
except:
user_check = None

View File

@@ -9,7 +9,7 @@ from auth.decorators import login_required
from django.contrib import messages
from django.contrib.sites.models import Site, RequestSite
from pysearpc import SearpcError
from seaserv import seafserv_threaded_rpc, get_repo, ccnet_rpc
from seaserv import seafserv_threaded_rpc, get_repo, ccnet_rpc, ccnet_threaded_rpc
from forms import RepoShareForm
from models import AnonymousShare
@@ -63,7 +63,7 @@ def share_repo(request):
group_name = to_email.split(' ')[0]
group_creator = to_email.split(' ')[1]
# get all the groups the user joined
groups = ccnet_rpc.get_groups(request.user.username)
groups = ccnet_threaded_rpc.get_groups(request.user.username)
find = False
for group in groups:
# for every group that user joined, if group name and
@@ -117,7 +117,7 @@ def share_admin(request):
if not repo:
continue
group_id = group_repo.props.group_id
group = ccnet_rpc.get_group(int(group_id))
group = ccnet_threaded_rpc.get_group(int(group_id))
if not group:
continue
repo.props.shared_email = group.props.group_name

View File

@@ -10,7 +10,7 @@ from django.template.loader import render_to_string
from django.utils.hashcompat import sha_constructor
from django.utils.translation import ugettext_lazy as _
from seaserv import ccnet_rpc, get_ccnetuser
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_ccnetuser
SHA1_RE = re.compile('^[a-f0-9]{40}$')
@@ -162,7 +162,7 @@ class RegistrationManager(models.Manager):
if profile.activation_key_expired():
ccnetuser = get_ccnetuser(userid=profile.emailuser_id)
if not ccnetuser.is_active:
ccnet_rpc.remove_emailuser(ccnetuser.username)
ccnet_threaded_rpc.remove_emailuser(ccnetuser.username)
class RegistrationProfile(models.Model):
"""

View File

@@ -1,7 +1,7 @@
import service
from service import cclient, ccnet_rpc, monitor_rpc, seafserv_rpc, \
seafserv_threaded_rpc
seafserv_threaded_rpc, ccnet_threaded_rpc
from service import translate_peerid, translate_msgtime, translate_groupid, \
translate_userid, translate_msgtime2, translate_time_sec, \
translate_time_usec, get_peer_avatar_url, get_user_avatar_url, \

View File

@@ -112,6 +112,7 @@ else:
pool = ccnet.ClientPool(CCNET_CONF_PATH)
ccnet_rpc = ccnet.CcnetRpcClient(pool, req_pool=True)
ccnet_threaded_rpc = ccnet.CcnetThreadedRpcClient(pool, req_pool=True)
monitor_rpc = seafile.MonitorRpcClient(pool)
seafserv_rpc = seafile.ServerRpcClient(pool, req_pool=True)
seafserv_threaded_rpc = seafile.ServerThreadedRpcClient(pool, req_pool=True)
@@ -122,7 +123,7 @@ def translate_userid(user_id):
try:
user = user_db[user_id]
except:
user = ccnet_rpc.get_user(user_id)
user = ccnet_threaded_rpc.get_user(user_id)
if user:
user_db[user_id] = user
else:
@@ -137,7 +138,7 @@ def translate_userid_simple(user_id):
try:
user = user_db[user_id]
except:
user = ccnet_rpc.get_user(user_id)
user = ccnet_threaded_rpc.get_user(user_id)
if user:
user_db[user_id] = user
else:
@@ -192,7 +193,7 @@ def get_peer_avatar_url(peer_id):
try:
user = user_db[peer.props.user_id]
except:
user = ccnet_rpc.get_user(user_id)
user = ccnet_threaded_rpc.get_user(user_id)
if user:
user_db[user_id] = user
else:
@@ -203,7 +204,7 @@ def get_user_avatar_url(user_id):
try:
user = user_db[user_id]
except:
user = ccnet_rpc.get_user(user_id)
user = ccnet_threaded_rpc.get_user(user_id)
if user:
user_db[user_id] = user
else:
@@ -217,7 +218,7 @@ def translate_groupid(group_id):
try:
group = group_db[group_id]
except:
group = ccnet_rpc.get_group(group_id)
group = ccnet_threaded_rpc.get_group(group_id)
if group:
group_db[group_id] = group
else:
@@ -279,7 +280,7 @@ def get_peers_by_myrole(myrole):
return peers
def get_users():
user_ids = ccnet_rpc.list_users()
user_ids = ccnet_threaded_rpc.list_users()
if not user_ids:
return []
users = []
@@ -287,26 +288,26 @@ def get_users():
# too handle the ending '\n'
if user_id == '':
continue
user = ccnet_rpc.get_user(user_id)
user = ccnet_threaded_rpc.get_user(user_id)
users.append(user)
return users
def get_user(user_id):
user = ccnet_rpc.get_user(user_id)
user = ccnet_threaded_rpc.get_user(user_id)
return user
def get_ccnetuser(username=None, userid=None):
# Get emailuser from db
if username:
emailuser = ccnet_rpc.get_emailuser(username)
emailuser = ccnet_threaded_rpc.get_emailuser(username)
if userid:
emailuser = ccnet_rpc.get_emailuser_by_id(userid)
emailuser = ccnet_threaded_rpc.get_emailuser_by_id(userid)
if not emailuser:
return None
# Check whether is business account
org = ccnet_rpc.get_org_by_user(emailuser.email)
org = ccnet_threaded_rpc.get_org_by_user(emailuser.email)
emailuser.org = org
# And convert to ccnetuser
@@ -317,7 +318,7 @@ def get_ccnetuser(username=None, userid=None):
def get_groups():
"""Get group object list. """
group_ids = ccnet_rpc.list_groups()
group_ids = ccnet_threaded_rpc.list_groups()
if not group_ids:
return []
groups = []
@@ -325,13 +326,13 @@ def get_groups():
# too handle the ending '\n'
if group_id == '':
continue
group = ccnet_rpc.get_group(group_id)
group = ccnet_threaded_rpc.get_group(group_id)
groups.append(group)
return groups
def get_group(group_id):
group = ccnet_rpc.get_group(group_id)
group = ccnet_threaded_rpc.get_group(group_id)
if not group:
return None
group.members = group.props.members.split(" ")
@@ -385,7 +386,7 @@ def get_branches(repo_id):
def get_binding_peerids(email):
"""Get peer ids of a given email"""
try:
peer_ids = ccnet_rpc.get_binding_peerids(email)
peer_ids = ccnet_threaded_rpc.get_binding_peerids(email)
except SearpcError:
return []
@@ -422,4 +423,4 @@ def check_group_staff(group_id_int, user_or_username):
if isinstance(user_or_username, CcnetUser):
user_or_username = user_or_username.username
return ccnet_rpc.check_group_staff(group_id_int, user_or_username)
return ccnet_threaded_rpc.check_group_staff(group_id_int, user_or_username)

View File

@@ -18,7 +18,7 @@ from auth.decorators import login_required
from auth.forms import AuthenticationForm, PasswordResetForm, SetPasswordForm, \
PasswordChangeForm
from auth.tokens import default_token_generator
from seaserv import ccnet_rpc, get_groups, get_users, get_repos, \
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_groups, get_users, get_repos, \
get_repo, get_commits, get_branches, \
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, get_ccnetuser, \
get_group_repoids, check_group_staff
@@ -69,7 +69,7 @@ def validate_emailuser(emailuser):
"""
try:
user = ccnet_rpc.get_emailuser(emailuser)
user = ccnet_threaded_rpc.get_emailuser(emailuser)
except:
user = None
@@ -97,7 +97,7 @@ def check_shared_repo(request, repo_id):
if repo.props.id == repo_id:
return True
groups = ccnet_rpc.get_groups(request.user.username)
groups = ccnet_threaded_rpc.get_groups(request.user.username)
# for every group that user joined...
for group in groups:
# ...get repo ids in that group, and check whether repo ids contains that repo id
@@ -545,7 +545,7 @@ def myhome(request):
contacts = Contact.objects.filter(user_email=email)
# my groups
groups = ccnet_rpc.get_groups(email)
groups = ccnet_threaded_rpc.get_groups(email)
groups_manage = []
groups_join = []
for group in groups:
@@ -815,13 +815,13 @@ def sys_useradmin(request):
if not request.user.is_staff:
raise Http404
users = ccnet_rpc.get_emailusers(-1,-1)
users = ccnet_threaded_rpc.get_emailusers(-1,-1)
for user in users:
if user.props.id == request.user.id:
user.is_self = True
# TODO: may add new is_org_user rpc
user.is_org_user = True if ccnet_rpc.get_org_by_user(user.email) else False
user.is_org_user = True if ccnet_threaded_rpc.get_org_by_user(user.email) else False
return render_to_response(
'sys_useradmin.html', {
@@ -834,7 +834,7 @@ def org_useradmin(request):
if not request.user.org.is_staff:
raise Http404
users = ccnet_rpc.get_org_emailusers(request.user.org.url_prefix,
users = ccnet_threaded_rpc.get_org_emailusers(request.user.org.url_prefix,
0, sys.maxint)
for user in users:
@@ -864,7 +864,7 @@ def user_info(request, email):
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(email)
try:
peers = ccnet_rpc.get_peers_by_email(email)
peers = ccnet_threaded_rpc.get_peers_by_email(email)
for peer in peers:
if not peer:
continue
@@ -919,7 +919,7 @@ def user_remove(request, user_id):
ccnetuser = get_ccnetuser(userid=int(user_id))
if ccnetuser.org:
ccnet_rpc.remove_org_user(ccnetuser.org.org_id, ccnetuser.username)
ccnet_threaded_rpc.remove_org_user(ccnetuser.org.org_id, ccnetuser.username)
ccnetuser.delete()
if request.user.is_staff:
@@ -983,7 +983,7 @@ def user_add(request):
if request.user.org:
org_id = request.user.org.org_id
ccnet_rpc.add_org_user(org_id, email, 0)
ccnet_threaded_rpc.add_org_user(org_id, email, 0)
if hasattr(settings, 'EMAIL_HOST'):
send_user_add_mail(request, email, password)
@@ -1020,7 +1020,7 @@ def sys_group_admin(request):
current_page = 1
per_page = 25
groups_plus_one = ccnet_rpc.get_all_groups(per_page * (current_page -1),
groups_plus_one = ccnet_threaded_rpc.get_all_groups(per_page * (current_page -1),
per_page +1)
groups = groups_plus_one[:per_page]
@@ -1043,7 +1043,7 @@ def sys_org_admin(request):
if not request.user.is_staff:
raise Http404
orgs = ccnet_rpc.get_all_orgs(0, sys.maxint)
orgs = ccnet_threaded_rpc.get_all_orgs(0, sys.maxint)
return render_to_response('sys_org_admin.html', {
'orgs': orgs,
@@ -1061,7 +1061,7 @@ def org_group_admin(request):
current_page = 1
per_page = 25
groups_plus_one = ccnet_rpc.get_org_groups (request.user.org.org_id,
groups_plus_one = ccnet_threaded_rpc.get_org_groups (request.user.org.org_id,
per_page * (current_page -1),
per_page +1)
@@ -1095,7 +1095,7 @@ def org_remove(request, org_id):
# TODO: Remove repos in org's groups
ccnet_rpc.remove_org(org_id_int)
ccnet_threaded_rpc.remove_org(org_id_int)
return HttpResponseRedirect(reverse('sys_org_admin'))
@@ -1106,11 +1106,11 @@ def org_info(request):
org = request.user.org
org_members = ccnet_rpc.get_org_emailusers(org.url_prefix, 0, sys.maxint)
org_members = ccnet_threaded_rpc.get_org_emailusers(org.url_prefix, 0, sys.maxint)
for member in org_members:
member.short_username = member.email.split('@')[0]
groups = ccnet_rpc.get_org_groups(org.org_id, 0, sys.maxint)
groups = ccnet_threaded_rpc.get_org_groups(org.org_id, 0, sys.maxint)
return render_to_response('org_info.html', {
'org': org,