Ejemplo n.º 1
0
class TestTree(TestCase):
    def setUp(self):
        self.root = Step(None, (0, 0), "O")
        self.leaf1 = self.root.add_leaf(1, ".")
        self.leaf11 = self.leaf1.add_leaf(1, ".")
        self.leaf113 = self.leaf11.add_leaf(3, ".")
        self.leaf1132 = self.leaf113.add_leaf(2, ".")

    def test_terminal(self):
        self.assertSequenceEqual([self.leaf1132],
                                 self.root.get_terminal_leafs())

    def test_loop(self):
        self.leaf11324 = self.leaf1132.add_leaf(4, 'X')
        self.assertIsNone(self.leaf11324)

    def test_traverse(self):
        for node in self.leaf1132.go_upstream():
            print(node.coords, node.depth, node.value)

    def test_search(self):
        self.assertIsNone(self.root.search_by_value('X'))
        self.assertSequenceEqual(self.root.search_by_value("O"), [self.root])
        self.assertSetEqual(
            set(self.root.search_by_value(".")),
            {self.leaf1, self.leaf11, self.leaf113, self.leaf1132})

    def test_print(self):
        self.assertEqual(str(self.leaf11), "(0, -2) - .")
 def run(self, iter=None):
     i = iter
     if self.time.expression:
         runtime = eval(self.time.saved, {}, {'i': i})
     else:
         runtime = self.time.saved
     Step.pause(self, runtime)
Ejemplo n.º 3
0
    def handle_route(route, station2, wayList, step, way):
        # todo 方向
        if route.prevStation is not None:
            step += 1
            stepO = Step(route.prevStation, route.line)

            if route.prevStation == station2:
                way.appendStep(stepO)
                Manager.minStep = min(step, Manager.minStep)
                wayList.append(way)
                return

            if step >= Manager.minStep:
                return

            newWay = copy.copy(way)
            newWay.appendStep(stepO)
            find


        else :


        if route.nextStation == station2:
            step = Step(route.nextStation, route.line)
            way.appendStep(step)
            return
        if route.prevStation
 def __init__(self, _super):
     Step.__init__(self, _super)
     self.Valve = LabelEntry(self.box, 0, 0, "Valve:", width=16)
     self.Valve.expression = False
     self.State = LabelEntry(self.box, 0, 2, "State:", width=16)
     self.State.expression = False
     self.entries = [self.Valve, self.State]
     self.steptype = "ValveStep"
 def __init__(self, _super):
     Step.__init__(self, _super)
     self.box.config(text = self.parameter)
     self.temp = LabelEntry(self.box, 0, 2, "Temperature (C): ")
     self.time = LabelEntry(self.box, 0, 0, "Time (s):")
     self.entries.append(self.time)
     self.entries.append(self.temp)
     self.steptype = "TempStep"
 def __init__(
     self, _super
 ):  # super is a reference to the procedure holding the item instance
     Step.__init__(self, _super)
     self.steptype = "PauseStep"
     self.time = LabelEntry(self.box, 0, 0, "Time (s):")
     self.time.expression = None
     self.entries.append(self.time)
 def run(self, cleanup = None, iter = None, time = None):
     self.setPoint(self.temp.saved)
     self.box.config(bg='green')
     self.timerWidget.config(text="Waiting to reach set point...")
     while abs(self.getTemp() - self.temp.saved) > 1:
         self.event.wait(1)
         self.checkIfCancel()
         print("Equilibrating...")
     Step.pause(self, self.time.saved)
Ejemplo n.º 8
0
 def __init__(self, id, request, state):
     Step.__init__(self, id, request, state)
     self.results = [self._is_not_installed(),
                     util.check_python_version((2, 3, 0, '', 0)),
                     util.check_dir_exists(config.data_dir),
                     util.check_is_writable(config.data_dir),
                     util.check_python_module_exists('pywsgi'),
                     util.check_python_module_exists('SpiffGuard'),
                     util.check_python_module_exists('SpiffIntegrator'),
                     util.check_python_module_exists('SpiffSignal'),
                     util.check_python_module_exists('SpiffWarehouse'),
                     util.check_python_module_exists('SpiffWikiMarkup')]
     self.failed  = False in [r for n, r, e in self.results]
 def saveEntries(self, type="float", iters=None):
     timeEntry = self.time.get()
     if not iters:
         time = float(timeEntry)
         if time < 0:
             raise ValueError(
                 "Invalid pause time: " + self.timeEntry +
                 "; you cannot pause for a negative amount of time.")
         self.time.expression = False
     else:
         self.recursiveIterCheck(iters, timeEntry, self.inputCheckForPause,
                                 ())
         self.time.expression = True
     Step.saveEntries(self)
Ejemplo n.º 10
0
    def __init__(self, size):
        self.size = size
        self.steps = []

        # set first step IC to all zeros
        cols = []
        for i in range(size):
            cols.append([])
            for j in range(size):
                cols[i].append(0)

        init_step = Step(self.size)
        init_step.set_init_cond(cols)
        self.steps.append(init_step)
Ejemplo n.º 11
0
 def step_of_current(self, passedTime=None, holdingTime=0.0):
     return Step(
         self.curState.stateId,
         copy.copy(self.curState.apSet),
         passedTime=passedTime,
         holdingTime=holdingTime
     )
Ejemplo n.º 12
0
 def _next_step(self, passedtime, duration):
     key = tuple([v.get_value() for v in self._vars.values()])
     enabled_cmds = self._state_cmd_map[key]
     next_move = self._next_move(passedtime, enabled_cmds)
     if passedtime + next_move.holding_time > duration:
         next_move = NextMove(passedtime)
     apset = self._state_ap_map[key]
     return Step(apset, next_move)
    def __init__(self, _super):
        Step.__init__(self, _super)
        self.box.config(text="Pump")
        self.rate = LabelEntry(self.box, 0, 0, "Rate (cycles/s):", width=3)
        self.nCycles = LabelEntry(self.box, 0, 2, "Number of Cycles:", width=9)
        self.steptype = "PumpStep"

        valvesbox = LabelFrame(self.box)
        valvesbox.grid(row=1, column=0, columnspan=10)
        self.valveEntries = []
        for valve in (1, 2, 3):
            self.valveEntries.append(
                LabelEntry(valvesbox,
                           1,
                           2 * valve,
                           " --> Valve " + str(valve) + ": ",
                           width=2))
        self.entries = [self.rate, self.nCycles] + self.valveEntries
Ejemplo n.º 14
0
def assign_steps(routes):
    for route in routes['routes']:
        for leg in route['legs']:
            for step in leg['steps']:
                distance = step['distance']['value']
                duration = step['duration']['value']
                latitude = step['end_location']['lat']
                longitude = step['end_location']['lng']
                s = Step(distance, duration, latitude, longitude)
                steps.append(s)
 def run(self, cleanup=None, iter=None):
     valves = []
     states = []
     for j in range(len(self.Valve.saved)):
         i = iter
         if self.Valve.expression:
             valves.append(eval(self.Valve.saved[j], {}, {'i': i}))
         else:
             valves.append(int(self.Valve.saved[j]))
         if self.State.expression:
             states.append(eval(self.State.saved[j], {}, {'i': i}))
         else:
             states.append(int(self.State.saved[j]))
         if states[-1] == 1:
             Step.btndict[valves[-1]].config(bg="green")
         else:  # the saved state is 0
             Step.btndict[valves[-1]].config(bg="gray")
     self.setValves(valves, states)
     Step.pause(self, 0)
     self.checkIfCancel()
    def run(self, iter=None, time=None):
        i = iter

        valves = []
        for v in self.valveEntries:
            if v.expression:
                valves.append(eval(v.saved, {}, {'i': i}))
            else:
                valves.append(v.saved)
        self.pump = self.specifyPump(valves[0], valves[1], valves[2])
        ValveController.pPumps.remove(self.pump)
        self.changeValveColor("Blue")
        if self.nCycles.expression:
            nCycles = eval(self.nCycles.saved, {}, {'i': i})
        else:
            nCycles = self.nCycles.saved
        if self.rate.expression:
            rate = eval(self.rate.saved, {}, {'i': i})
        else:
            rate = self.rate.saved
        self.pump.forward(rate, nCycles)
        if nCycles == -1:
            Step.pause(self, float('Inf'), cleanup=self.cleanup)
        else:
            Step.pause(self,
                       float(nCycles) / float(rate),
                       cleanup=self.cleanup)
        Step.pause(self, time, cleanup=self.cleanup)
        self.changeValveColor("gray")
Ejemplo n.º 17
0
 def put_step(self, command):
     #PutStep <name> <description> <cost_in_hours> <name_of_goal>
     elements = command.split()
     goal_name = elements[1].lower()
     name = elements[2].lower()
     description = ""
     cost = int(elements[3])
     step = Step.build_new_step(name, description, cost)
     # Find the goal in life and add this step to it.
     success = False
     for goal in self.life.get_goals():
         if goal.name == goal_name:
             goal.put_step(step)
             success = True
     if success == False:
         print "Specified goal not found!"
Ejemplo n.º 18
0
 def InsertRows(self, pos, numRows=1):
     if (pos == -1):
         pos = 0
     newPos = pos + 1
     if (self.steps.size() == 0):
         lastLabel = 0
     else:
         lastLabel = pos
     newLabel = lastLabel + 1
     try:
         self.steps.append(Step())
     except ARM.ARMException, errorText:
         dlg = wx.MessageDialog(self.GetView(), str(errorText), 'Add Step',
                                wx.OK | wx.ICON_ERROR)
         dlg.ShowModal()
         dlg.Destroy()
         return
Ejemplo n.º 19
0
    def __update_raw_tests(self):
        self.raw_test.scenarios.append(
            Scenario(url=self.url,
                     feature_name=self.feature_name,
                     text="Example test scenario"))
        for choice in self.cases[0].selected_expands:
            self.raw_test.scenarios[0].steps.append(
                Step(step_type=choice.parent.step_type,
                     feature_name=self.feature_name,
                     x_path=choice.parent.xpath,
                     input_type=choice.parent.input_type,
                     cases=[],
                     label="Element " + choice.parent.name +
                     " has value <choice{}>".format(choice.parent.id)))

        for case in self.cases:
            for i, choice in enumerate(case.selected_expands):
                self.raw_test.scenarios[0].steps[i].cases.append(choice.choice)
Ejemplo n.º 20
0
def pipeline_from_config_file(config_file):
    """
    Create a Pipeline instance from a ConfigObj/INI configuration file 
    `config_file` which specifies the Pipeline steps, data directories
    etc.
    """
    # Do we have a spec file? If so, do parameter and input/output key 
    # validation as well. If not keep going.
    spec_file = utilities.find_spec_file(Pipeline)
    
    # Now do the actual parsing and, if we do have a spec file, validate as 
    # well.
    parsed = config_parser.loads(config_file, 
                                 specfile=spec_file)['pipeline']
    
    # Create a Pipeline instance with no steps, we will add them later.
    pipe = Pipeline(name=parsed['name'],
                    system=parsed['system'],
                    log_level=parsed.get('log_level', DEFAULT_LOG_LEVEL),
                    local_logs=parsed.get('local_log_mode', DEFAULT_LOCAL_LOGS))
    
    # The only thing that requires special handling is the steps array. 
    # Here we have to create Step instances of the appropriate class and
    # pass the appropriate Step config file to them.
    # Also, as part of the "steps" list, we have hints on which data each 
    # Step produces and which data it consumes. In order to transfer these
    # pieces of data in-memory between steps we have a simple architecture.
    # We have a dictionary at the Pipeline level where data is put and
    # possibly updated. This is the clipboard. Then before executing each 
    # Step, the data the Step needs in input is put in Step.inbox which
    # is a list. Elements are put in that list in the order they are defined
    # in that Step section of the Pipeline configuration file (inbox 
    # parameter). After the Step completes, data from Step.outbox is 
    # fetched and put in the clipboard. Data in Step.outbox is assumed to 
    # be in the order defined in that Step section of the Pipeline 
    # configuration file (outbox parameter).
    steps = [Step.from_parsed_config(x, pipe) for x in parsed['steps']]
    
    # Finally update the pipe.steps list. We did this so that the Step 
    # instances could make use in their initialization, of whatever they
    # needed to pull from the Pipeline object they belong to.
    pipe.configure(steps)
    return(pipe)
Ejemplo n.º 21
0
def pipeline_from_config_file(config_file):
    """
    Create a Pipeline instance from a ConfigObj/INI configuration file 
    `config_file` which specifies the Pipeline steps, data directories
    etc.
    """
    # Do we have a spec file? If so, do parameter and input/output key
    # validation as well. If not keep going.
    spec_file = utilities.find_spec_file(Pipeline)

    # Now do the actual parsing and, if we do have a spec file, validate as
    # well.
    parsed = config_parser.loads(config_file, specfile=spec_file)['pipeline']

    # Create a Pipeline instance with no steps, we will add them later.
    pipe = Pipeline(name=parsed['name'],
                    system=parsed['system'],
                    log_level=parsed.get('log_level', DEFAULT_LOG_LEVEL),
                    local_logs=parsed.get('local_log_mode',
                                          DEFAULT_LOCAL_LOGS))

    # The only thing that requires special handling is the steps array.
    # Here we have to create Step instances of the appropriate class and
    # pass the appropriate Step config file to them.
    # Also, as part of the "steps" list, we have hints on which data each
    # Step produces and which data it consumes. In order to transfer these
    # pieces of data in-memory between steps we have a simple architecture.
    # We have a dictionary at the Pipeline level where data is put and
    # possibly updated. This is the clipboard. Then before executing each
    # Step, the data the Step needs in input is put in Step.inbox which
    # is a list. Elements are put in that list in the order they are defined
    # in that Step section of the Pipeline configuration file (inbox
    # parameter). After the Step completes, data from Step.outbox is
    # fetched and put in the clipboard. Data in Step.outbox is assumed to
    # be in the order defined in that Step section of the Pipeline
    # configuration file (outbox parameter).
    steps = [Step.from_parsed_config(x, pipe) for x in parsed['steps']]

    # Finally update the pipe.steps list. We did this so that the Step
    # instances could make use in their initialization, of whatever they
    # needed to pull from the Pipeline object they belong to.
    pipe.configure(steps)
    return (pipe)
def scrape_page(page_link):
    page_reponse = requests.get(page_link)
    page_soup = BeautifulSoup(page_reponse.text, "html.parser")

    try:
        image_url = page_soup.select_one(
            ".recipeGallerySegment .bigImg img")['src']

        if "without-watermark" not in image_url:
            global recipes_with_watermarks
            recipes_with_watermarks += 1
            return

        recipe_title = page_soup.select_one(
            ".recipeTitleSegment h1").text.strip()
        before_split = page_soup.select_one(".method .info .info").text.strip()

        recipe_preparation_time = int(re.findall("\d+", before_split)[0])
        if "min" in before_split:
            recipe_preparation_time = int(60 * recipe_preparation_time)
        elif "val" in before_split:
            recipe_preparation_time = int(60 * 60 * recipe_preparation_time)
        recipe_portion_amount = page_soup.select_one(".info").text.strip()
        if len(recipe_portion_amount) is 0:
            recipe_portion_amount = int(4)
        else:
            recipe_portion_amount = int(
                re.findall("\d+", recipe_portion_amount)[0])

        recipe_description = ''
        try:
            recipe_description = page_soup.select_one(
                ".authorsDescription").text.strip()
        except AttributeError:
            recipe_description = ''
            print('No description')

        amounts = page_soup.select(".ingredients .infoA table tr")
        recipe_products = []
        for amount in amounts:
            cells = amount.select("td")
            if len(cells) is 1:
                continue
            quantity = cells[0].text.strip()
            product_name = cells[1].text.strip()[0:30].strip()
            new_product = Product(product_name, quantity)
            recipe_products.append(new_product.__dict__)

        steps = page_soup.select(".infoA .description")
        recipe_steps = []
        for step in steps:
            step_text = step.select_one(".text")
            # print(step_text.text)
            new_step = Step(step_text.text)
            recipe_steps.append(new_step.__dict__)

        recipe_view_count = int(0)
        recipe_rating = int(0)
        recipe_votes_count = int(0)

        image_extension = image_url.split('.')[-1]
        image_fileName = ''
        image_name = ''
        while True:
            image_name = uuid.uuid4().hex
            image_fileName = image_name + "." + image_extension
            if not os.path.isfile("Photos/" + image_fileName):
                break

        opener = urllib.request.URLopener()
        opener.addheader(
            'User-Agent',
            'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405'
        )
        opener.retrieve(image_url, "Photos/" + image_fileName)
        # urllib.request.urlretrieve(image_url, "Photos/" + image_fileName)

        recipe_image = Photo(image_fileName)
        recipe_images = []
        recipe_images.append(recipe_image.__dict__)

        # Tags
        recipe_tags = []
        temp = Tag("grilio patiekalai")
        recipe_tags.append(temp.__dict__)

        tags = page_soup.select(".guidelinesSegment a")
        for tag in tags:
            if not "lamaistas" in tag.text:
                new_tag = Tag(tag.text)
                recipe_tags.append(new_tag.__dict__)

        new_recipe = Recipe(recipe_title, recipe_products, recipe_steps,
                            recipe_portion_amount, recipe_preparation_time,
                            recipe_description, recipe_view_count,
                            recipe_rating, recipe_votes_count, recipe_images,
                            recipe_tags)
        new_recipes.append(new_recipe.__dict__)
        print("Saved " + page_link + " " + str(len(new_recipes)))
    except Exception as e:
        print("Error " + str(e) + " || " + page_link)
Ejemplo n.º 23
0
 def setUp(self):
     self.root = Step(None, (0, 0), "O")
     self.leaf1 = self.root.add_leaf(1, ".")
     self.leaf11 = self.leaf1.add_leaf(1, ".")
     self.leaf113 = self.leaf11.add_leaf(3, ".")
     self.leaf1132 = self.leaf113.add_leaf(2, ".")
    def saveEntries(self, type="int", iters=None):
        rate = self.rate.get()
        cycles = self.nCycles.get()

        # Check if valve entries are ok for all loop iterations.
        valves = []
        allInt = True
        for v in self.valveEntries:
            v0 = v.get()
            valves.append(v0)
            try:
                v1 = int(v0)
                if v1 not in self.btndict:
                    raise ValueError(
                        v0 +
                        " in pump step is not a valid valve. Valid valves are "
                        + self.btndict["AvailablePinsStatement"] + ".")
                v.expression = False
            except:
                if not iters:
                    raise ValueError(
                        v0 +
                        " in pump step is not a valid valve. Valid valves are "
                        + self.btndict["AvailablePinsStatement"] + ".")
                else:  #check if valid expression fo valve
                    self.recursiveIterCheck(iters, v0,
                                            self.checkValidValveEntry, ())
                    v.expression = True
                    allInt = False
        if allInt:
            if len(set(valves)) < 3:
                raise ValueError("There are duplicate valve entries")
        else:
            self.recursiveIterCheck(iters, valves, self.checkDuplicateValves,
                                    ())

        try:
            rate1 = int(rate)
            if rate1 < 0:
                raise ValueError(
                    rate +
                    " is not a valid rate for a pump step. Rates must be positive integers."
                )
            self.rate.expression = False
        except:
            if not iters:
                raise ValueError(
                    rate +
                    " is not a valid rate for a pump step. Rates must be positive integers."
                )
            else:  #check if valid expression.
                self.recursiveIterCheck(iters, rate, self.checkValidRate, ())
                self.rate.expression = True

        try:
            try:
                cycles1 = int(cycles)
            except:
                if not iters:
                    raise ValueError(
                        cycles +
                        " is not a valid number of cycles for a pump step. The number of cycles must"
                        " be either a positive integer or -1 to pump indefinitely until interupted."
                    )
                else:  # check if valid expression
                    self.recursiveIterCheck(iters, cycles,
                                            self.checkValidCycles, ())
                    self.nCycles.expression = True
                    Step.saveEntries(self, type="int", iters=iters)
                    return

            if cycles1 == -1:
                if iters:
                    raise ValueError(
                        "Pump steps can pump indefinitely only if they"
                        " are the final step in a protocol.")
                else:
                    if hasattr(self, 'last') and not self.last:
                        raise ValueError(
                            "Pump steps can pump indefinitely only if they"
                            " are the final step in a protocol.")

            if cycles1 < -1:
                if iters:
                    raise ValueError(
                        cycles +
                        " is not a valid number of cycles for a pump step. The number of cycles must be"
                        " a positive integer.")
                else:
                    raise ValueError(
                        cycles +
                        " is not a valid number of cycles for a pump step. The number of cycles must be"
                        " a positive integer, or -1 on the final step of a protocol to pump indefinitely."
                    )
            self.nCycles.expression = False
        except ValueError as E:
            raise E

        Step.saveEntries(self, type="int", iters=iters)
Ejemplo n.º 25
0
    def plan_journey(self, from_location, to_station, time, departure):
        base_url = "journeys?lang=nl-NL&"
        time = "dateTime=" + time
        from_station = "&from=" + from_location
        to_station = "&to=" + to_station
        before = "&before=1"
        after = "&after=5"
        sequence = "&sequence=1"
        options = "&byFerry=true&bySubway=true&byBus=true&byTram=true&byTrain=true"
        search_type = "&searchType=" + departure

        url = self.url + base_url + time + from_station + to_station + before + after + sequence + options + search_type
        journeys = requests.get(url).json()
        print(url)
        steps = []
        first = True
        counter = 1
        destination_temp = ""
        end_time_temp = ""

        for part in journeys['journeys'][1]['legs']:
            last_stop = part['stops'][-1]['location']
            first_stop = part['stops'][0]['location']

            step = Step()
            if part['type'] == "continuous":
                if first:
                    step.kind = part['mode']['name'][0:5]
                    step.departure_location = first_stop['name']
                    if 'stopType' in last_stop:
                        step.arrival_location = last_stop[
                            'stopType'] + " " + last_stop['place'][
                                'name'] + last_stop['name']
                    else:
                        step.arrival_location = last_stop['place'][
                            'name'] + " " + last_stop['stationType']
                    step.departure_time = journeys['journeys'][1]['departure']
                    step.arrival_time = self.calculate_end_time(
                        journeys['journeys'][1]['departure'], part['duration'])
                    step.duration = part['duration']
                elif counter == len(journeys['journeys'][1]['legs']):
                    step.kind = part['mode']['name'][0:5]
                    step.departure_location = destination_temp
                    step.arrival_location = last_stop['place'][
                        'name'] + " " + last_stop['name']
                    step.departure_time = end_time_temp
                    step.arrival_time = journeys['journeys'][1]['arrival']
                    step.duration = part['duration']
                else:
                    step.kind = part['mode']['name'][0:5]
                    step.departure_location = destination_temp
                    if 'stopType' in last_stop:
                        step.arrival_location = last_stop['place'][
                            'name'] + " " + last_stop['stopType']
                    else:
                        step.arrival_location = last_stop['place'][
                            'name'] + " " + last_stop['stationType']
                    step.departure_time = end_time_temp
                    step.arrival_time = self.calculate_end_time(
                        end_time_temp, part['duration'])
                    step.duration = part['duration']
            else:
                end_time_temp = part['stops'][-1]['arrival']
                if part['mode']['type'] == 'train':
                    destination_temp = last_stop[
                        'stationType'] + " " + last_stop['name']
                    step.kind = part['mode']['name'] + " richting " + part[
                        'destination']
                    step.departure_location = first_stop[
                        'stationType'] + " " + first_stop['name']
                    step.arrival_location = last_stop[
                        'stationType'] + " " + last_stop['name']
                    step.departure_time = part['stops'][0]['departure']
                    step.arrival_time = part['stops'][-1]['arrival']
                    step.duration = self.calculate_duration(
                        part['stops'][-1]['arrival'],
                        part['stops'][0]['departure'])
                else:
                    destination_temp = last_stop['stopType'] + " " + last_stop[
                        'place']['name'] + " " + last_stop['name']
                    step.kind = part['mode']['name'] + " richting " + part[
                        'destination']
                    step.departure_location = first_stop[
                        'stopType'] + " " + first_stop['place'][
                            'name'] + " " + first_stop['name']
                    step.arrival_location = last_stop[
                        'stopType'] + " " + last_stop['place'][
                            'name'] + " " + last_stop['name']
                    step.departure_time = part['stops'][0]['departure']
                    step.arrival_time = part['stops'][-1]['arrival']
                    step.duration = self.calculate_duration(
                        part['stops'][-1]['arrival'],
                        part['stops'][0]['departure'])
            steps.append(step)
            counter += 1
            first = False
        return steps
Ejemplo n.º 26
0
class UsabilityContentHandler(ContentHandler,EntityResolver):
  def __init__(self):
    self.thePersonas = []
    self.theExternalDocuments = []
    self.theDocumentReferences = []
    self.theConceptReferences = []
    self.thePersonaCharacteristics = []
    self.theTaskCharacteristics = []
    self.theTasks = []
    self.theUseCases = []
    b = Borg()
    self.configDir = b.configDir
    self.resetPersonaAttributes()
    self.resetDocumentReferenceAttributes()
    self.resetConceptReferenceAttributes()
    self.resetPersonaCharacteristicAttributes()
    self.resetTaskCharacteristicAttributes()
    self.resetTaskAttributes()
    self.resetUseCaseAttributes()

  def resolveEntity(self,publicId,systemId):
    return self.configDir + '/usability.dtd'

  def personas(self):
    return self.thePersonas

  def externalDocuments(self):
    return self.theExternalDocuments

  def documentReferences(self):
    return self.theDocumentReferences

  def conceptReferences(self):
    return self.theConceptReferences

  def personaCharacteristics(self):
    return self.thePersonaCharacteristics

  def taskCharacteristics(self):
    return self.theTaskCharacteristics

  def tasks(self):
    return self.theTasks

  def usecases(self):
    return self.theUseCases

  def resetPersonaAttributes(self):
    self.inActivities = 0
    self.inAttitudes = 0
    self.inAptitudes = 0
    self.inMotivations = 0
    self.inSkills = 0
    self.inIntrinsic = 0
    self.inContextual = 0
    self.theName = ''
    self.theTags = []
    self.theType = ''
    self.theImage = ''
    self.isAssumptionPersona = False
    self.theActivities = ''
    self.theAptitudes = ''
    self.theMotivations = ''
    self.theSkills = ''
    self.theIntrinsic = ''
    self.theContextual = ''
    self.theEnvironmentProperties = []
    self.resetPersonaEnvironmentAttributes()

  def resetPersonaEnvironmentAttributes(self):
    self.theEnvironmentName = ''
    self.theRoles = []
    self.isDirect = True
    self.inNarrative = 0
    self.theNarrative = ''

  def resetExternalDocumentAttributes(self):
    self.theName = ''
    self.theVersion = ''
    self.theDate = ''
    self.theAuthors = ''
    self.inDescription = 0
    self.theDescription = ''

  def resetDocumentReferenceAttributes(self):
    self.inExcerpt = 0
    self.theName = ''
    self.theContributor = ''
    self.theDocument = ''
    self.theExcerpt = ''

  def resetConceptReferenceAttributes(self):
    self.inDescription = 0
    self.theName = ''
    self.theConcept = ''
    self.theObject = ''
    self.theDescription = ''

  def resetPersonaCharacteristicAttributes(self):
    self.thePersona = ''
    self.theBvName = ''
    self.theModalQualifier = ''
    self.inDefinition = 0
    self.theDefinition = ''
    self.theGrounds = []
    self.theWarrants = []
    self.theRebuttals = []

  def resetTaskCharacteristicAttributes(self):
    self.theTask = ''
    self.theModalQualifier = ''
    self.inDefinition = 0
    self.theDefinition = ''
    self.theGrounds = []
    self.theWarrants = []
    self.theRebuttals = []

  def resetTaskAttributes(self):
    self.theName = ''
    self.theTags = []
    self.theCode = ''
    self.theAuthor = ''
    self.isAssumptionTask = False
    self.inObjective = 0
    self.theObjective = ''
    self.theEnvironmentProperties = []
    self.resetTaskEnvironmentAttributes()

  def resetTaskEnvironmentAttributes(self):
    self.theEnvironmentName = ''
    self.inDependencies = 0
    self.inNarrative = 0
    self.inConsequences = 0
    self.inBenefits = 0
    self.theDependencies = ''
    self.theNarrative = ''
    self.theConsequences = ''
    self.theBenefits = ''
    self.theTaskPersonas = []
    self.theConcerns = []
    self.theConcernAssociations = []

  def resetUseCaseAttributes(self):
    self.theName = ''
    self.theTags = []
    self.theAuthor = ''
    self.theCode = ''
    self.inDescription = 0
    self.theDescription = ''
    self.theActors = []
    self.theEnvironmentProperties = []
    self.resetUseCaseEnvironmentAttributes()

  def resetUseCaseEnvironmentAttributes(self):
    self.theEnvironmentName = ''    
    self.inPreconditions = 0
    self.thePreconditions = ''
    self.inPostconditions = 0
    self.thePostconditions = ''
    self.theSteps = Steps()
    self.theCurrentStep = None
    self.theCurrentStepNo = 0
    self.theExcName = ''
    self.theExcType = ''
    self.theExcValue = ''
    self.theExcCat = ''
    self.inDefinition = 0
    self.theDefinition = ''

  def startElement(self,name,attrs):
    self.currentElementName = name
    if name == 'persona':
      self.theName = attrs['name']
      self.theType = attrs['type']
      self.theImage = attrs['image']
      if (attrs['assumption_persona'] == 'TRUE'):
        self.isAssumptionPersona = True
    elif name == 'persona_environment':
      self.theEnvironmentName = attrs['name']
      if (attrs['is_direct'] == 'FALSE'):
        self.isDirect = False
    elif name == 'persona_role':
      self.theRoles.append(attrs['name'])
    elif name == 'external_document':
      self.theName = attrs['name']
      self.theVersion = attrs['version']
      self.theDate = attrs['date']
      self.theAuthors = attrs['authors']
    elif name == 'document_reference':
      self.theName = attrs['name']
      self.theContributor = attrs['contributor']
      self.theDocument = attrs['document']
    elif name == 'concept_reference':
      self.theName = attrs['name']
      self.theConcept = attrs['concept']
      self.theObject = attrs['object']
    elif name == 'persona_characteristic':
      self.thePersona = attrs['persona']
      self.theBvName = u2s(attrs['behavioural_variable'])
      self.theModalQualifier = attrs['modal_qualifier'] 
    elif name == 'task_characteristic':
      self.theTask = attrs['task']
      self.theModalQualifier = attrs['modal_qualifier'] 
    elif name == 'grounds':
      refName = attrs['reference']
      refType = attrs['type']
      refArtifact = ''
      self.theGrounds.append((refName,'',refType))
    elif name == 'warrant':
      refName = attrs['reference']
      refType = attrs['type']
      refArtifact = ''
      self.theWarrants.append((refName,'',refType))
    elif name == 'rebuttal':
      refName = attrs['reference']
      refType = attrs['type']
      refArtifact = ''
      self.theRebuttals.append((refName,'',refType))
    elif name == 'task':
      self.theName = attrs['name']
      try:
        self.theCode = attrs['code']
      except KeyError:
        self.theCode = ''
      self.theAuthor = attrs['author']
      if (attrs['assumption_task'] == 'TRUE'):
        self.isAssumptionTask = True
    elif name == 'task_environment':
      self.theEnvironmentName = attrs['name']
    elif name == 'task_persona':
      self.theTaskPersonas.append((attrs['persona'],durationValue(attrs['duration']),frequencyValue(attrs['frequency']),attrs['demands'],attrs['goal_conflict']))
    elif name == 'task_concern':
      self.theConcerns.append(attrs['asset'])
    elif name == 'task_concern_association':
      self.theConcernAssociations.append((attrs['source_name'],a2s(attrs['source_nry']),attrs['link_name'],attrs['target_name'],a2s(attrs['target_nry'])))
    elif name == 'usecase':
      self.theName = attrs['name']
      self.theAuthor = attrs['author']
      self.theCode = attrs['code']
    elif name == 'actor':
      self.theActors.append(attrs['name'])
    elif name == 'usecase_environment':
      self.theEnvironmentName = attrs['name']
    elif name == 'step':
      self.theCurrentStepNo = attrs['number']
      self.theCurrentStep = Step(attrs['description'])
    elif name == 'exception':
      self.theExcName = attrs['name']
      self.theExcType = attrs['type']
      self.theExcValue = attrs['value']
      self.theExcCat = u2s(attrs['category'])
    elif name == 'activities':
      self.inActivities = 1
      self.theActivities = ''
    elif name == 'attitudes':
      self.inAttitudes = 1
      self.theAttitudes = ''
    elif name == 'aptitudes':
      self.inAptitudes = 1
      self.theAptitudes = ''
    elif name == 'motivations':
      self.inMotivations = 1
      self.theMotivations = ''
    elif name == 'skills':
      self.inSkills = 1
      self.theSkills = ''
    elif name == 'intrinsic':
      self.inIntrinsic = 1
      self.theIntrinsic = ''
    elif name == 'contextual':
      self.inContextual = 1
      self.theContextual = ''
    elif name == 'narrative':
      self.inNarrative = 1
      self.theNarrative = ''
    elif name == 'consequences':
      self.inConsequences = 1
      self.theConsequences = ''
    elif name == 'benefits':
      self.inBenefits = 1
      self.theBenefits = ''
    elif name == 'excerpt':
      self.inExcerpt = 1
      self.theExcerpt = ''
    elif name == 'description':
      self.inDescription = 1
      self.theDescription = ''
    elif name == 'definition':
      self.inDefinition = 1
      self.theDefinition = ''
    elif name == 'dependencies':
      self.inDependencies = 1
      self.theDependencies = ''
    elif name == 'objective':
      self.inObjective = 1
      self.theObjective = ''
    elif name == 'preconditions':
      self.inPreconditions = 1
      self.thePreconditions = ''
    elif name == 'postconditions':
      self.inPostconditions = 1
      self.thePostconditions = ''
    elif name == 'tag':
      self.theTags.append(attrs['name'])

  def characters(self,data):
    if self.inActivities:
      self.theActivities += data
    elif self.inAttitudes:
      self.theAttitudes += data
    elif self.inAptitudes:
      self.theAptitudes += data
    elif self.inMotivations:
      self.theMotivations += data
    elif self.inSkills:
      self.theSkills += data
    elif self.inIntrinsic:
      self.theIntrinsic += data
    elif self.inContextual:
      self.theContextual += data
    elif self.inConsequences:
      self.theConsequences += data
    elif self.inBenefits:
      self.theBenefits += data
    elif self.inExcerpt:
      self.theExcerpt += data
    elif self.inDescription:
      self.theDescription += data
    elif self.inDefinition:
      self.theDefinition += data
    elif self.inDependencies:
      self.theDependencies += data
    elif self.inObjective:
      self.theObjective += data
    elif self.inPreconditions:
      self.thePreconditions += data
    elif self.inPostconditions:
      self.thePostconditions += data
    elif self.inNarrative:
      self.theNarrative += data

  def endElement(self,name):
    if name == 'persona':
      p = PersonaParameters(self.theName,self.theActivities,self.theAttitudes,self.theAptitudes,self.theMotivations,self.theSkills,self.theIntrinsic,self.theContextual,self.theImage,self.isAssumptionPersona,self.theType,self.theTags,self.theEnvironmentProperties,{})
      self.thePersonas.append(p)
      self.resetPersonaAttributes()
    elif name == 'persona_environment':
      p = PersonaEnvironmentProperties(self.theEnvironmentName,self.isDirect,self.theNarrative,self.theRoles,{'narrative':{}})
      self.theEnvironmentProperties.append(p)
      self.resetPersonaEnvironmentAttributes()
    elif name == 'external_document':
      p = ExternalDocumentParameters(self.theName,self.theVersion,self.theDate,self.theAuthors,self.theDescription)
      self.theExternalDocuments.append(p)
      self.resetExternalDocumentAttributes()
    elif name == 'document_reference':
      p = DocumentReferenceParameters(self.theName,self.theDocument,self.theContributor,self.theExcerpt)
      self.theDocumentReferences.append(p)
      self.resetDocumentReferenceAttributes()
    elif name == 'concept_reference':
      p = ConceptReferenceParameters(self.theName,self.theConcept,self.theObject,self.theDescription)
      self.theConceptReferences.append(p)
      self.resetConceptReferenceAttributes()
    elif name == 'persona_characteristic':
      p = PersonaCharacteristicParameters(self.thePersona,self.theModalQualifier,self.theBvName,self.theDefinition,self.theGrounds,self.theWarrants,[],self.theRebuttals)
      self.thePersonaCharacteristics.append(p)
      self.resetPersonaCharacteristicAttributes()
    elif name == 'task_characteristic':
      p = TaskCharacteristicParameters(self.theTask,self.theModalQualifier,self.theDefinition,self.theGrounds,self.theWarrants,[],self.theRebuttals)
      self.theTaskCharacteristics.append(p)
      self.resetTaskCharacteristicAttributes()
    elif name == 'task':
      p = TaskParameters(self.theName,self.theCode,self.theObjective,self.isAssumptionTask,self.theAuthor,self.theTags,self.theEnvironmentProperties)
      self.theTasks.append(p)
      self.resetTaskAttributes()
    elif name == 'task_environment':
      p = TaskEnvironmentProperties(self.theEnvironmentName,self.theDependencies,self.theTaskPersonas,self.theConcerns,self.theConcernAssociations,self.theNarrative,self.theConsequences,self.theBenefits,{'narrative':{},'consequences':{},'benefits':{}})
      self.theEnvironmentProperties.append(p)
      self.resetTaskEnvironmentAttributes()
    elif name == 'exception':
      self.theCurrentStep.addException((self.theExcName,self.theExcType,self.theExcValue,self.theExcCat,self.theDefinition))
    elif name == 'step':
      self.theCurrentStep.setTags(self.theTags)
      self.theSteps.append(self.theCurrentStep)
      self.theCurrentStep = None
    elif name == 'usecase_environment':
      p = UseCaseEnvironmentProperties(self.theEnvironmentName,self.thePreconditions,self.theSteps,self.thePostconditions)
      self.theEnvironmentProperties.append(p)
      self.resetUseCaseEnvironmentAttributes()
    elif name == 'usecase':
      p = UseCaseParameters(self.theName,self.theAuthor,self.theCode,self.theActors,self.theDescription,self.theTags,self.theEnvironmentProperties)
      self.theUseCases.append(p)
      self.resetUseCaseAttributes()
    elif name == 'activities':
      self.inActivities = 0
    elif name == 'attitudes':
      self.inAttitudes = 0
    elif name == 'aptitudes':
      self.inAptitudes = 0
    elif name == 'motivations':
      self.inMotivations = 0
    elif name == 'skills':
      self.inSkills = 0
    elif name == 'intrinsic':
      self.inIntrinsic = 0
    elif name == 'contextual':
      self.inContextual = 0
    elif name == 'narrative':
      self.inNarrative = 0
    elif name == 'excerpt':
      self.inExcerpt = 0
    elif name == 'description':
      self.inDescription = 0
    elif name == 'definition':
      self.inDefinition = 0
    elif name == 'dependencies':
      self.inDependencies = 0
    elif name == 'objective':
      self.inObjective = 0
    elif name == 'preconditions':
      self.inPreconditions = 0
    elif name == 'postconditions':
      self.inPostconditions = 0
    elif name == 'benefits':
      self.inBenefits = 0
    elif name == 'consequences':
      self.inConsequences = 0
Ejemplo n.º 27
0
    def gen_random_path(self, duration, cachedPrefixes=None):
        # Since when initilize a module, all its local variables
        # have been initilized
        if not self.commPrepared:
            self.prepareCommands()
            self.commPrepared = True
        path = list()
        timeSum = 0.0
        passedTime = 0.0
        while timeSum < duration:
            # get enabled commands list
            variables = [var.getValue() for _, var in self.localVars.items()]
            varsStr = ''.join([str(v) for v in variables])
            if len(self.scDict) == 0:
                # 由于存在unbounded变量,无法提前判断所有的变量组合的enabled commands
                # 因此需要手工判断
                cmd_probs = []
                for _,module in self.modules.items():
                    for _,comm in module.allCommands().items():
                        if comm.guard(self.localVars, self.constants):
                            cmd_probs.append((comm, comm.prob()))
            else:
                cmd_probs = self.scDict[varsStr]
            if len(cmd_probs) == 0:
                path.append(self.step_of_current(passedTime=passedTime))
                self.restoreSystem()
                return None, path
            transition, holdingTime, rate, biasingRate, exitRate, biasingExitRate = self.nextState(
                cmd_probs, duration=duration - timeSum)
            timeSum += holdingTime
            if len(path) == 0 and holdingTime > duration:
                # The first transition is not possible to happen within the given duration
                # In this situation, we think that the transition not made.
                # return the path: [Step(initState, emptyTransition)]
                # self._updateCurAndPrevState()
                step = self.step_of_current()
                path.append(step)
                self.restoreSystem()
                return (None, path)
            if timeSum > duration:
                holdingTime -= (timeSum - duration)
            step = Step(
                self.prevState.stateId,
                self.prevState.apSet.copy(),
                holdingTime,
                passedTime,
                transition,
                rate,
                biasingRate,
                exitRate,
                biasingExitRate)
            path.append(step)
            passedTime += holdingTime

            if len(path) >= 1 and self.stopCondition and self.stopCondition(
                    self.localVars, self.constants):
                # add this empty step (with no transition made)
                # to represent the state the system currently is in.
                path.append(self.step_of_current(passedTime=passedTime))
                self.restoreSystem()
                return (None, path)

        # MUST be executed before the function returns
        # to prepare generating next random path.
        self.restoreSystem()
        return None, path
 def __init__(self, initial_state: State):
     self.steps = [Step(None, None, initial_state)]
Ejemplo n.º 29
0
 def startElement(self,name,attrs):
   self.currentElementName = name
   if name == 'persona':
     self.theName = attrs['name']
     self.theType = attrs['type']
     self.theImage = attrs['image']
     if (attrs['assumption_persona'] == 'TRUE'):
       self.isAssumptionPersona = True
   elif name == 'persona_environment':
     self.theEnvironmentName = attrs['name']
     if (attrs['is_direct'] == 'FALSE'):
       self.isDirect = False
   elif name == 'persona_role':
     self.theRoles.append(attrs['name'])
   elif name == 'external_document':
     self.theName = attrs['name']
     self.theVersion = attrs['version']
     self.theDate = attrs['date']
     self.theAuthors = attrs['authors']
   elif name == 'document_reference':
     self.theName = attrs['name']
     self.theContributor = attrs['contributor']
     self.theDocument = attrs['document']
   elif name == 'concept_reference':
     self.theName = attrs['name']
     self.theConcept = attrs['concept']
     self.theObject = attrs['object']
   elif name == 'persona_characteristic':
     self.thePersona = attrs['persona']
     self.theBvName = u2s(attrs['behavioural_variable'])
     self.theModalQualifier = attrs['modal_qualifier'] 
   elif name == 'task_characteristic':
     self.theTask = attrs['task']
     self.theModalQualifier = attrs['modal_qualifier'] 
   elif name == 'grounds':
     refName = attrs['reference']
     refType = attrs['type']
     refArtifact = ''
     self.theGrounds.append((refName,'',refType))
   elif name == 'warrant':
     refName = attrs['reference']
     refType = attrs['type']
     refArtifact = ''
     self.theWarrants.append((refName,'',refType))
   elif name == 'rebuttal':
     refName = attrs['reference']
     refType = attrs['type']
     refArtifact = ''
     self.theRebuttals.append((refName,'',refType))
   elif name == 'task':
     self.theName = attrs['name']
     try:
       self.theCode = attrs['code']
     except KeyError:
       self.theCode = ''
     self.theAuthor = attrs['author']
     if (attrs['assumption_task'] == 'TRUE'):
       self.isAssumptionTask = True
   elif name == 'task_environment':
     self.theEnvironmentName = attrs['name']
   elif name == 'task_persona':
     self.theTaskPersonas.append((attrs['persona'],durationValue(attrs['duration']),frequencyValue(attrs['frequency']),attrs['demands'],attrs['goal_conflict']))
   elif name == 'task_concern':
     self.theConcerns.append(attrs['asset'])
   elif name == 'task_concern_association':
     self.theConcernAssociations.append((attrs['source_name'],a2s(attrs['source_nry']),attrs['link_name'],attrs['target_name'],a2s(attrs['target_nry'])))
   elif name == 'usecase':
     self.theName = attrs['name']
     self.theAuthor = attrs['author']
     self.theCode = attrs['code']
   elif name == 'actor':
     self.theActors.append(attrs['name'])
   elif name == 'usecase_environment':
     self.theEnvironmentName = attrs['name']
   elif name == 'step':
     self.theCurrentStepNo = attrs['number']
     self.theCurrentStep = Step(attrs['description'])
   elif name == 'exception':
     self.theExcName = attrs['name']
     self.theExcType = attrs['type']
     self.theExcValue = attrs['value']
     self.theExcCat = u2s(attrs['category'])
   elif name == 'activities':
     self.inActivities = 1
     self.theActivities = ''
   elif name == 'attitudes':
     self.inAttitudes = 1
     self.theAttitudes = ''
   elif name == 'aptitudes':
     self.inAptitudes = 1
     self.theAptitudes = ''
   elif name == 'motivations':
     self.inMotivations = 1
     self.theMotivations = ''
   elif name == 'skills':
     self.inSkills = 1
     self.theSkills = ''
   elif name == 'intrinsic':
     self.inIntrinsic = 1
     self.theIntrinsic = ''
   elif name == 'contextual':
     self.inContextual = 1
     self.theContextual = ''
   elif name == 'narrative':
     self.inNarrative = 1
     self.theNarrative = ''
   elif name == 'consequences':
     self.inConsequences = 1
     self.theConsequences = ''
   elif name == 'benefits':
     self.inBenefits = 1
     self.theBenefits = ''
   elif name == 'excerpt':
     self.inExcerpt = 1
     self.theExcerpt = ''
   elif name == 'description':
     self.inDescription = 1
     self.theDescription = ''
   elif name == 'definition':
     self.inDefinition = 1
     self.theDefinition = ''
   elif name == 'dependencies':
     self.inDependencies = 1
     self.theDependencies = ''
   elif name == 'objective':
     self.inObjective = 1
     self.theObjective = ''
   elif name == 'preconditions':
     self.inPreconditions = 1
     self.thePreconditions = ''
   elif name == 'postconditions':
     self.inPostconditions = 1
     self.thePostconditions = ''
   elif name == 'tag':
     self.theTags.append(attrs['name'])
 def add_step(self, action: int, reward: float, new_state: State):
     self.steps.append(Step(action, reward, new_state))
Ejemplo n.º 31
0
import Processor
from Step import Step

with open('input.txt') as f:
    common_code = f.readline().strip().split(',')

computer = Processor.Processor(common_code, 0)
computer.reset()

step_tree = Step(None, (0, 0), 'O')
direction_map = [None, 2, 1, 4, 3]


def withdraw(direction):
    while True:
        try:
            computer.run()
        except Processor.ProcessorInputException:
            computer.push_input(direction_map[direction])
        except Processor.ProcessorOutputException:
            return


def do_step(upstream, direction):
    while True:
        try:
            computer.run()
        except Processor.ProcessorInputException:
            computer.push_input(direction)
        except Processor.ProcessorOutputException:
            result = computer.read_output()
Ejemplo n.º 32
0
import Processor
from Step import Step

with open('input.txt') as f:
    common_code = f.readline().strip().split(',')

computer = Processor.Processor(common_code, 0)
computer.reset()

step_tree = Step(None, (0, 0), 'O')
direction_map = [None, 2, 1, 4, 3]
oxygen_coords = (None, None)


def withdraw(direction):
    while True:
        try:
            computer.run()
        except Processor.ProcessorInputException:
            computer.push_input(direction_map[direction])
        except Processor.ProcessorOutputException:
            return


def do_step(upstream, direction):
    global oxygen_coords
    while True:
        try:
            computer.run()
        except Processor.ProcessorInputException:
            computer.push_input(direction)
Ejemplo n.º 33
0
 def startElement(self, name, attrs):
     self.currentElementName = name
     if name == 'persona':
         self.theName = attrs['name']
         self.theType = attrs['type']
         self.theImage = attrs['image']
         if (attrs['assumption_persona'] == 'TRUE'):
             self.isAssumptionPersona = True
     elif name == 'persona_environment':
         self.theEnvironmentName = attrs['name']
         if (attrs['is_direct'] == 'FALSE'):
             self.isDirect = False
     elif name == 'persona_role':
         self.theRoles.append(attrs['name'])
     elif name == 'external_document':
         self.theName = attrs['name']
         self.theVersion = attrs['version']
         self.theDate = attrs['date']
         self.theAuthors = attrs['authors']
     elif name == 'document_reference':
         self.theName = attrs['name']
         self.theContributor = attrs['contributor']
         self.theDocument = attrs['document']
     elif name == 'concept_reference':
         self.theName = attrs['name']
         self.theConcept = attrs['concept']
         self.theObject = attrs['object']
     elif name == 'persona_characteristic':
         self.thePersona = attrs['persona']
         self.theBvName = u2s(attrs['behavioural_variable'])
         self.theModalQualifier = attrs['modal_qualifier']
     elif name == 'task_characteristic':
         self.theTask = attrs['task']
         self.theModalQualifier = attrs['modal_qualifier']
     elif name == 'grounds':
         refName = attrs['reference']
         refType = attrs['type']
         refArtifact = ''
         self.theGrounds.append((refName, '', refType))
     elif name == 'warrant':
         refName = attrs['reference']
         refType = attrs['type']
         refArtifact = ''
         self.theWarrants.append((refName, '', refType))
     elif name == 'rebuttal':
         refName = attrs['reference']
         refType = attrs['type']
         refArtifact = ''
         self.theRebuttals.append((refName, '', refType))
     elif name == 'task':
         self.theName = attrs['name']
         try:
             self.theCode = attrs['code']
         except KeyError:
             self.theCode = ''
         self.theAuthor = attrs['author']
         if (attrs['assumption_task'] == 'TRUE'):
             self.isAssumptionTask = True
     elif name == 'task_environment':
         self.theEnvironmentName = attrs['name']
     elif name == 'task_persona':
         self.theTaskPersonas.append(
             (attrs['persona'], durationValue(attrs['duration']),
              frequencyValue(attrs['frequency']), attrs['demands'],
              attrs['goal_conflict']))
     elif name == 'task_concern':
         self.theConcerns.append(attrs['asset'])
     elif name == 'task_concern_association':
         self.theConcernAssociations.append(
             (attrs['source_name'], a2s(attrs['source_nry']),
              attrs['link_name'], attrs['target_name'],
              a2s(attrs['target_nry'])))
     elif name == 'usecase':
         self.theName = attrs['name']
         self.theAuthor = attrs['author']
         self.theCode = attrs['code']
     elif name == 'actor':
         self.theActors.append(attrs['name'])
     elif name == 'usecase_environment':
         self.theEnvironmentName = attrs['name']
     elif name == 'step':
         self.theCurrentStepNo = attrs['number']
         self.theCurrentStep = Step(attrs['description'])
     elif name == 'exception':
         self.theExcName = attrs['name']
         self.theExcType = attrs['type']
         self.theExcValue = attrs['value']
         self.theExcCat = u2s(attrs['category'])
     elif name == 'activities':
         self.inActivities = 1
         self.theActivities = ''
     elif name == 'attitudes':
         self.inAttitudes = 1
         self.theAttitudes = ''
     elif name == 'aptitudes':
         self.inAptitudes = 1
         self.theAptitudes = ''
     elif name == 'motivations':
         self.inMotivations = 1
         self.theMotivations = ''
     elif name == 'skills':
         self.inSkills = 1
         self.theSkills = ''
     elif name == 'intrinsic':
         self.inIntrinsic = 1
         self.theIntrinsic = ''
     elif name == 'contextual':
         self.inContextual = 1
         self.theContextual = ''
     elif name == 'narrative':
         self.inNarrative = 1
         self.theNarrative = ''
     elif name == 'consequences':
         self.inConsequences = 1
         self.theConsequences = ''
     elif name == 'benefits':
         self.inBenefits = 1
         self.theBenefits = ''
     elif name == 'excerpt':
         self.inExcerpt = 1
         self.theExcerpt = ''
     elif name == 'description':
         self.inDescription = 1
         self.theDescription = ''
     elif name == 'definition':
         self.inDefinition = 1
         self.theDefinition = ''
     elif name == 'dependencies':
         self.inDependencies = 1
         self.theDependencies = ''
     elif name == 'objective':
         self.inObjective = 1
         self.theObjective = ''
     elif name == 'preconditions':
         self.inPreconditions = 1
         self.thePreconditions = ''
     elif name == 'postconditions':
         self.inPostconditions = 1
         self.thePostconditions = ''
     elif name == 'tag':
         self.theTags.append(attrs['name'])
Ejemplo n.º 34
0
class UsabilityContentHandler(ContentHandler, EntityResolver):
    def __init__(self):
        self.thePersonas = []
        self.theExternalDocuments = []
        self.theDocumentReferences = []
        self.theConceptReferences = []
        self.thePersonaCharacteristics = []
        self.theTaskCharacteristics = []
        self.theTasks = []
        self.theUseCases = []
        b = Borg()
        self.configDir = b.configDir
        self.resetPersonaAttributes()
        self.resetDocumentReferenceAttributes()
        self.resetConceptReferenceAttributes()
        self.resetPersonaCharacteristicAttributes()
        self.resetTaskCharacteristicAttributes()
        self.resetTaskAttributes()
        self.resetUseCaseAttributes()

    def resolveEntity(self, publicId, systemId):
        return self.configDir + '/usability.dtd'

    def personas(self):
        return self.thePersonas

    def externalDocuments(self):
        return self.theExternalDocuments

    def documentReferences(self):
        return self.theDocumentReferences

    def conceptReferences(self):
        return self.theConceptReferences

    def personaCharacteristics(self):
        return self.thePersonaCharacteristics

    def taskCharacteristics(self):
        return self.theTaskCharacteristics

    def tasks(self):
        return self.theTasks

    def usecases(self):
        return self.theUseCases

    def resetPersonaAttributes(self):
        self.inActivities = 0
        self.inAttitudes = 0
        self.inAptitudes = 0
        self.inMotivations = 0
        self.inSkills = 0
        self.inIntrinsic = 0
        self.inContextual = 0
        self.theName = ''
        self.theTags = []
        self.theType = ''
        self.theImage = ''
        self.isAssumptionPersona = False
        self.theActivities = ''
        self.theAptitudes = ''
        self.theMotivations = ''
        self.theSkills = ''
        self.theIntrinsic = ''
        self.theContextual = ''
        self.theEnvironmentProperties = []
        self.resetPersonaEnvironmentAttributes()

    def resetPersonaEnvironmentAttributes(self):
        self.theEnvironmentName = ''
        self.theRoles = []
        self.isDirect = True
        self.inNarrative = 0
        self.theNarrative = ''

    def resetExternalDocumentAttributes(self):
        self.theName = ''
        self.theVersion = ''
        self.theDate = ''
        self.theAuthors = ''
        self.inDescription = 0
        self.theDescription = ''

    def resetDocumentReferenceAttributes(self):
        self.inExcerpt = 0
        self.theName = ''
        self.theContributor = ''
        self.theDocument = ''
        self.theExcerpt = ''

    def resetConceptReferenceAttributes(self):
        self.inDescription = 0
        self.theName = ''
        self.theConcept = ''
        self.theObject = ''
        self.theDescription = ''

    def resetPersonaCharacteristicAttributes(self):
        self.thePersona = ''
        self.theBvName = ''
        self.theModalQualifier = ''
        self.inDefinition = 0
        self.theDefinition = ''
        self.theGrounds = []
        self.theWarrants = []
        self.theRebuttals = []

    def resetTaskCharacteristicAttributes(self):
        self.theTask = ''
        self.theModalQualifier = ''
        self.inDefinition = 0
        self.theDefinition = ''
        self.theGrounds = []
        self.theWarrants = []
        self.theRebuttals = []

    def resetTaskAttributes(self):
        self.theName = ''
        self.theTags = []
        self.theCode = ''
        self.theAuthor = ''
        self.isAssumptionTask = False
        self.inObjective = 0
        self.theObjective = ''
        self.theEnvironmentProperties = []
        self.resetTaskEnvironmentAttributes()

    def resetTaskEnvironmentAttributes(self):
        self.theEnvironmentName = ''
        self.inDependencies = 0
        self.inNarrative = 0
        self.inConsequences = 0
        self.inBenefits = 0
        self.theDependencies = ''
        self.theNarrative = ''
        self.theConsequences = ''
        self.theBenefits = ''
        self.theTaskPersonas = []
        self.theConcerns = []
        self.theConcernAssociations = []

    def resetUseCaseAttributes(self):
        self.theName = ''
        self.theTags = []
        self.theAuthor = ''
        self.theCode = ''
        self.inDescription = 0
        self.theDescription = ''
        self.theActors = []
        self.theEnvironmentProperties = []
        self.resetUseCaseEnvironmentAttributes()

    def resetUseCaseEnvironmentAttributes(self):
        self.theEnvironmentName = ''
        self.inPreconditions = 0
        self.thePreconditions = ''
        self.inPostconditions = 0
        self.thePostconditions = ''
        self.theSteps = Steps()
        self.theCurrentStep = None
        self.theCurrentStepNo = 0
        self.theExcName = ''
        self.theExcType = ''
        self.theExcValue = ''
        self.theExcCat = ''
        self.inDefinition = 0
        self.theDefinition = ''

    def startElement(self, name, attrs):
        self.currentElementName = name
        if name == 'persona':
            self.theName = attrs['name']
            self.theType = attrs['type']
            self.theImage = attrs['image']
            if (attrs['assumption_persona'] == 'TRUE'):
                self.isAssumptionPersona = True
        elif name == 'persona_environment':
            self.theEnvironmentName = attrs['name']
            if (attrs['is_direct'] == 'FALSE'):
                self.isDirect = False
        elif name == 'persona_role':
            self.theRoles.append(attrs['name'])
        elif name == 'external_document':
            self.theName = attrs['name']
            self.theVersion = attrs['version']
            self.theDate = attrs['date']
            self.theAuthors = attrs['authors']
        elif name == 'document_reference':
            self.theName = attrs['name']
            self.theContributor = attrs['contributor']
            self.theDocument = attrs['document']
        elif name == 'concept_reference':
            self.theName = attrs['name']
            self.theConcept = attrs['concept']
            self.theObject = attrs['object']
        elif name == 'persona_characteristic':
            self.thePersona = attrs['persona']
            self.theBvName = u2s(attrs['behavioural_variable'])
            self.theModalQualifier = attrs['modal_qualifier']
        elif name == 'task_characteristic':
            self.theTask = attrs['task']
            self.theModalQualifier = attrs['modal_qualifier']
        elif name == 'grounds':
            refName = attrs['reference']
            refType = attrs['type']
            refArtifact = ''
            self.theGrounds.append((refName, '', refType))
        elif name == 'warrant':
            refName = attrs['reference']
            refType = attrs['type']
            refArtifact = ''
            self.theWarrants.append((refName, '', refType))
        elif name == 'rebuttal':
            refName = attrs['reference']
            refType = attrs['type']
            refArtifact = ''
            self.theRebuttals.append((refName, '', refType))
        elif name == 'task':
            self.theName = attrs['name']
            try:
                self.theCode = attrs['code']
            except KeyError:
                self.theCode = ''
            self.theAuthor = attrs['author']
            if (attrs['assumption_task'] == 'TRUE'):
                self.isAssumptionTask = True
        elif name == 'task_environment':
            self.theEnvironmentName = attrs['name']
        elif name == 'task_persona':
            self.theTaskPersonas.append(
                (attrs['persona'], durationValue(attrs['duration']),
                 frequencyValue(attrs['frequency']), attrs['demands'],
                 attrs['goal_conflict']))
        elif name == 'task_concern':
            self.theConcerns.append(attrs['asset'])
        elif name == 'task_concern_association':
            self.theConcernAssociations.append(
                (attrs['source_name'], a2s(attrs['source_nry']),
                 attrs['link_name'], attrs['target_name'],
                 a2s(attrs['target_nry'])))
        elif name == 'usecase':
            self.theName = attrs['name']
            self.theAuthor = attrs['author']
            self.theCode = attrs['code']
        elif name == 'actor':
            self.theActors.append(attrs['name'])
        elif name == 'usecase_environment':
            self.theEnvironmentName = attrs['name']
        elif name == 'step':
            self.theCurrentStepNo = attrs['number']
            self.theCurrentStep = Step(attrs['description'])
        elif name == 'exception':
            self.theExcName = attrs['name']
            self.theExcType = attrs['type']
            self.theExcValue = attrs['value']
            self.theExcCat = u2s(attrs['category'])
        elif name == 'activities':
            self.inActivities = 1
            self.theActivities = ''
        elif name == 'attitudes':
            self.inAttitudes = 1
            self.theAttitudes = ''
        elif name == 'aptitudes':
            self.inAptitudes = 1
            self.theAptitudes = ''
        elif name == 'motivations':
            self.inMotivations = 1
            self.theMotivations = ''
        elif name == 'skills':
            self.inSkills = 1
            self.theSkills = ''
        elif name == 'intrinsic':
            self.inIntrinsic = 1
            self.theIntrinsic = ''
        elif name == 'contextual':
            self.inContextual = 1
            self.theContextual = ''
        elif name == 'narrative':
            self.inNarrative = 1
            self.theNarrative = ''
        elif name == 'consequences':
            self.inConsequences = 1
            self.theConsequences = ''
        elif name == 'benefits':
            self.inBenefits = 1
            self.theBenefits = ''
        elif name == 'excerpt':
            self.inExcerpt = 1
            self.theExcerpt = ''
        elif name == 'description':
            self.inDescription = 1
            self.theDescription = ''
        elif name == 'definition':
            self.inDefinition = 1
            self.theDefinition = ''
        elif name == 'dependencies':
            self.inDependencies = 1
            self.theDependencies = ''
        elif name == 'objective':
            self.inObjective = 1
            self.theObjective = ''
        elif name == 'preconditions':
            self.inPreconditions = 1
            self.thePreconditions = ''
        elif name == 'postconditions':
            self.inPostconditions = 1
            self.thePostconditions = ''
        elif name == 'tag':
            self.theTags.append(attrs['name'])

    def characters(self, data):
        if self.inActivities:
            self.theActivities += data
        elif self.inAttitudes:
            self.theAttitudes += data
        elif self.inAptitudes:
            self.theAptitudes += data
        elif self.inMotivations:
            self.theMotivations += data
        elif self.inSkills:
            self.theSkills += data
        elif self.inIntrinsic:
            self.theIntrinsic += data
        elif self.inContextual:
            self.theContextual += data
        elif self.inConsequences:
            self.theConsequences += data
        elif self.inBenefits:
            self.theBenefits += data
        elif self.inExcerpt:
            self.theExcerpt += data
        elif self.inDescription:
            self.theDescription += data
        elif self.inDefinition:
            self.theDefinition += data
        elif self.inDependencies:
            self.theDependencies += data
        elif self.inObjective:
            self.theObjective += data
        elif self.inPreconditions:
            self.thePreconditions += data
        elif self.inPostconditions:
            self.thePostconditions += data
        elif self.inNarrative:
            self.theNarrative += data

    def endElement(self, name):
        if name == 'persona':
            p = PersonaParameters(self.theName, self.theActivities,
                                  self.theAttitudes, self.theAptitudes,
                                  self.theMotivations, self.theSkills,
                                  self.theIntrinsic, self.theContextual,
                                  self.theImage, self.isAssumptionPersona,
                                  self.theType, self.theTags,
                                  self.theEnvironmentProperties, {})
            self.thePersonas.append(p)
            self.resetPersonaAttributes()
        elif name == 'persona_environment':
            p = PersonaEnvironmentProperties(self.theEnvironmentName,
                                             self.isDirect, self.theNarrative,
                                             self.theRoles, {'narrative': {}})
            self.theEnvironmentProperties.append(p)
            self.resetPersonaEnvironmentAttributes()
        elif name == 'external_document':
            p = ExternalDocumentParameters(self.theName, self.theVersion,
                                           self.theDate, self.theAuthors,
                                           self.theDescription)
            self.theExternalDocuments.append(p)
            self.resetExternalDocumentAttributes()
        elif name == 'document_reference':
            p = DocumentReferenceParameters(self.theName, self.theDocument,
                                            self.theContributor,
                                            self.theExcerpt)
            self.theDocumentReferences.append(p)
            self.resetDocumentReferenceAttributes()
        elif name == 'concept_reference':
            p = ConceptReferenceParameters(self.theName, self.theConcept,
                                           self.theObject, self.theDescription)
            self.theConceptReferences.append(p)
            self.resetConceptReferenceAttributes()
        elif name == 'persona_characteristic':
            p = PersonaCharacteristicParameters(
                self.thePersona, self.theModalQualifier, self.theBvName,
                self.theDefinition, self.theGrounds, self.theWarrants, [],
                self.theRebuttals)
            self.thePersonaCharacteristics.append(p)
            self.resetPersonaCharacteristicAttributes()
        elif name == 'task_characteristic':
            p = TaskCharacteristicParameters(self.theTask,
                                             self.theModalQualifier,
                                             self.theDefinition,
                                             self.theGrounds, self.theWarrants,
                                             [], self.theRebuttals)
            self.theTaskCharacteristics.append(p)
            self.resetTaskCharacteristicAttributes()
        elif name == 'task':
            p = TaskParameters(self.theName, self.theCode, self.theObjective,
                               self.isAssumptionTask, self.theAuthor,
                               self.theTags, self.theEnvironmentProperties)
            self.theTasks.append(p)
            self.resetTaskAttributes()
        elif name == 'task_environment':
            p = TaskEnvironmentProperties(
                self.theEnvironmentName, self.theDependencies,
                self.theTaskPersonas, self.theConcerns,
                self.theConcernAssociations, self.theNarrative,
                self.theConsequences, self.theBenefits, {
                    'narrative': {},
                    'consequences': {},
                    'benefits': {}
                })
            self.theEnvironmentProperties.append(p)
            self.resetTaskEnvironmentAttributes()
        elif name == 'exception':
            self.theCurrentStep.addException(
                (self.theExcName, self.theExcType, self.theExcValue,
                 self.theExcCat, self.theDefinition))
        elif name == 'step':
            self.theCurrentStep.setTags(self.theTags)
            self.theSteps.append(self.theCurrentStep)
            self.theCurrentStep = None
        elif name == 'usecase_environment':
            p = UseCaseEnvironmentProperties(self.theEnvironmentName,
                                             self.thePreconditions,
                                             self.theSteps,
                                             self.thePostconditions)
            self.theEnvironmentProperties.append(p)
            self.resetUseCaseEnvironmentAttributes()
        elif name == 'usecase':
            p = UseCaseParameters(self.theName, self.theAuthor, self.theCode,
                                  self.theActors, self.theDescription,
                                  self.theTags, self.theEnvironmentProperties)
            self.theUseCases.append(p)
            self.resetUseCaseAttributes()
        elif name == 'activities':
            self.inActivities = 0
        elif name == 'attitudes':
            self.inAttitudes = 0
        elif name == 'aptitudes':
            self.inAptitudes = 0
        elif name == 'motivations':
            self.inMotivations = 0
        elif name == 'skills':
            self.inSkills = 0
        elif name == 'intrinsic':
            self.inIntrinsic = 0
        elif name == 'contextual':
            self.inContextual = 0
        elif name == 'narrative':
            self.inNarrative = 0
        elif name == 'excerpt':
            self.inExcerpt = 0
        elif name == 'description':
            self.inDescription = 0
        elif name == 'definition':
            self.inDefinition = 0
        elif name == 'dependencies':
            self.inDependencies = 0
        elif name == 'objective':
            self.inObjective = 0
        elif name == 'preconditions':
            self.inPreconditions = 0
        elif name == 'postconditions':
            self.inPostconditions = 0
        elif name == 'benefits':
            self.inBenefits = 0
        elif name == 'consequences':
            self.inConsequences = 0