20 from .basecontroller
import WithNamespace, _BaseController
21 from .dataloader
import DataLoader
22 from .robotdata
import NewTestCaseFile, NewTestDataDirectory
23 from ..context
import LOG
24 from ..controller.ctrlcommands
import NullObserver, SaveFile
25 from ..publish.messages
import RideOpenSuite, RideNewProject, RideFileNameChanged
28 from ..spec.xmlreaders
import SpecInitializer
29 from ..utils
import overrides
34 def __init__(self, namespace=None, settings=None, library_manager=None):
35 from .filecontrollers
import ResourceFileControllerFactory
51 return library_manager
or \
62 @overrides(WithNamespace)
65 WithNamespace._set_namespace(self, namespace)
68 display_name = property
74 default_dir = property
77 return os.path.abspath(self.
_settings_settings.get(
'default directory',
''))
80 default_dir = path
if os.path.isdir(path)
else os.path.dirname(path)
81 self.
_settings_settings.set(
'default directory', default_dir)
82 self.
_name_space_name_space.update_exec_dir_global_var(default_dir)
83 self.
_name_space_name_space.update_cur_dir_global_var(default_dir)
111 resource_file_controller_factory = property
126 from .filecontrollers
import DataController, ResourceFileControllerFactory
135 return resource_controller
146 load_observer.error(
"Given file '%s' is not a valid Robot Framework "
147 "test case or resource file." % path)
148 except AttributeError:
153 return self.
_settings_settings.excludes.contains(source)
if self.
_settings_settings
else False
156 if not os.path.splitext(os.path.split(path)[1])[0] ==
'__init__':
158 initfile = self.
_loader_loader.load_initfile(path, load_observer)
170 if path.endswith((
".robot",
".resource")):
174 load_observer.error(
"Invalid data file '%s'." % path)
175 e = UserWarning(
"Invalid data file")
187 resources = self.
_loader_loader.resources_for(datafile, load_observer)
190 load_observer.finish()
193 from .filecontrollers
import DataController
196 new_resource_controllers = []
199 new_resource_controllers.append(controller))
200 for controller
in new_resource_controllers:
207 load_observer.error(
"Invalid resource file '%s'." % path)
210 resource = self.
_loader_loader.load_resource_file(path, load_observer)
214 load_observer.finish()
218 resource_created_callback=None):
225 resource_created_callback(controller)
230 controller.notify_opened()
234 self.
_controller_controller.insert_to_test_data_directory(resource)
240 self.
external_resourcesexternal_resources.sort(key=
lambda resource: resource.name.lower())
247 for df
in self.
_suites_suites():
248 for test
in df.tests:
253 controller_list = [controller]
256 return [dc
for dc
in controller_list
if dc.dirty
and not dc.has_format()]
272 for df
in datafile.children:
278 if controller.is_same_format(format):
280 old_path = controller.filename
281 controller.set_format(format)
286 datafile=controller).publish()
289 if path
and os.path.isfile(path):
293 for datafile
in controller.iter_datafiles():
300 self.
_controller_controller.remove_child(controller)
306 assert controller
is not None
307 self.
_serializer_serializer.serialize_file(controller)
310 return [controller
for controller
in self.
datafilesdatafilesdatafiles
if controller.dirty]
318 resource = self.
_namespace_namespace.get_resource(path, directory)
323 from .filecontrollers
import TestDataDirectoryController
325 if isinstance(data_file, TestDataDirectoryController):
327 if not os.path.exists(data_file.directory):
331 if data_file.has_been_modified_on_disk()
or \
332 data_file.has_been_removed_from_disk():
354 controller.datafile.save(**self.
_get_options_get_options())
355 except Exception
as err:
365 setting = self.
_settings_settings.get(
'line separator',
'native').
lower()
366 if setting
in (
'crlf',
'windows'):
368 if setting
in (
'lf',
'unix'):
373 return self.
_settings_settings.get(
'txt format separator',
'space') ==
'pipe'
376 return self.
_settings_settings.get(
'txt number of spaces', 4)
379 self.
_errors_errors.append(
"Error in serializing '%s':\n%s"
380 % (data.data.source, str(error)))
391 self.
_path_path = file_controller.filename
396 if path
is None or not os.path.isfile(path):
398 self.
_backup_dir_backup_dir = tempfile.mkdtemp(dir=os.path.dirname(path))
399 return os.path.join(self.
_backup_dir_backup_dir, os.path.basename(path))
429 def _move(self, from_path, to_path):
430 shutil.move(from_path, to_path)
def clear_namespace_update_listeners(self)
def _set_namespace(self, namespace)
def get_all_keywords_from(self, *datafiles)
def _move(self, from_path, to_path)
def _restore_backup(self)
def _get_backup_name(self, path)
def __init__(self, file_controller)
def _remove_backup_dir(self)
def __exit__(self, *args)
def __init__(self, namespace=None, settings=None, library_manager=None)
def update_default_dir(self, path)
def _load_datafile(self, path, load_observer)
def new_resource(self, path, parent=None)
def _create_resource_controller(self, parsed_resource, parent=None, resource_created_callback=None)
def get_all_keywords(self)
def save(self, controller)
def load_resource(self, path, load_observer)
def _load_initfile(self, path, load_observer)
def _set_namespace(self, namespace)
def _new_project(self, datafile)
def load_datafile(self, path, load_observer)
def _inform_resource_created(controller)
def new_directory_project(self, path)
def get_root_suite_dir_path(self)
def new_file_project(self, path)
def get_files_without_format(self, controller=None)
def is_datafile_dirty(self, datafile)
def insert_into_suite_structure(self, resource)
def change_format(self, controller, format)
def _create_controllers(self, datafile, resources)
def load_data(self, path, load_observer=None)
def is_excluded(self, source)
def resource_import_modified(self, path, directory)
resource_file_controller_factory
def _remove_file(self, path)
def find_controller_by_longname(self, longname, testname=None)
def change_format_recursive(self, controller, format)
def _get_all_dirty_controllers(self)
def _construct_library_manager(library_manager, settings)
_resource_file_controller_factory
def _sort_external_resources(self)
def remove_datafile(self, controller)
def remove_resource(self, controller)
def is_project_changed_from_disk(self)
def _load_resource(self, path, load_observer)
def _populate_from_datafile(self, path, datafile, load_observer)
def _serialize_file(self, controller)
def _cache_error(self, data, error)
def serialize_file(self, controller)
def _get_line_separator(self)
def _get_separating_spaces(self)
def __init__(self, settings, logger)
def _get_pipe_separated(self)
Sent after test suite or resource file is renamed.
Sent when a new project has been created.
Sent when a new suite has finished loading.
def DataController(data, project, parent=None)
def NewTestCaseFile(path)
def NewTestDataDirectory(path)
def error(msg, html=False)
Writes the message to the log file using the ERROR level.