mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 10:58:33 +00:00
admin export users to excel
Optimize database query when get user's name and contact email
This commit is contained in:
@@ -296,74 +296,92 @@ def sys_useradmin_export_excel(request):
|
|||||||
_("Space Usage") + "(MB)", _("Space Quota") + "(MB)",
|
_("Space Usage") + "(MB)", _("Space Quota") + "(MB)",
|
||||||
_("Create At"), _("Last Login"), _("Admin"), _("LDAP(imported)"),]
|
_("Create At"), _("Last Login"), _("Admin"), _("LDAP(imported)"),]
|
||||||
|
|
||||||
|
# only operate 100 users for every `for` loop
|
||||||
|
looped = 0
|
||||||
|
limit = 100
|
||||||
data_list = []
|
data_list = []
|
||||||
|
|
||||||
last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users])
|
while looped < len(users):
|
||||||
for user in users:
|
|
||||||
|
|
||||||
# populate name and contact email
|
current_users = users[looped:looped+limit]
|
||||||
populate_user_info(user)
|
|
||||||
|
|
||||||
# populate space usage and quota
|
last_logins = UserLastLogin.objects.filter(username__in=[x.email \
|
||||||
MB = get_file_size_unit('MB')
|
for x in current_users])
|
||||||
|
user_profiles = Profile.objects.filter(user__in=[x.email \
|
||||||
|
for x in current_users])
|
||||||
|
|
||||||
_populate_user_quota_usage(user)
|
for user in current_users:
|
||||||
if user.space_usage > 0:
|
# populate name and contact email
|
||||||
try:
|
user.contact_email = ''
|
||||||
space_usage_MB = round(float(user.space_usage) / MB, 2)
|
user.name = ''
|
||||||
except Exception as e:
|
for profile in user_profiles:
|
||||||
logger.error(e)
|
if profile.user == user.email:
|
||||||
space_usage_MB = '--'
|
user.contact_email = profile.contact_email
|
||||||
else:
|
user.name = profile.nickname
|
||||||
space_usage_MB = ''
|
|
||||||
|
|
||||||
if user.space_quota > 0:
|
# populate space usage and quota
|
||||||
try:
|
MB = get_file_size_unit('MB')
|
||||||
space_quota_MB = round(float(user.space_quota) / MB, 2)
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(e)
|
|
||||||
space_quota_MB = '--'
|
|
||||||
else:
|
|
||||||
space_quota_MB = ''
|
|
||||||
|
|
||||||
# populate user last login time
|
_populate_user_quota_usage(user)
|
||||||
user.last_login = None
|
if user.space_usage > 0:
|
||||||
for last_login in last_logins:
|
try:
|
||||||
if last_login.username == user.email:
|
space_usage_MB = round(float(user.space_usage) / MB, 2)
|
||||||
user.last_login = last_login.last_login
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
if user.is_active:
|
space_usage_MB = '--'
|
||||||
status = _('Active')
|
|
||||||
else:
|
|
||||||
status = _('Inactive')
|
|
||||||
|
|
||||||
create_at = tsstr_sec(user.ctime) if user.ctime else ''
|
|
||||||
last_login = user.last_login.strftime("%Y-%m-%d %H:%M:%S") if \
|
|
||||||
user.last_login else ''
|
|
||||||
|
|
||||||
is_admin = _('Yes') if user.is_staff else ''
|
|
||||||
ldap_import = _('Yes') if user.source == 'LDAPImport' else ''
|
|
||||||
|
|
||||||
if is_pro:
|
|
||||||
if user.role:
|
|
||||||
if user.role == GUEST_USER:
|
|
||||||
role = _('Guest')
|
|
||||||
elif user.role == DEFAULT_USER:
|
|
||||||
role = _('Default')
|
|
||||||
else:
|
|
||||||
role = user.role
|
|
||||||
else:
|
else:
|
||||||
role = _('Default')
|
space_usage_MB = ''
|
||||||
|
|
||||||
row = [user.email, user.name, user.contact_email, status, role,
|
if user.space_quota > 0:
|
||||||
space_usage_MB, space_quota_MB, create_at,
|
try:
|
||||||
last_login, is_admin, ldap_import]
|
space_quota_MB = round(float(user.space_quota) / MB, 2)
|
||||||
else:
|
except Exception as e:
|
||||||
row = [user.email, user.name, user.contact_email, status,
|
logger.error(e)
|
||||||
space_usage_MB, space_quota_MB, create_at,
|
space_quota_MB = '--'
|
||||||
last_login, is_admin, ldap_import]
|
else:
|
||||||
|
space_quota_MB = ''
|
||||||
|
|
||||||
data_list.append(row)
|
# populate user last login time
|
||||||
|
user.last_login = None
|
||||||
|
for last_login in last_logins:
|
||||||
|
if last_login.username == user.email:
|
||||||
|
user.last_login = last_login.last_login
|
||||||
|
|
||||||
|
if user.is_active:
|
||||||
|
status = _('Active')
|
||||||
|
else:
|
||||||
|
status = _('Inactive')
|
||||||
|
|
||||||
|
create_at = tsstr_sec(user.ctime) if user.ctime else ''
|
||||||
|
last_login = user.last_login.strftime("%Y-%m-%d %H:%M:%S") if \
|
||||||
|
user.last_login else ''
|
||||||
|
|
||||||
|
is_admin = _('Yes') if user.is_staff else ''
|
||||||
|
ldap_import = _('Yes') if user.source == 'LDAPImport' else ''
|
||||||
|
|
||||||
|
if is_pro:
|
||||||
|
if user.role:
|
||||||
|
if user.role == GUEST_USER:
|
||||||
|
role = _('Guest')
|
||||||
|
elif user.role == DEFAULT_USER:
|
||||||
|
role = _('Default')
|
||||||
|
else:
|
||||||
|
role = user.role
|
||||||
|
else:
|
||||||
|
role = _('Default')
|
||||||
|
|
||||||
|
row = [user.email, user.name, user.contact_email, status, role,
|
||||||
|
space_usage_MB, space_quota_MB, create_at,
|
||||||
|
last_login, is_admin, ldap_import]
|
||||||
|
else:
|
||||||
|
row = [user.email, user.name, user.contact_email, status,
|
||||||
|
space_usage_MB, space_quota_MB, create_at,
|
||||||
|
last_login, is_admin, ldap_import]
|
||||||
|
|
||||||
|
data_list.append(row)
|
||||||
|
|
||||||
|
# update `looped` value when `for` loop finished
|
||||||
|
looped += limit
|
||||||
|
|
||||||
wb = write_xls('users', head, data_list)
|
wb = write_xls('users', head, data_list)
|
||||||
if not wb:
|
if not wb:
|
||||||
|
Reference in New Issue
Block a user