class_docstr: It's simple wrapper for `AttributeDTO` objects which uses alpha variables attributes to fake properties.
  
  Alpha leaderboard doesn't have `KeyValueProperty` since it doesn't support properties at all,
  so we do need fake `KeyValueProperty` class for backward compatibility with old client's code.
class_docstr_tok: ["It","'s","simple","wrapper","for","`","AttributeDTO","`","objects","which","uses","alpha","variables","attributes","to","fake","properties",".","Alpha","leaderboard","does","n't","have","`","KeyValueProperty","`","since","it","does","n't","support","properties","at","all",",","so","we","do","need","fake","`","KeyValueProperty","`","class","for","backward","compatibility","with","old","client","'s","code","."]
docstr: Checks if attribute can be used as property
docstr_tok: ["Checks","if","attribute","can","be","used","as","property"]
code: def is_valid_attribute(cls, attribute):
      """Checks if attribute can be used as property"""
      has_valid_type = super().is_valid_attribute(attribute)
      is_in_properties_space = attribute.name.startswith(
          alpha_consts.PROPERTIES_ATTRIBUTE_SPACE
      )
      return has_valid_type and is_in_properties_space
  
imports: import abc
  from collections import namedtuple
  from neptune.attributes import constants
  from neptune.internal import operation
  from neptune.internal.backends.api_model import AttributeType
  from neptune.internal.operation import ImageValue
  from neptune.legacy.exceptions import NeptuneException
  from neptune.legacy.internal.channels.channels import ChannelType, ChannelValueType
label_desc: Use image node_id 1 for calling the AlphaPropertyDTO obj's underlying member method code with example usage: obj.is_valid_attribute(cls, attribute) and returns: unknown