docs: def get_type_properties(self, property_obj, name, additional_prop=False):
          """ Get internal properties of property (extended in schema)
  
          :param dict property_obj: raw property object
          :param str name: name of property
          :param bool additional_prop: recursion's param
          :return: Type, format and internal properties of property
          :rtype: tuple(str, str, dict)
          """
          property_type = property_obj.get('type', 'object')
          property_format = property_obj.get('format')
          property_dict = {}
  
          if property_type in ['object', 'array']:
              schema_type = SchemaTypes.MAPPED if additional_prop else SchemaTypes.INLINE
              schema_id = self._get_object_schema_id(property_obj, schema_type)
              if not ('$ref' in property_obj or self.storage.get(schema_id)):
                  _schema = self.storage.create_schema(
                      property_obj, name, schema_type, root=self.root)
                  self._after_create_schema(_schema)
              property_type = schema_id
  
          property_dict['default'] = property_obj.get('default')
          property_dict['maximum'] = property_obj.get('maximum')
          property_dict['exclusive_maximum'] = property_obj.get('exclusiveMaximum')
          property_dict['minimum'] = property_obj.get('minimum')
          property_dict['exclusive_minimum'] = property_obj.get('exclusiveMinimum')
          property_dict['max_length'] = property_obj.get('maxLength')
          property_dict['min_length'] = property_obj.get('minLength')
  
          #TODO: fixme. remove ugly convert. add property template renderer instead
          property_dict['enum'] = convert(property_obj.get('enum'))
  
          #TODO: fixme. cleanup empty properties. add configurable filter for properties instead
          property_dict = {k: v for k, v in property_dict.items() if v}
  
          return property_type, property_format, property_dict