KDE 4.5 PyKDE API Reference
  • KDE's Python API
  • Overview
  • PyKDE Home
  • Sitemap
  • Contact Us
 

Attribute Class Reference

from PyKDE4.akonadi import *

Subclasses: Akonadi.CollectionQuotaAttribute, Akonadi.EntityDisplayAttribute, Akonadi.EntityHiddenAttribute, Akonadi.AddressAttribute, Akonadi.MessageFolderAttribute, Akonadi.MessageThreadingAttribute, Akonadi.PersistentSearchAttribute
Namespace: Akonadi

Detailed Description

Abstract class:
This class can be used as a base class for new classes, but can not be instantiated directly.

Provides interface for custom attributes for Entity.

This class is an interface for custom attributes, that can be stored in an entity. Attributes should be meta data, e.g. ACLs, quotas etc. that are not part of the entities' data itself.

Note that attributes are per user, i.e. when an attribute is added to an entity, it only applies to the current user.

To provide custom attributes, you have to subclass from this interface and reimplement the pure virtual methods.


 class SecrecyAttribute : public Akonadi.Attribute
 {
    public:
      enum Secrecy
      {
        Public,
        Private,
        Confidential
      };

      SecrecyAttribute( Secrecy secrecy = Public )
        : mSecrecy( secrecy )
      {
      }

      void setSecrecy( Secrecy secrecy )
      {
        mSecrecy = secrecy;
      }

      Secrecy secrecy() const
      {
        return mSecrecy;
      }

      virtual QByteArray type() const
      {
        return "secrecy";
      }

      virtual Attribute* clone() const
      {
        return new SecrecyAttribute( mSecrecy );
      }

      virtual QByteArray serialized() const
      {
        switch ( mSecrecy ) {
          case Public: return "public"; break;
          case Private: return "private"; break;
          case Confidential: return "confidential"; break;
        }
      }

      virtual void deserialize( const QByteArray &data )
      {
        if ( data == "public" )
          mSecrecy = Public;
        else if ( data == "private" )
          mSecrecy = Private;
        else if ( data == "confidential" )
          mSecrecy = Confidential;
      }
 }

Additionally, you need to register your attribute with Akonadi.AttributeFactory for automatic deserialization during retrieving of collecitons or items:

 AttributeFactory.registerAttribute<SecrecyAttribute>();

Third party attributes need to be registered once by each application that uses them. So the above snippet needs to be in the resource that adds the attribute, and each application that uses the resource. This may be simplified in the future.

The custom attributes can be used in the following way:


 Akonadi.Item item( "text/directory" );
 SecrecyAttribute* attr = item.attribute<SecrecyAttribute>( Item.AddIfMissing );
 attr->setSecrecy( SecrecyAttribute.Confidential );

and


 Akonadi.Item item = ...

 if ( item.hasAttribute<SecrecyAttribute>() ) {
   SecrecyAttribute *attr = item.attribute<SecrecyAttribute>();

   SecrecyAttribute.Secrecy secrecy = attr->secrecy();
   ...
 }

Author:
Volker Krause <vkrause@kde.org>


Methods

 deserialize (self, QByteArray data)
QByteArray serialized (self)
QByteArray type (self)

Method Documentation

deserialize (  self,
QByteArray  data
)
Abstract method:
This method is abstract and can be overridden but not called directly.

Sets the data of this attribute, using the same encoding as returned by toByteArray().

Parameters:
data  The encoded attribute data.

QByteArray serialized (   self )
Abstract method:
This method is abstract and can be overridden but not called directly.

Returns a QByteArray representation of the attribute which will be storaged. This can be raw binary data, no encoding needs to be applied.

QByteArray type (   self )
Abstract method:
This method is abstract and can be overridden but not called directly.

Returns the type of the attribute.

  • Full Index

Modules

  • akonadi
  • dnssd
  • kdecore
  • kdeui
  • khtml
  • kio
  • knewstuff
  • kparts
  • kutils
  • nepomuk
  • phonon
  • plasma
  • polkitqt
  • solid
  • soprano
This documentation is maintained by Simon Edwards.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal