def _getAllUsers(): """Returns a list of all valid users. """ from soc.models.user import User gen = lambda: User.all().filter('status =', 'valid') return interactive.deepFetch(gen)
def _getAllStudents(): """Returns a generator of all active students. """ from soc.models.student import Student gen = lambda: Student.all().filter('status = ', 'active') return interactive.deepFetch(gen)
def _getAllOrgAdmins(): """Returns a generator of all active mentors. """ from soc.models.org_admin import OrgAdmin gen = lambda: OrgAdmin.all().filter('status = ', 'active') return interactive.deepFetch(gen)
def _getAllMentors(): """Returns a generator of all active mentors. """ from soc.models.mentor import Mentor gen = lambda: Mentor.all().filter('status = ', 'active') return interactive.deepFetch(gen)
def _getAllMentors(): """Returns a generator of all active mentors. """ from soc.models.mentor import Mentor gen = lambda: Mentor.all().filter('status = ', 'active') return interactive.deepFetch(gen)
def _getAllUsers(): """Returns a list of all valid users. """ from soc.models.user import User gen = lambda: User.all().filter('status =', 'valid') return interactive.deepFetch(gen)
def _getAllStudents(): """Returns a generator of all active students. """ from soc.models.student import Student gen = lambda: Student.all().filter('status = ', 'active') return interactive.deepFetch(gen)
def _getAllOrgAdmins(): """Returns a generator of all active mentors. """ from soc.models.org_admin import OrgAdmin gen = lambda: OrgAdmin.all().filter('status = ', 'active') return interactive.deepFetch(gen)
def downloadStudentForms(options): # TODO(nathaniel): Get these imports at top-level just like any others. from google.appengine.ext import db from soc.views.helper import lists from soc.modules.gsoc.models import profile from soc.modules.gsoc.models import program as program_model if not options.program_path: parser.error('--program is required') program = program_model.GSoCProgram.get_by_key_name(options.program_path) if not program: print 'Could not find program "%s"' % options.program_path return def QueryGen(): query = profile.GSoCStudentInfo.all() query.filter('number_of_projects', 1) query.filter('program', program) return query outputdir = os.path.abspath(options.outputdir) if not os.path.exists(outputdir): os.mkdir(outputdir) if not os.path.isdir(outputdir): print "Could not create output dir: %s" % outputdir print "Fetching StudentInfo..." students = [i for i in interactive.deepFetch(QueryGen) if i.tax_form] keys = lists.collectParentKeys(students) keys = list(set(keys)) prefetched = {} print "Fetching Profile..." for i in xrange(0, len(keys), 100): chunk = keys[i:i+100] entities = db.get(chunk) prefetched.update(dict((i.key(), i) for i in entities if i)) lists.distributeParentKeys(students, prefetched) for student in students: form = student.tax_form _, ext = os.path.splitext(form.filename) path = os.path.join(outputdir, student.parent().link_id + ext) dst = open(path, "w") src = form.open() shutil.copyfileobj(src, dst) print "Downloading form to '%s'..." % path print 'Done.'
def convertProposals(org): """Convert all proposals for the specified organization. Args: org: the organization for which all proposals will be converted """ from soc.logic.models.student_proposal import logic as proposal_logic from soc.logic.models.student_project import logic as project_logic proposals = proposal_logic.getProposalsToBeAcceptedForOrg(org) print "accepting %d proposals, with %d slots" % (len(proposals), org.slots) for proposal in proposals: fields = { 'link_id': 't%i' % (int(time.time()*100)), 'scope_path': proposal.org.key().id_or_name(), 'scope': proposal.org, 'program': proposal.program, 'student': proposal.scope, 'title': proposal.title, 'abstract': proposal.abstract, 'mentor': proposal.mentor, } project = project_logic.updateOrCreateFromFields(fields, silent=True) fields = { 'status':'accepted', } proposal_logic.updateEntityProperties(proposal, fields, silent=True) fields = { 'status': ['new', 'pending'], 'org': org, } querygen = lambda: proposal_logic.getQueryForFields(fields) proposals = [i for i in interactive.deepFetch(querygen, batchSize=10)] print "rejecting %d proposals" % len(proposals) fields = { 'status': 'rejected', } for proposal in proposals: proposal_logic.updateEntityProperties(proposal, fields, silent=True)
def convertProposals(org): """Convert all proposals for the specified organization. Args: org: the organization for which all proposals will be converted """ from soc.logic.models.student_proposal import logic as proposal_logic from soc.logic.models.student_project import logic as project_logic proposals = proposal_logic.getProposalsToBeAcceptedForOrg(org) print "accepting %d proposals, with %d slots" % (len(proposals), org.slots) for proposal in proposals: fields = { 'link_id': 't%i' % (int(time.time()*100)), 'scope_path': proposal.org.key().id_or_name(), 'scope': proposal.org, 'program': proposal.program, 'student': proposal.scope, 'title': proposal.title, 'abstract': proposal.abstract, 'mentor': proposal.mentor, } project = project_logic.updateOrCreateFromFields(fields, silent=True) fields = { 'status':'accepted', } proposal_logic.updateEntityProperties(proposal, fields, silent=True) fields = { 'status': ['new', 'pending'], 'org': org, } querygen = lambda: proposal_logic.getQueryForFields(fields) proposals = [i for i in interactive.deepFetch(querygen, batchSize=10)] print "rejecting %d proposals" % len(proposals) fields = { 'status': 'rejected', } for proposal in proposals: proposal_logic.updateEntityProperties(proposal, fields, silent=True)
def downloadStudentForms(options): from google.appengine.ext import db from soc.views.helper import lists as list_helper from soc.modules.gsoc.models.profile import GSoCStudentInfo q = lambda: GSoCStudentInfo.all().filter('number_of_projects', 1) outputdir = os.path.abspath(options.outputdir) if not os.path.exists(outputdir): os.mkdir(outputdir) if not os.path.isdir(outputdir): print "Could not create output dir: %s" % outputdir print "Fetching StudentInfo..." students = list(i for i in interactive.deepFetch(q) if i.tax_form) keys = list_helper.collectParentKeys(students) keys = list(set(keys)) prefetched = {} print "Fetching Profile..." for i in xrange(0, len(keys), 100): chunk = keys[i:i+100] entities = db.get(chunk) prefetched.update(dict((i.key(), i) for i in entities if i)) list_helper.distributeParentKeys(students, prefetched) countries = ['United States'] us_students = [i for i in students if i.parent().res_country in countries] for student in us_students: form = student.tax_form _, ext = os.path.splitext(form.filename) path = os.path.join(outputdir, student.parent().link_id + ext) dst = open(path, "w") src = form.open() shutil.copyfileobj(src, dst) print "Downloading form to '%s'..." % path print "Done."
def wrapped(): gen = lambda: model.all() it = interactive.deepFetch(gen) entities = [(i.key().id_or_name(), i) for i in it] return dict(entities)
def wrapped(): it = interactive.deepFetch(gen) entities = [(i.key().id_or_name(), i) for i in it] return dict(entities)
def downloadStudentForms(options): from google.appengine.ext import db from soc.views.helper import lists as list_helper from soc.modules.gci.models.profile import GCIProfile from soc.modules.gci.models.profile import GCIStudentInfo from soc.modules.gci.models.program import GCIProgram from soc.modules.gci.models.score import GCIScore if not options.program_path: print "--program_path or -p option is required" program = GCIProgram.get_by_key_name(options.program_path) outputdir = os.path.abspath(options.outputdir) if not os.path.exists(outputdir): os.mkdir(outputdir) if not os.path.isdir(outputdir): print "Could not create output dir: %s" % outputdir q = lambda: GCIScore.all().filter("program =", program) print "Fetching GCIScore..." scores = list(i for i in interactive.deepFetch(q)) keys = list_helper.collectParentKeys(scores) keys = list(set(keys)) prefetched = {} print "Fetching Profile..." for i in xrange(0, len(keys), 100): chunk = keys[i:i + 100] entities = db.get(chunk) prefetched.update(dict((i.key(), i) for i in entities if i)) profiles = prefetched.values() list_helper.distributeParentKeys(scores, prefetched) keys = list_helper.collectKeys(GCIProfile.student_info, entities) keys = list(set(keys)) prefetched = {} print "Fetching StudentInfo..." for i in xrange(0, len(keys), 100): chunk = keys[i:i + 100] entities = db.get(chunk) prefetched.update(dict((i.key(), i) for i in entities if i)) studentInfos = prefetched.values() list_helper.distributeKeys(GCIProfile.student_info, profiles, prefetched) i = 0 while i < len(profiles): try: profile = profiles[i] consent_form = profile.student_info.consent_form student_id_form = profile.student_info.student_id_form if not consent_form or not student_id_form: print "At least one form missing from %s" % profile.link_id else: _saveForm(profile, consent_form, 'consent-form', outputdir) _saveForm(profile, consent_form, 'student-id-form', outputdir) except Exception, e: continue i += 1
def wrapped(): it = interactive.deepFetch(gen) entities = [(i.key().id_or_name(), i) for i in it] return dict(entities)
def downloadStudentForms(options): from google.appengine.ext import db from soc.views.helper import lists as list_helper from soc.modules.gci.models.profile import GCIProfile from soc.modules.gci.models.profile import GCIStudentInfo from soc.modules.gci.models.program import GCIProgram from soc.modules.gci.models.score import GCIScore if not options.program_path: print "--program_path or -p option is required" program = GCIProgram.get_by_key_name(options.program_path) outputdir = os.path.abspath(options.outputdir) if not os.path.exists(outputdir): os.mkdir(outputdir) if not os.path.isdir(outputdir): print "Could not create output dir: %s" % outputdir q = lambda: GCIScore.all().filter("program =", program) print "Fetching GCIScore..." scores = list(i for i in interactive.deepFetch(q)) keys = list_helper.collectParentKeys(scores) keys = list(set(keys)) prefetched = {} print "Fetching Profile..." for i in xrange(0, len(keys), 100): chunk = keys[i:i+100] entities = db.get(chunk) prefetched.update(dict((i.key(), i) for i in entities if i)) profiles = prefetched.values() list_helper.distributeParentKeys(scores, prefetched) keys = list_helper.collectKeys(GCIProfile.student_info, entities) keys = list(set(keys)) prefetched = {} print "Fetching StudentInfo..." for i in xrange(0, len(keys), 100): chunk = keys[i:i+100] entities = db.get(chunk) prefetched.update(dict((i.key(), i) for i in entities if i)) studentInfos = prefetched.values() list_helper.distributeKeys(GCIProfile.student_info, profiles, prefetched) i = 0 while i < len(profiles): try: profile = profiles[i] consent_form = profile.student_info.consent_form student_id_form = profile.student_info.student_id_form if not consent_form or not student_id_form: print "At least one form missing from %s" % profile.link_id else: _saveForm(profile, consent_form, 'consent-form', outputdir) _saveForm(profile, consent_form, 'student-id-form', outputdir) except Exception, e: continue i += 1
def wrapped(): gen = lambda: model.all() it = interactive.deepFetch(gen) entities = [(i.key().name(), i) for i in it] return dict(entities)