Robot Framework Integrated Development Environment (RIDE)
dataloader.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 import os
17 from threading import Thread
18 
19 from .. import robotapi
20 
21 
22 class DataLoader():
23 
24  def __init__(self, namespace, settings):
25  self._namespace_namespace = namespace
26  self._namespace_namespace.reset_resource_and_library_cache()
27  self._settings_settings = settings
28 
29  def load_datafile(self, path, load_observer):
30  return self._load_load(_DataLoader(path, self._settings_settings), load_observer)
31 
32  def load_initfile(self, path, load_observer):
33  return self._load_load(_InitFileLoader(path), load_observer)
34 
35  def load_resource_file(self, datafile, load_observer):
36  return self._load_load(_ResourceLoader(
37  datafile, self._namespace_namespace.get_resource), load_observer)
38 
39  def resources_for(self, datafile, load_observer):
40  return self._load_load(_ResourceLoader(
41  datafile, self._namespace_namespace.get_resources), load_observer)
42 
43  def _load(self, loader, load_observer):
44  self._wait_until_loaded_wait_until_loaded(loader, load_observer)
45  return loader.result
46 
47  def _wait_until_loaded(self, loader, load_observer):
48  loader.start()
49  load_observer.notify()
50  while loader.is_alive():
51  loader.join(0.1)
52  load_observer.notify()
53 
54 
55 class _DataLoaderThread(Thread):
56 
57  def __init__(self):
58  Thread.__init__(self)
59  self.resultresult = None
60 
61  def run(self):
62  try:
63  self.resultresult = self._run()
64  except Exception as e:
65  # print("DEBUG: exception at DataLoader %s\n" % str(e))
66  pass # TODO: Log this error somehow
67 
68 
70 
71  def __init__(self, path, settings):
72  _DataLoaderThread.__init__(self)
73  self._path_path = path
74  self._settings_settings = settings
75 
76  def _run(self):
77  # print(f"DEBUG: Dataloader returning TestData source={self._path}")
78  return TestData(source=self._path_path, settings=self._settings_settings)
79 
80 
82 
83  def __init__(self, path, settings=None):
84  _DataLoaderThread.__init__(self)
85  self._path_path = path
86  self._settings_settings = settings
87 
88  def _run(self):
89  result = robotapi.TestDataDirectory(source=os.path.dirname(self._path_path), settings=self._settings_settings)
90  result.initfile = self._path_path
91  robotapi.FromFilePopulator(result).populate(self._path_path)
92  return result
93 
94 
96 
97  def __init__(self, datafile, resource_loader):
98  _DataLoaderThread.__init__(self)
99  self._datafile_datafile = datafile
100  self._loader_loader = resource_loader
101 
102  def _run(self):
103  return self._loader_loader(self._datafile_datafile)
104 
105 
107 
108  def __init__(self, parent, source, settings):
109  self._settings_settings_settings = settings
110  robotapi.TestDataDirectory.__init__(self, parent, source, settings=self._settings_settings_settings)
111 
112  def add_child(self, path, include_suites, extensions=None,
113  warn_on_skipped=False):
114  if not self._settings_settings_settings.excludes.contains(path):
115  self.childrenchildrenchildren.append(TestData(
116  parent=self, source=path, settings=self._settings_settings_settings))
117  else:
118  self.childrenchildrenchildren.append(ExcludedDirectory(self, path))
119 
120 
121 
127 def TestData(source, parent=None, settings=None):
128  if os.path.isdir(source):
129  # print("DEBUG: Dataloader Is dir getting testdada %s\n" % source)
130  data = TestDataDirectoryWithExcludes(parent, source, settings)
131  # print("DEBUG: Dataloader testdata %s\n" % data.name)
132  data.populate()
133  # print("DEBUG: Dataloader after populate %s %s\n" % (data._tables, data.name))
134  return data
135  #print("DEBUG: Dataloader returning TestCaseFile")
136  datafile = robotapi.TestCaseFile(parent, source, settings).populate()
137  if datafile:
138  return datafile
139  if source.endswith(("resource", "robot")):
140  datafile = robotapi.ResourceFile(source, settings).populate()
141  # print(f"DEBUG: Dataloader returning TestCaseFile datafile={datafile}, type={type(datafile)}")
142  return datafile
143 
144 
146  def __init__(self, parent, path):
147  self._parent_parent = parent
148  self._path_path = path
149  robotapi.TestDataDirectory.__init__(self, parent, path)
150 
151  def has_tests(self):
152  return True
def _wait_until_loaded(self, loader, load_observer)
Definition: dataloader.py:47
def resources_for(self, datafile, load_observer)
Definition: dataloader.py:39
def load_datafile(self, path, load_observer)
Definition: dataloader.py:29
def _load(self, loader, load_observer)
Definition: dataloader.py:43
def __init__(self, namespace, settings)
Definition: dataloader.py:24
def load_resource_file(self, datafile, load_observer)
Definition: dataloader.py:35
def load_initfile(self, path, load_observer)
Definition: dataloader.py:32
def add_child(self, path, include_suites, extensions=None, warn_on_skipped=False)
Definition: dataloader.py:113
def __init__(self, path, settings)
Definition: dataloader.py:71
def __init__(self, path, settings=None)
Definition: dataloader.py:83
def __init__(self, datafile, resource_loader)
Definition: dataloader.py:97
The parsed resource file object.
Definition: model.py:254
The parsed test case file object.
Definition: model.py:216
The parsed test data directory object.
Definition: model.py:296
def TestData(source, parent=None, settings=None)
Parses a file or directory to a corresponding model object.
Definition: dataloader.py:127