Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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))
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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'] = {}
Exemplo n.º 5
0
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)