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)
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)