Exemple #1
0
 def variables_from(self, content):
     the_directory = directory_for(self.get_area(), self.project)
     interview_source = docassemble.base.parse.InterviewSourceString(content=content, directory=the_directory, path="docassemble.playground" + str(self.user_id) + project_name(self.project) + ":_temp.yml", package='docassemble.playground' + str(self.user_id) + project_name(self.project), testing=True)
     interview = interview_source.get_interview()
     temp_current_info = copy.deepcopy(self.current_info)
     temp_current_info['yaml_filename'] = "docassemble.playground" + str(self.user_id) + project_name(self.project) + ":_temp.yml"
     interview_status = docassemble.base.parse.InterviewStatus(current_info=temp_current_info)
     user_dict = docassemble.base.parse.get_initial_dict()
     user_dict['_internal']['starttime'] = datetime.datetime.utcnow()
     user_dict['_internal']['modtime'] = datetime.datetime.utcnow() 
     try:
         interview.assemble(user_dict, interview_status)
         has_error = False
     except Exception as errmess:
         has_error = True
         error_message = str(errmess)
         error_type = type(errmess)
         #logmessage("Failed assembly with error type " + str(error_type) + " and message: " + error_message)
     functions = set()
     modules = set()
     classes = set()
     fields_used = set()
     names_used = set()
     names_used.update(interview.names_used)
     area = SavedFile(self.user_id, fix=True, section='playgroundmodules')
     the_directory = directory_for(area, self.project)
     avail_modules = set([re.sub(r'.py$', '', f) for f in os.listdir(the_directory) if os.path.isfile(os.path.join(the_directory, f))])
     for question in interview.questions_list:
         names_used.update(question.mako_names)
         names_used.update(question.names_used)
         names_used.update(question.fields_used)
         fields_used.update(question.fields_used)
     for val in interview.questions:
         names_used.add(val)
         fields_used.add(val)
     for val in user_dict:
         if type(user_dict[val]) is types.FunctionType:
             functions.add(val)
         elif type(user_dict[val]) is TypeType or type(user_dict[val]) is types.ClassType:
             classes.add(val)
         elif type(user_dict[val]) is types.ModuleType:
             modules.add(val)
     for val in docassemble.base.functions.pickleable_objects(user_dict):
         names_used.add(val)
     for var in ['_internal']:
         names_used.discard(var)
     names_used = names_used.difference( functions | classes | modules | avail_modules )
     undefined_names = names_used.difference(fields_used | always_defined )
     for var in ['_internal']:
         undefined_names.discard(var)
     names_used = names_used.difference( undefined_names )
     all_names = names_used | undefined_names | fields_used
     all_names_reduced = all_names.difference( set(['url_args']) )
     return dict(names_used=names_used, undefined_names=undefined_names, fields_used=fields_used, all_names=all_names, all_names_reduced=all_names_reduced)
Exemple #2
0
 def variables_from(self, content):
     interview_source = docassemble.base.parse.InterviewSourceString(content=content, directory=self.get_area().directory, path="docassemble.playground" + str(self.user_id) + ":_temp.yml", package='docassemble.playground' + str(self.user_id), testing=True)
     interview = interview_source.get_interview()
     temp_current_info = copy.deepcopy(self.current_info)
     temp_current_info['yaml_filename'] = "docassemble.playground" + str(self.user_id) + ":_temp.yml"
     interview_status = docassemble.base.parse.InterviewStatus(current_info=temp_current_info)
     user_dict = docassemble.base.parse.get_initial_dict()
     user_dict['_internal']['starttime'] = datetime.datetime.utcnow()
     user_dict['_internal']['modtime'] = datetime.datetime.utcnow() 
     try:
         interview.assemble(user_dict, interview_status)
         has_error = False
     except Exception as errmess:
         has_error = True
         error_message = str(errmess)
         error_type = type(errmess)
         #logmessage("Failed assembly with error type " + str(error_type) + " and message: " + error_message)
     functions = set()
     modules = set()
     classes = set()
     fields_used = set()
     names_used = set()
     names_used.update(interview.names_used)
     area = SavedFile(self.user_id, fix=True, section='playgroundmodules')
     avail_modules = set([re.sub(r'.py$', '', f) for f in os.listdir(area.directory) if os.path.isfile(os.path.join(area.directory, f))])
     for question in interview.questions_list:
         names_used.update(question.mako_names)
         names_used.update(question.names_used)
         names_used.update(question.fields_used)
         fields_used.update(question.fields_used)
     for val in interview.questions:
         names_used.add(val)
         fields_used.add(val)
     for val in user_dict:
         if type(user_dict[val]) is types.FunctionType:
             functions.add(val)
         elif type(user_dict[val]) is TypeType or type(user_dict[val]) is types.ClassType:
             classes.add(val)
         elif type(user_dict[val]) is types.ModuleType:
             modules.add(val)
     for val in docassemble.base.functions.pickleable_objects(user_dict):
         names_used.add(val)
     for var in ['_internal']:
         names_used.discard(var)
     names_used = names_used.difference( functions | classes | modules | avail_modules )
     undefined_names = names_used.difference(fields_used | always_defined )
     for var in ['_internal']:
         undefined_names.discard(var)
     names_used = names_used.difference( undefined_names )
     all_names = names_used | undefined_names | fields_used
     all_names_reduced = all_names.difference( set(['url_args']) )
     return dict(names_used=names_used, undefined_names=undefined_names, fields_used=fields_used, all_names=all_names, all_names_reduced=all_names_reduced)