def read_from_file(file_path): with open(file_path, "r") as file: file_list = list(file) index = 0 number_of_candidates = int(file_list[index].strip()) index += 1 for i in range(0, number_of_candidates): number, name = file_list[index].strip().split(",") index += 1 # we consider candidates to be [0;m-1], not [1;m] number = int(number) - 1 number_of_voters, vote_count, unique_ballots = file_list[index].strip().split(",") index += 1 number_of_voters = int(number_of_voters) cost_vector = file_list[index].strip().split(",") cost_vector = [int(cost) for cost in cost_vector] index += 1 preference_list = [] for line in file_list[index:]: preference_order = line.strip().split(",") preference_order = [int(x) for x in preference_order] preference_count = preference_order[0] for count in range(preference_count): preference_list.append(model.Preference([x - 1 for x in preference_order[1:]])) return model.Profile(number_of_voters, number_of_candidates, preference_list), cost_vector
def post(self): profile = model.Profile.from_user(users.get_current_user()) if profile == None: profile = model.Profile(owner=users.get_current_user()) profile.paypal_email = self.request.get('paypal_email') profile.put() data = {'profile': profile, 'message': 'Profile updated'} util.add_user(self.request.uri, data) path = os.path.join(os.path.dirname(__file__), 'templates/profile.htm') self.response.out.write(template.render(path, data))
def run_random_generation(candidates): for i in range(100): print(str(i)) cost_vector = create_cost_distribution(candidates, 0) voters = 5000 candidates = candidates bases = voters swaps = 0 directory = "random" preference_order = model.Preference([x for x in range(0, candidates)]) list_of_preferences = [] for x in range(voters): list_of_preferences.append(preference_order.generate_random_preference_order()) profile = model.Profile(number_of_candidates=candidates, number_of_voters=voters, preference_list=list_of_preferences) data.apply_noise(profile, swaps, 1) if not os.path.exists(directory): os.makedirs(directory) data.write_to_file(os.path.join(directory, "{}_v{}:c{}:b{}:s{}".format(i, voters, candidates, bases, swaps) + ".txt"), profile, cost_vector)
def on_post(self, req, resp): data = json.loads(req.stream.read().decode('utf-8')) try: existing_user = session.query(model.User).\ filter(model.User.email == data['email']).\ first() if existing_user is not None: req.context['result'] = {'error': "duplicate_user"} return except SQLAlchemyError: session.rollback() raise try: if 'nick_name' not in data: data['nick_name'] = "" user = model.User(email=data['email'], password=auth.get_hashed_password( data['password']), first_name=data['first_name'], last_name=data['last_name'], nick_name=data['nick_name'], sex=data['gender'], short_info=data["short_info"]) session.add(user) session.commit() except SQLAlchemyError: session.rollback() req.context['result'] = { 'error': "Nelze vytvořit uživatele, kontaktuj prosím orga." } raise try: profile = model.Profile( user_id=user.id, addr_street=data['addr_street'], addr_city=data['addr_city'], addr_zip=data['addr_zip'], addr_country=data['addr_country'].lower(), school_name=data['school_name'], school_street=data['school_street'], school_city=data['school_city'], school_zip=data['school_zip'], school_country=data['school_country'].lower(), school_finish=int(data['school_finish']), tshirt_size=data['tshirt_size'].upper(), referral=data.get('referral', "{}")) except BaseException: session.delete(user) session.commit() req.context['result'] = { 'error': "Nelze vytvořit profil, kontaktuj prosím orga." } raise try: session.add(profile) session.commit() except SQLAlchemyError: session.rollback() raise try: notify = model.UserNotify( user=user.id, auth_token=util.user_notify.new_token(), notify_eval=data['notify_eval'] if 'notify_eval' in data else True, notify_response=data['notify_response'] if 'notify_response' in data else True, notify_ksi=data['notify_ksi'] if 'notify_ksi' in data else True, notify_events=data['notify_events'] if 'notify_events' in data else True, ) except BaseException: session.delete(profile) session.commit() session.delete(user) session.commit() req.context['result'] = { 'error': "Nelze vytvořit notifikační záznam, kontaktuj prosím orga." } raise try: session.add(notify) session.commit() except SQLAlchemyError: session.rollback() raise try: util.mail.send( user.email, '[KSI-WEB] Potvrzení registrace do Korespondenčního semináře ' 'z informatiky', 'Ahoj!<br/>Vítáme tě v Korespondenčním ' 'semináři z informatiky Fakulty informatiky Masarykovy ' 'univerzity. Nyní můžeš začít řešit naplno. Stačí se přihlásit' ' na https://ksi.fi.muni.cz pomocí e-mailu a zvoleného hesla. ' 'Přejeme ti hodně úspěchů při řešení semináře!<br/><br/>KSI') except SQLAlchemyError: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stderr) session.close() req.context['result'] = {}
def replicate_preference_order(preference_order, number_of_times): list_of_preferences = [] for i in range(number_of_times): list_of_preferences.append(preference_order.get_copy()) return model.Profile(number_of_times, len(preference_order.preference_order), list_of_preferences)