示例#1
0
def main():
    """Main CLI function
    :returns: TODO

    """
    global debug_mode
    global start_time

    cli_args = __parse_arguments()

    if cli_args.version:
        status("Current version {0}".format(__version__))
        return 0

    messages.debug_mode = cli_args.verbose
    messages.quiet = cli_args.quiet
    messages.logger = cli_args.logger

    action = ""

    # While True is always a bad idea
    while action.upper() != "E":
        action = input(MAIN_MENU)
        if action == "1":
            create_record()
        elif action == "2":
            print_to_console()
        elif action == "3":
            update_record()
        elif action == "4":
            delete_record()
        elif action.upper() != "E":
            print("Sin acción en {action}".format(action=action))
示例#2
0
def main():
    """Main CLI function
    :returns: TODO

    """
    global debug_mode
    global start_time

    cli_args = __parse_arguments()

    if cli_args.version:
        status("Current version {0}".format(__version__))
        return 0

    messages.debug_mode = cli_args.verbose
    messages.quiet = cli_args.quiet
    messages.logger = cli_args.logger

    menu_choice = 0
    print_menu()
    while menu_choice != 5:
        menu_choice = int(input("Ingresa un numero (1-5): "))
        if menu_choice == 1:
            procesar1()
        elif menu_choice == 2:
            procesar2('samples/kroA100.txt')
        elif menu_choice == 3:
            procesar2('samples/kroA150.txt')
        elif menu_choice == 4:
            procesar2('samples/kroA200.txt')
        elif menu_choice != 5:
            print_menu()
示例#3
0
文件: main.py 项目: Mike325/triplets
def main():
    """Main function
    """
    global debug_mode
    global start_time

    cli_args = __parse_arguments()

    if cli_args.version:
        status("Current version {0}".format(__version__))
        return 0

    messages.debug_mode = cli_args.verbose
    messages.quiet = cli_args.quiet
    messages.logger = cli_args.logger

    start_time = time.time()

    if cli_args.test == "1M" or cli_args.test == "all":
        _multi_length(cli_args.override)

    if cli_args.test == "100" or cli_args.test == "all":
        _same_size_length(cli_args.override)

    final_time = str(time.time() - start_time)
    status("Final time {0}".format(final_time))
示例#4
0
    def _update_field(self, register):
        """Update a specific field of the register

        :register: TODO
        :returns: TODO

        """
        status("Please select the field you want to update")
        valid = False
        while not valid:
            answer = input("""Please select a valid option:
                    1) Last name
                    2) Address
                    3) Cellphone
                    4) Email
                    5) Social Network
                    6) All
                    : """)
            try:
                value = int(answer)
                if value < 1 or value > 6:
                    error("Not a valid option {0}".format(value))
                    continue
                hashvalue = self.hashfunction(register.name)
                if value == 6:
                    register.last_name = input("Enter last name: ")
                    register.address = input("Enter address: ")
                    register.cellphone = input("Enter cellphone: ")
                    register.email = input("Enter email address: ")
                    register.social_network = input("Enter social network: ")
                else:
                    if value == 1:
                        self.last_names[register.last_name].remove(hashvalue)
                        register.last_name = input("enter last name: ")
                        if register.last_name not in self.last_names:
                            self.last_names[register.last_name] = [hashvalue]
                        else:
                            self.last_names[register.last_name].append(
                                hashvalue)
                    elif value == 2:
                        register.address = input("Enter address: ")
                    elif value == 3:
                        self.numbers.pop(register.cellphone, None)
                        register.cellphone = input("Enter cellphone: ")
                        self.numbers[register.cellphone] = hashvalue
                    elif value == 4:
                        register.email = input("Enter email address: ")
                    elif value == 5:
                        register.social_network = input(
                            "Enter social network: ")

                valid = True

            except Exception:
                error("Please select a valid option from the menu from 1 to 6")

        return register
示例#5
0
    def insert(self, register=None):
        """TODO: Docstring for insert.

        :register: TODO
        :returns: TODO

        """
        if register is None:
            valid = False
            while not valid:
                name = input("Enter name: ")
                last_name = input("Enter last name: ")
                address = input("Enter address: ")
                cellphone = input("Enter cellphone: ")
                if cellphone in self.numbers:
                    error("This cellphone is already in use")
                    continue
                valid = True
                email = input("Enter email address: ")
                social_network = input("Enter social network: ")
            register = self.Register(name, last_name, address, cellphone,
                                     email, social_network)
        rc = False
        start = time()

        hashvalue = self.hashfunction(register.name)

        isEmpty = False

        # TODO: This must be changed for the tree
        if len(self.container[hashvalue]) == 0:
            isEmpty = True

        # TODO: This must be changed for the tree
        self.container[hashvalue][register.name] = register

        self.numbers[register.cellphone] = hashvalue
        if register.last_name not in self.last_names:
            self.last_names[register.last_name] = [hashvalue]
        else:
            self.last_names[register.last_name].append(hashvalue)

        if not isEmpty:
            self.collisions[hashvalue] += 1

        verbose("Collisions in container {0}: {1}".format(
            hashvalue, self.collisions[hashvalue]))

        rc = True
        status("Register inserted")

        end = time()
        verbose("Insertion time {0}".format(end - start))

        return rc
示例#6
0
def main():
    """Main CLI function
    :returns: TODO

    """
    global debug_mode
    global start_time

    cli_args = __parse_arguments()

    if cli_args.version:
        status("Current version {0}".format(__version__))
        return 0

    messages.debug_mode = cli_args.verbose
    messages.quiet = cli_args.quiet
    messages.logger = cli_args.logger

    if cli_args.hash == 1:
        hashfunction = hashAscii
    else:
        hashfunction = hashBase64

    verbose("Hash function {0}".format(repr(hashfunction.__name__)))

    action = ""

    table = HashDataBase(hashfunction=hashfunction, json_db=cli_args.json)

    # While True is always a bad idea
    while action.upper() != "E":
        action = input(MAIN_MENU)
        if action == "1":
            table.insert()
        elif action == "2":
            result = table.search()
            if result is not None and len(result) == 0:
                status("Register: {0}".format(result))
            elif result is not None and len(result) > 0:
                for item in result:
                    status("Register: {0}".format(item))
            else:
                error("Element was not found")
        elif action == "3":
            table.update()
        elif action == "4":
            table.delete()
        elif action == "5":
            for item in table.container:
                for name, register in item.items():
                    status("Register: {0}".format(register))
        elif action.upper() != "E":
            status("Sin acción en {action}".format(action=action))
示例#7
0
def get_array(filename="", size=None):
    """TODO: Docstring for get_array.

    :size: TODO
    :returns: TODO

    """

    if filename == "":
        filename = get_filename(size) + ".txt"

    array = None
    with open(filename, "r") as data:
        status("Searching in {0}".format(filename))
        array = data.read()
        array = array.split(",")

    return array
示例#8
0
    def update(self, register=None, name=None, last_name=None, cellphone=None):
        """TODO: Docstring for insert.

        :register: TODO
        :returns: TODO

        """
        selected_type = -1
        if register is None and name is None and last_name is None and cellphone is None:
            parameter, selected_type = self._select_search_type()
        elif register is not None:
            parameter = register.name
            selected_type = 0
        elif name is not None:
            parameter = name
            selected_type = 0
        elif last_name is not None:
            parameter = last_name
            selected_type = 1
        elif cellphone is not None:
            parameter = cellphone
            selected_type = 2

        rc = False
        start = time()

        hashvalue = self.hashfunction(parameter, selected_type)
        # register = self.container[hashvalue].search(parameter, selected_type)
        if parameter in self.container[hashvalue]:
            register = self.container[hashvalue][parameter]
            register = self._update_field(register)
            self.container[hashvalue][parameter] = register
            status("Register updated")
        else:
            # if register is None:
            error("{0} doesn't exists".format(parameter, selected_type))
        # else:
        #     pass

        end = time()
        verbose("Update time {0}".format(end - start))

        return rc
示例#9
0
    def _delete_register(self, register, hashvalue):
        """TODO: Docstring for _delete_register.

        :register: TODO
        :returns: TODO

        """
        # TODO: This must be changed for the tree
        self.container[hashvalue].pop(register.name, None)
        if self.collisions[hashvalue] > 0:
            self.collisions[hashvalue] -= 1

        self.numbers.pop(register.cellphone, None)
        for container in self.last_names[register.last_name]:
            if container == hashvalue:
                self.last_names[register.last_name].remove(hashvalue)
                break

        verbose("Collisions in container {0}: {1}".format(
            hashvalue, self.collisions[hashvalue]))
        status("Register deleted: {0}".format(register))
示例#10
0
    def start(self):
        """Look for the next triplet of numbers
        :returns: Tuple, Returns a tuple with a vector of the 3 numbers and the
                        updated dictionary, And empty vector is return if no
                        triplet was found
        """
        start_time = time.time()
        while not self.done:
            self.done = True
            for item in range(-100, 101):
                # Check whether or not we have elements in the next number
                if self.tree[item] > 0:
                    verbose("Looking triplet for {0} with {1} elements".format(
                        item, self.tree[item]))
                    usable = self._find_triplet(item, item * -1)
                    if not usable:
                        verbose("No triplet found for {0}".format(item))
                else:
                    verbose("Skipping {0}: {1}".format(item, self.tree[item]))

        end_time = time.time()

        self.time = end_time - start_time

        status("End time of {0}. {1} different triplets found".format(
            self.time, len(self.triplets)))

        # Save time by not doing this shit if is not debug mode
        if messages.debug_mode:
            total = 0
            verbose("Unpaird numbers")
            for key in range(-100, 101):
                value = self.tree[key]
                if value > 0:
                    total += value
                    verbose("Key: {0};      Value: {1}".format(key, value))
            verbose("Total {0}".format(total))