Metadata-Version: 2.0
Name: py3traits
Version: 1.0.0
Summary: Trait support for Python 3
Home-page: https://github.com/Debith/pytraits
Author: Teppo PerÃ¤
Author-email: debith-dev@outlook.com
License: Apache License 2
Keywords: traits
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: Unix
Classifier: Operating System :: Microsoft :: Windows
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Topic :: Utilities

===============================
py3traits
===============================

| |docs| |travis|

.. |docs| image:: https://readthedocs.org/projects/py3traits/badge/?style=flat
    :target: https://readthedocs.org/projects/py3traits
    :alt: Documentation Status

.. |travis| image:: http://img.shields.io/travis/Debith/py3traits/master.png?style=flat
    :alt: Travis-CI Build Status
    :target: https://travis-ci.org/Debith/py3traits

Trait support for Python 3

* Free software: Apache license

Installation
============

::

    pip install py3traits

Documentation
=============

https://py3traits.readthedocs.org/

Development
===========

To run the all tests run::

    tox

About Traits
============

Traits are classes which contain methods that can be used to extend
other classes, similar to mixins, with exception that traits do not use
inheritance. Instead, traits are composed into other classes. That is;
methods, properties and internal state is copied to master object.

The point is to improve code reusability by dividing code into simple
building blocks that can be then combined into actual classes.

Read more from wikipedia: http://en.wikipedia.org/wiki/Traits_class

----------------------------------------------------------------

Features
========
 - Composition of Traits
    - [X] No conflicts
    - [X] Cherry-picking
    - [ ] Symmertric Sum
    - [ ] Override
    - [X] Alias (rename)
    - [ ] Exclusion
 - Supported Trait Targets
    - [X] Classes
    - [X] Instances
 - Supported Trait Types
    - [X] Classes
    - [X] Instances
    - [X] Methods
    - [X] Functions
      - [X] as instance methods
      - [X] as classmethods
      - [X] as staticmethods
    - [X] Properties
 - Supported trait access level
      - [X] Private class attributes
      - [X] Hidden class attributes
      - [X] Public class attributes
      - [X] Private instance attributes
      - [X] Hidden instance attributes
      - [X] Public instance attributes
 - [X] Singleton


Composition of Traits
---------------------

Traits are classes that are not supposed to run stand alone (nothing stops to make them work
like that though). Traits are classes that are composed (by copying functions and properties)
into other classes. Advantage is that there is no inheritance happening and so there are no
typical problems occurring with normal inheritance. For instance, diamond inheritance is not
possible as everything is copied to target class and all conflicting methods and properties
needs to be resolved during composition.

In Python, this kind of approach is handy with metaclasses, since metaclasses have very strict
requirements for inheritance.

This library goes bit further than extending just classes. It's possible to also compose traits
into instances of classes, in which case, composition only affects single instance, not whole
class. Also, this library allows cherrypicking methods and properties from other classes and
composing them to target objects. If anything, it at least enables possibility for highly
creative ways to reuse your code.


Changelog
=========

1.0.0 (2015-05-25)
------------------
  - First official release

0.15.0 (2015-05-23)
-------------------
  - New feature: Alternative syntax added to add_traits function
  - Added example for alternative syntx
  - Added example about creating new class from the traits

0.14.0 (2015-05-19)
-------------------
  - New feature: Setter and Deleter for properties are now supported

0.13.0 (2015-04-25)
-------------------
  - New feature: Decorator type_safe to check function arguments
  - New feature: combine_class function takes name for new class as first argument
  - Refactoring magic.py to look less like black magic
  - Improving errors.py exception class creation to accept custom messages

0.12.0 (2015-04-22)
-------------------
  - New feature: Rename of composed traits
  - Cleaning up parts belonging to py2traits

0.11.0 (2015-04-18)
-------------------
  - PEP8 fixes
  - General cleaning for all files
  - Removed unused parts
  - Removed Python 2 code

0.10.0 (2015-03-30)
-------------------
  - Splitting into two projects: py2traits and py3traits
  - Taking new project template to use from cookiecutter.

0.9.0 Bringing back compatibility to Python 2.x
-----------------------------------------------
  - Some small clean up too

0.8.0 Adding support to private class and instance attributes
-------------------------------------------------------------
  - Redone function binding to include recompilation of the function
  - Leaving Python 2.x into unsupported state temporarily.

0.7.0 Improving usability of the library
----------------------------------------
  - Introduced new extendable decorator, which adds function to add traits to object
  - Introduced new function combine_class to create new classes out of traits
  - Fixed module imports through out the library
  - Improved documentation in examples

0.6.0 Restructuring into library
--------------------------------
  - Added support for py.test
  - Preparing to support tox
  - Improved multiple examples and renamed them to make more sense
  - Removed the need of having two separate code branches for different Python versions

0.5.0 Instances can now be extended with traits in Python 3.x
-------------------------------------------------------------
  - Instance support now similar to classes
  - Added more examples

0.4.0 Completed function binding with examples in Python 2.x
------------------------------------------------------------
  - Separate functions can now be bound to classes
    - Functions with 'self' as a first parameter will be acting as a method
    - Functions with 'cls' as a first parameter will be acting as classmethod
    - Other functions will be static methods.
  - Fixed an issue with binding functions

0.3.0 Trait extension support without conflicts for Python 2.x
--------------------------------------------------------------
  - Classes can be extended
  - Instances can be extended
  - Python 2.x supported

0.2.0 Apache License Updated
----------------------------
  - Added apache 2.0 license to all files
  - Set the character set as utf-8 for all files

0.1.0 Initial Version
---------------------
  - prepared files for Python 2.x
  - prepared files for Python 3.x


