code: def AssignTasksToClient(self, client_id):
      
      rules = data_store.REL_DB.ReadAllForemanRules()
      if not rules:
        return 0
  
      last_foreman_run = self._GetLastForemanRunTime(client_id)
  
      latest_rule_creation_time = max(rule.creation_time for rule in rules)
  
      if latest_rule_creation_time <= last_foreman_run:
        return 0
  
      # Update the latest checked rule on the client.
      self._SetLastForemanRunTime(client_id, latest_rule_creation_time)
  
      relevant_rules = []
      expired_rules = False
  
      now = rdfvalue.RDFDatetime.Now()
  
      for rule in rules:
        if rule.expiration_time < now:
          expired_rules = True
          continue
        if rule.creation_time <= last_foreman_run:
          continue
  
        relevant_rules.append(rule)
  
      actions_count = 0
      if relevant_rules:
        client_data = data_store.REL_DB.ReadClientFullInfo(client_id)
        if client_data is None:
          return
  
        for rule in relevant_rules:
          if rule.Evaluate(client_data):
            actions_count += self._RunAction(rule, client_id)
  
      if expired_rules:
        data_store.REL_DB.RemoveExpiredForemanRules()
  
      return actions_count
docs: Examines our rules and starts up flows based on the client.
  
      Args:
        client_id: Client id of the client for tasks to be assigned.
  
      Returns:
        Number of assigned tasks.