def _export_groups(self, zf, university): with Export(zf, 'groups.csv', 'group_members.csv', 'group_files.csv', 'group_subjects.csv') \ as (groups, group_members, group_files, group_subjects): for group in meta.Session.query(Group)\ .filter(Group.location_id.in_([loc.id for loc in university.flatten]))\ .filter_by(deleted_by=None): groups.writerow(['/'.join(group.location.path[1:]), group.created.email.email, group.group_id, group.year.strftime('%Y'), group.title, group.page, str(group.moderators), str(group.wants_to_watch_subjects), str(group.admins_approve_members), group.private_files_lock_date.strftime(FMT_DATE) if group.private_files_lock_date else '', str(group.mailinglist_moderated)]) for membership in group.members: group_members.writerow(['/'.join(group.location.path[1:]), group.group_id, membership.user.email.email]) for file in group.files: if not file.isNullFile() and not file.isDeleted(): group_files.writerow(['/'.join(group.location.path[1:]), group.group_id] + self._format_file_row(file)) for subject in group.watched_subjects: if not subject.isDeleted(): # skip deleted subjects group_subjects.writerow(['/'.join(subject.location.path[1:]), subject.subject_id, '/'.join(group.location.path[1:]), group.group_id]) if group.logo: zf.writestr('group_logos/%s.png' % group.group_id, prepare_image(group.logo))
def _export_users(self, zf, university): users = set() for group in meta.Session.query(Group)\ .filter(Group.location_id.in_([loc.id for loc in university.flatten]))\ .filter_by(deleted_by=None): for member in group.members: users.add(member.user) users.update(meta.Session.query(User).filter_by(location=university)) with Export(zf, 'users.csv') as users_csv: for user in users: users_csv.writerow([user.email.email, str(user.email.confirmed), user.fullname, user.password, user.site_url, user.description, user.receive_email_each, user.phone_number if user.phone_number else '', str(user.phone_confirmed), str(user.sms_messages_remaining), user.openid if user.openid else '', str(user.facebook_id) if user.facebook_id else '', str(user.profile_is_public), user.hidden_blocks, user.ignored_events, user.type, getattr(user, "teacher_position", None), str(getattr(user, "teacher_verified", None)), ]) if user.logo: zf.writestr('user_logos/%s.png' % user.email.email, prepare_image(user.logo))
def export_university(self, university_id): try: university_id = int(university_id) except ValueError: pass university = LocationTag.get(university_id) result = StringIO() from zipfile import ZipFile, ZIP_DEFLATED zf = ZipFile(result, "a", ZIP_DEFLATED, False) if university.logo: zf.writestr('logo.png', prepare_image(university.logo)) self._export_subjects(zf, university) self._export_groups(zf, university) self._export_users(zf, university) zf.close() response.headers['Content-Length'] = len(result.getvalue()) response.headers['Content-Disposition'] = 'attachment; filename="%s.zip"' %\ university.title_short.encode('transliterate').encode('ascii', 'ignore') response.headers['Content-Type'] = 'application/zip' result.seek(0) return result