configurationengine/source/plugins/symbian/ConeCRMLPlugin/CRMLPlugin/crml_impl.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
equal deleted inserted replaced
2:87cfa131b535 3:e7e0ae78773e
    32         plugin.ImplBase.__init__(self, resource_ref, configuration)
    32         plugin.ImplBase.__init__(self, resource_ref, configuration)
    33         self.resource_ref = resource_ref
    33         self.resource_ref = resource_ref
    34         self.configuration = configuration
    34         self.configuration = configuration
    35         self.logger = logging.getLogger('cone.crml(%s)' % self.resource_ref)
    35         self.logger = logging.getLogger('cone.crml(%s)' % self.resource_ref)
    36         self.repository = repository
    36         self.repository = repository
    37         
    37 
       
    38     def __getstate__(self):
       
    39         state = super(CrmlImpl, self).__getstate__()
       
    40         state['repository'] = self.__dict__.get('repository',None)
       
    41         return state
       
    42 
       
    43             
    38     def generate(self, context=None):
    44     def generate(self, context=None):
    39         # Quick fix 
    45         # Quick fix 
    40         if context:
    46         if context:
    41             self.generation_context = context
    47             self.generation_context = context
       
    48         
       
    49         # See if delta CenReps should be generated
       
    50         delta_cenrep = context and context.changed_refs is not None \
       
    51             and 'deltacenrep' in context.tags.get('crml', [])
       
    52         
       
    53         changed_refs = None
       
    54         if delta_cenrep:
       
    55             changed_refs = context.changed_refs
       
    56             
       
    57             # Hard-coded output for delta CenReps for now
       
    58             self.output_subdir = 'deltacenreps'
       
    59             self.plugin_output = ''
       
    60         
    42         file_path = self._get_cenrep_txt_file_path()
    61         file_path = self._get_cenrep_txt_file_path()
    43         self.logger.debug("Generating file '%s'..." % file_path)
    62         self.logger.debug("Generating file '%s'..." % file_path)
    44         
    63         
    45         # Generate CenRep text data and write it to the output file
    64         # Generate CenRep text data and write it to the output file
    46         writer = crml_writer.CrmlTxtWriter(self.configuration, self.logger)
    65         writer = crml_writer.CrmlTxtWriter(context, self.logger)
    47         data = writer.get_cenrep_txt_data(self.repository).encode('UTF-16')
    66         data = writer.get_cenrep_txt_data(self.repository, changed_refs).encode('UTF-16')
    48         self._write_to_file(file_path, data)
    67         self._write_to_file(file_path, data)
       
    68         
       
    69         # Add to the generated files list
       
    70         KEY = 'crml_generated_cenrep_files'
       
    71         lst = context.impl_data_dict.setdefault(KEY, [])
       
    72         lst.append((os.path.basename(file_path), os.path.abspath(file_path)))
    49         
    73         
    50         
    74         
    51         # Collect the record for cenrep_rfs.txt generation in post_generate()
    75         # Collect the record for cenrep_rfs.txt generation in post_generate()
    52         if self.generation_context is not None:
    76         if self.generation_context is not None:
    53             rfs_record = writer.get_cenrep_rfs_record(self.repository)
    77             rfs_record = writer.get_cenrep_rfs_record(self.repository)
   135         
   159         
   136         targets = self.generation_context.tags.get('target', [])
   160         targets = self.generation_context.tags.get('target', [])
   137         return 'core' in targets or 'rofs2' in targets
   161         return 'core' in targets or 'rofs2' in targets
   138     
   162     
   139     def _write_to_file(self, file_path, data):
   163     def _write_to_file(self, file_path, data):
   140         # Create directories for the file if necessary
       
   141         file_dir = os.path.dirname(file_path)
       
   142         if file_dir != '' and not os.path.exists(file_dir):
       
   143             os.makedirs(file_dir)
       
   144         
   164         
   145         # Write data
   165         # Write data
   146         f = open(file_path, "wb")
   166         f = self.generation_context.create_file(file_path, implementation=self)
   147         try:        f.write(data)
   167         try:        f.write(data)
   148         finally:    f.close()
   168         finally:    f.close()