Exemple #1
0
 def build_list_from_user_input(repo, user_input):
     """
     Creates a new measure from a user inputted line
     :type repo: ConvertRepo
     :type user_input: str
     :rtype: list[ConvertMeasure]
     """
     user_input = user_input.strip()
     # Search through the line for digits, pull them amount as a preliminary amount and strip the rest of the line.
     # TODO: add calculation?
     preliminary_amount_str = Commons.get_digits_from_start_or_end(
         user_input)
     if preliminary_amount_str is None:
         raise ConvertException("Cannot find amount.")
     preliminary_amount_value = float(preliminary_amount_str)
     # Remove amountString from userInput
     if user_input.startswith(preliminary_amount_str):
         user_input = user_input[len(preliminary_amount_str):]
     else:
         user_input = user_input[:-len(preliminary_amount_str)]
     # Loop all units, see which might match userInput with prefixes. Building a list of valid measures for input.
     new_measure_list = []
     for unit_obj in repo.get_full_unit_list():
         prefix_obj = unit_obj.get_prefix_from_user_input(user_input)
         if prefix_obj is False:
             continue
         prefix_multiplier = 1
         if prefix_obj is not None:
             prefix_multiplier = prefix_obj.multiplier
         new_amount = preliminary_amount_value * prefix_multiplier
         new_measure = ConvertMeasure(new_amount, unit_obj)
         new_measure_list.append(new_measure)
     # If list is still empty, throw an exception.
     if len(new_measure_list) == 0:
         raise ConvertException("Unrecognised unit.")
     # Return list of matching measures.
     return new_measure_list
Exemple #2
0
def test_get_digits_from_start_or_end(string, digits):
    assert Commons.get_digits_from_start_or_end(string) == digits