Giter VIP home page Giter VIP logo

django-enumfield's Introduction

django-enumfield

Provides an enumeration Django model field (using IntegerField) with reusable enums and transition validation.

Build Status PyPi Version License Python Versions Wheel Coveralls github

Installation

Currently, we test Django versions 2.2-4.1 and Python versions 3.7-3.11.

Install django-enumfield in your Python environment:

$ pip install django-enumfield

Upgrading from django-enumfield 1.x? See the migration guide

For use with Django versions prior to 1.8 use version 1.2.1

For use with Django versions prior to 1.11 use version 1.5

Usage

Create an Enum-class and pass it as first argument to the Django model EnumField.

from django.db import models
from django_enumfield import enum


class BeerStyle(enum.Enum):
    LAGER = 0
    STOUT = 1
    WEISSBIER = 2


class Beer(models.Model):
    style = enum.EnumField(BeerStyle, default=BeerStyle.LAGER)


# Use .get to get enum values from either name or ints
print(BeerStyle.get("LAGER"))  # <BeerStyle.LAGER: 0>
print(BeerStyle.get(1))  # <BeerStyle.STOUT: 1>
print(BeerStyle.get(BeerStyle.WEISSBIER))  # <BeerStyle.WEISSBIER: 2>

# It's also possible to use the normal enum way to get the value
print(BeerStyle(1))  # <BeerStyle.STOUT: 1>
print(BeerStyle["LAGER"])  # <BeerStyle.LAGER: 0>

# The enum value has easy access to their value and name
print(BeerStyle.LAGER.value)  # 0
print(BeerStyle.LAGER.name)  # "LAGER"

For more information about Python 3 enums (which our Enum inherits, IntEnum to be specific) checkout the docs.

Setting the default value

You can also set default value on your enum class using __default__ attribute

from django.db import models
from django_enumfield import enum


class BeerStyle(enum.Enum):
    LAGER = 0
    STOUT = 1
    WEISSBIER = 2

    __default__ = LAGER


class BeerStyleNoDefault(enum.Enum):
    LAGER = 0


class Beer(models.Model):
    style_default_lager = enum.EnumField(BeerStyle)
    style_default_stout = enum.EnumField(BeerStyle, default=BeerStyle.STOUT)
    style_default_null = enum.EnumField(BeerStyleNoDefault, null=True, blank=True)


# When you set __default__ attribute, you can access default value via
# `.default()` method of your enum class
assert BeerStyle.default() == BeerStyle.LAGER

beer = Beer.objects.create()
assert beer.style_default_larger == BeerStyle.LAGER
assert beer.style_default_stout == BeerStyle.STOUT
assert beer.style_default_null is None

Labels

You can use your own labels for Enum items

from django.utils.translation import gettext_lazy
from django_enumfield import enum


class Animals(enum.Enum):
    CAT = 1
    DOG = 2
    SHARK = 3

    __labels__ = {
        CAT: gettext_lazy("Cat"),
        DOG: gettext_lazy("Dog"),
    }


print(Animals.CAT.label)  # "Cat"
print(Animals.SHARK.label)  # "SHARK"

# There's also classmethods for getting the label
print(Animals.get_label(2))  # "Dog"
print(Animals.get_label("DOG"))  # "Dog"

Validate transitions

The Enum-class provides the possibility to use transition validation.

from django.db import models
from django_enumfield import enum
from django_enumfield.exceptions import InvalidStatusOperationError


class PersonStatus(enum.Enum):
    ALIVE = 1
    DEAD = 2
    REANIMATED = 3

    __transitions__ = {
        DEAD: (ALIVE,),  # Can go from ALIVE to DEAD
        REANIMATED: (DEAD,)  # Can go from DEAD to REANIMATED
    }


class Person(models.Model):
    status = enum.EnumField(PersonStatus)

# These transitions state that a PersonStatus can only go to DEAD from ALIVE and to REANIMATED from DEAD.
person = Person.objects.create(status=PersonStatus.ALIVE)
try:
    person.status = PersonStatus.REANIMATED
except InvalidStatusOperationError:
    print("Person status can not go from ALIVE to REANIMATED")
else:
    # All good
    person.save()

In forms

The Enum-class can also be used without the EnumField. This is very useful in Django form ChoiceFields.

from django import forms
from django_enumfield import enum
from django_enumfield.forms.fields import EnumChoiceField


class GenderEnum(enum.Enum):
    MALE = 1
    FEMALE = 2

    __labels__ = {
        MALE: "Male",
        FEMALE: "Female",
    }


class PersonForm(forms.Form):
    gender = EnumChoiceField(GenderEnum)

Rendering PersonForm in a template will generate a select-box with "Male" and "Female" as option labels for the gender field.

Local Development Environment

Make sure black and isort is installed in your env with pip install -e .[dev].

Before committing run make format to apply black and isort to all files.

django-enumfield's People

Contributors

adamjlev avatar andreif avatar antonagestam avatar bh avatar dekkers avatar fcurella avatar flaeppe avatar hannseman avatar jessamynsmith avatar jschneier avatar kjagiello avatar lamby avatar lundberg avatar nicolasgrasset avatar piotrpawlaczek avatar swamii avatar thedrow avatar timgates42 avatar twschiller avatar vitaliyf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

django-enumfield's Issues

Import error in Django 4.0

  File "/srv/service/my_project/my_feature/models.py", line 8, in <module>
    from django_enumfield.enum import Enum
  File "/usr/local/lib/python3.9/site-packages/django_enumfield/enum.py", line 15, in <module>
    from django_enumfield.db.fields import EnumField
  File "/usr/local/lib/python3.9/site-packages/django_enumfield/db/fields.py", line 8, in <module>
    from django.utils.encoding import force_text
ImportError: cannot import name 'force_text' from 'django.utils.encoding' (/usr/local/lib/python3.9/site-packages/django/utils/encoding.py)

Features removed in 4.0

Hooking into transitions

Is there any functionality to hook into transitions and execute some logic when the transition occurs?

Consider moving project into jazzband?

It looks like development and support of django-enumfield for Django 1.9 and 1.10 is stalling a little, so maybe it would help maintenance if the project was adopted by jazzband so more eyes and hands can get involved?

I use a few other packages that were coasting before but moved to jazzband and now receive fixes and improvements again (hurray for community ownership).

It is a bit of a process and there are rules and guidelines. I'm not even 100% clear if this project qualifies, but this is one of the main django + enum apps out there so I guess it would be?

Use native Enum class

Since 3.4 Python has a native Enum class.
It's backported here.
Instead of a custom implementation those should be used.

Pylint issue with Enum extension

Hi there! I have an issue with pylint using Enum from django_enumfield.enum: E0244: Extending inherited Enum class "Enum" (invalid-enum-extension). It referenced to https://pylint.pycqa.org/en/latest/user_guide/messages/error/invalid-enum-extension.html.

This looks strange because I don't have any errors in runtime, but... I suppose mute this error is not a good idea, so could you please give me an advice? Is this error in django-enumfield or in pylint?

I'd like to fix it if you have an idea how it will be correct.

changelog?

I am using version 1.2. I'd like to know what has changed in the current version 1.2.1?

Is there a changelog to know what has changed when there is a new version? That'd be useful.

Thanks

Transition not working properly

I'm unable to transition properly when using the prescribed. I'm using Python 2.7 (r27:82500, Nov 3 2014, 10:50:44) on CentOS 6.5. I'm using Django 1.7.1 and django-enumfield 1.1.1.

Here's my Enum and corresponding model:

class ScheduledReportStatus(enum.Enum):
    QUEUED = 0
    RUNNING = 1
    CANCELLING = 2
    STOPPING = 3
    CANCELLED = 4
    STOPPED = 5
    FINISHED = 6

    labels = {
        QUEUED: 'Queued',
        RUNNING: 'Running',
        CANCELLING: 'Cancelling',
        STOPPING: 'Stopping',
        CANCELLED: 'Cancelled',
        STOPPED: 'Stopped',
        FINISHED: 'Finished'
    }

    _transitions = {
        QUEUED: (RUNNING, CANCELLING),
       RUNNING: (STOPPING, FINISHED),
        CANCELLING: (CANCELLED,),
        STOPPING: (STOPPED,),
        CANCELLED: (QUEUED,),
        STOPPED: (QUEUED,)
    }


class ScheduledReport(models.Model):
    type = models.CharField(max_length=255)
    params = models.TextField()
    status = enum.EnumField(
        ScheduledReportStatus,
        default=ScheduledReportStatus.QUEUED
    )
    result = models.TextField()
    requested_by = models.CharField(max_length=100)
    requested_on = models.DateTimeField(
        auto_now=False,
        auto_now_add=True
    )

    class Meta:
        ordering = ['-requested_on']

    def __unicode__(self):
        return "%s - %s - %s" % (
            self.type,
            self.requested_by,
            self.requested_on.strftime('%m/%d/%Y')
        )

Whenever I make a transition from QUEUED to RUNNING, I get an exception:

$ python /site/manage.py shell
Python 2.7 (r27:82500, Nov  3 2014, 10:50:44)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from viewership.models import *
>>> rep = ScheduledReport.objects.get(id=39)
>>> rep.status
0L
>>> ScheduledReportStatus.labels[rep.status]
'Queued'
>>> rep.status = ScheduledReportStatus.RUNNING
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/venv/lib/python2.7/site-packages/django_enumfield/db/fields.py", line 45, in set_enum
    validators.validate_valid_transition(enum, old_value, new_value)
  File "/venv/lib/python2.7/site-packages/django_enumfield/validators.py", line 17, in validate_valid_transition
    to_value=enum.name(to_value) or to_value
InvalidStatusOperationError: [u'ScheduledReportStatus can not go from "QUEUED" to "RUNNING"']
>>>

I've also tried by adjusting my transitions to the following as a test, but there was no change in the result.

    _transitions = {
        QUEUED: (RUNNING,),
       RUNNING: (FINISHED,),
        CANCELLING: (CANCELLED,),
        STOPPING: (STOPPED,),
        CANCELLED: (QUEUED,),
        STOPPED: (QUEUED,)
    }

Enum Serializer Field for Django Rest Framework?

Thank you for this package, it works very well and closes a pretty glaring gap in Django ORM.

I've looked through the docs and the source and found no provision for using an enum field in django-rest-framework. Was this omitted intentionally, or has the need not arisen? I ask because I'm happy to contribute a serializer field if it is welcome.

Django 1.9: EnumField.__init__ not being passed enum argument

Just wondering if anyone was working on Django 1.9 compatibility. I'm running into an issue where, I think, Django is doing some migration state check that called the EnumField.__init__ method without passing the enum arg. Wanted to check if anyone else had encountered this or had a workaround before I messed around with it.
Cheers!

django-enumfield is not Django 3.1rc1 compatible

Hi,

I'm using django 3.1rc1 and Python 3.8.5 and here is the problem.
Do you plan a version for Django 3.1 ?

The classproperty has been moved from utils.decorators to utils.functional

image

Thank you !

Have a nice day.

  from django_enumfield import enum
File "/opt/log_transaction/docker/.venv/lib/python3.8/site-packages/django_enumfield/enum.py", line 8, in <module>
  from django.utils.decorators import classproperty
container_django_transactions_colombie_dev | ImportError: cannot import name 'classproperty' from 'django.utils.decorators' (/opt/log_transaction/docker/.venv/lib/python3.8/site-packages/django/utils/decorators.py)

enum.EnumField seems not to work in Django 1.10

In django 1.10 get_deferred_fields routine from django.db.models.base counts all enum.EnumField fields in a model as deferred fields. As a result it passes update_fields in save_base routine and raises "Cannot force an update in save() with no primary key" exception when I attempt to save new model instance.

In django 1.9.9 the same model works okay. I am using django-enumfield==1.3b2 installed with pip

_get_FIELD_display throws error if value is None

In the 2.0 release, _get_FIELD_display throws an error if the value is None. I think the code needs to be changed to:

def _get_FIELD_display(self, cls):
    value = getattr(cls, self.attname)
    if value is None:
         return value
    return force_text(value.label, strings_only=True)

issue upgrading django to 1.9

I was just trying to upgrade my 1.8 application to 1.9. Everything seemed to work fine, until I tried to run 'makemigrations', which is blowing up on my EnumFields. See this gist for the traceback and details.

Any reason why IntegerField is the only type supported?

We have a lot of string tuples, while I agree that it would take infinitely less space in the db (space is cheap now a days); we have dba's that deal with the db directly and the strings are a lot more descriptive. I'm curious why the option is not available. Thank you.

Using Verbose_name

Hi @hannseman ,

Is it possible set a verbose_name? How?

Example (way to do that):

field = enum.EnumField(..., verbose_name=_(u"......."), default=......)

I really appreciate the attention.
Thanks,

KeyError error not explicit?

Here is the code I use:

class State(enum.Enum):
    NEW = 1
    ACTIVE = 2
    _transitions = {
        ACTIVE : (NEW,),
    }

class User(models.Model):
    state = enum.EnumField(State, blank=False, null=False, default=State.NEW)
>>> user.plan = State.NEW
>>> user.save()
>>> user.plan = State.ACTIVE
>>> user.save()
>>> user.plan = State.NEW
----> 1 u.plan = State.NEW
/home/vagrant/venv/lib/python3.4/site-packages/django_enumfield/db/fields.py in set_enum(self, new_value)
     42             setattr(self, private_att_name, new_value)
     43             # Run validation for new value.
---> 44             validators.validate_valid_transition(enum, old_value, new_value)
     45
     46         def get_enum(self):

/home/vagrant/venv/lib/python3.4/site-packages/django_enumfield/validators.py in validate_valid_transition(enum, from_value, to_value)
     10     """
     11     validate_available_choice(enum, to_value)
---> 12     if hasattr(enum, '_transitions') and not enum.is_valid_transition(from_value, to_value):
     13         message = _(six.text_type('{enum} can not go from "{from_value}" to "{to_value}"'))
     14         raise InvalidStatusOperationError(message.format(

/home/vagrant/venv/lib/python3.4/site-packages/django_enumfield/enum.py in is_valid_transition(cls, from_value, to_value)
    150         :rtype: bool
    151         """
--> 152         return from_value == to_value or from_value in cls.transition_origins(to_value)
    153
    154     @classmethod

/home/vagrant/venv/lib/python3.4/site-packages/django_enumfield/enum.py in transition_origins(cls, to_value)
    159         :rtype: list
    160         """
--> 161         return cls._transitions[to_value]
    162
    163

KeyError: 1

I understand the _transitions variable does not have 1 as a key since I did not define a key for NEW. However, if that means that the status cannot be set to NEW from any other status, wouldn't it be better to have an InvalidStatusOperationError?

Thanks

ImportError: No module named run_tests

If I try to build a debian packagee from the source code, I get the error message:

ImportError: No module named run_tests

The solution seems to me to put the file 'run_tests.py' into the source tarball, which is delivered on pypi.

disabled field fills wrong initial value

Hi, I have an enumfield that I have disabled as part of a form with disabled=True. however then the validation always validates the field as being wrong.

After some debugging I found this is due to the fact that the value given to clean differs if the field is disabled or not. when it is not disabled it is a string containing a number if it is disabled it is a string containing the string name of the enum option.

I have spend quite some time thinking about a solution myself but cant get it right. Does any of the maintainers have an idea? Thanks in advance!

python 3.9.2 seems to break enumfields

After upgrading to python 3.9.2 I am now unable to import from the enumfields package

3.9.2 changed the way subclassing and multiple inheritance works so it might be related?

Python 3.9.2 (default, Feb 20 2021, 20:59:40) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from enumfields import EnumIntegerField
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/__init__.py", line 1, in <module>
    from .enums import Enum, IntEnum
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/enums.py", line 28, in <module>
    class Enum(EnumMeta('Enum', (BaseEnum,), _EnumDict())):
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/enums.py", line 18, in __new__
    obj = BaseEnumMeta.__new__(mcs, name, bases, attrs)
  File "/usr/lib/python3.9/enum.py", line 212, in __new__
    classdict['__doc__'] = 'An enumeration.'
  File "/usr/lib/python3.9/enum.py", line 97, in __setitem__
    if _is_private(self._cls_name, key):
AttributeError: '_EnumDict' object has no attribute '_cls_name'
>>> from enumfields import EnumField
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/__init__.py", line 1, in <module>
    from .enums import Enum, IntEnum
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/enums.py", line 28, in <module>
    class Enum(EnumMeta('Enum', (BaseEnum,), _EnumDict())):
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/enums.py", line 18, in __new__
    obj = BaseEnumMeta.__new__(mcs, name, bases, attrs)
  File "/usr/lib/python3.9/enum.py", line 212, in __new__
    classdict['__doc__'] = 'An enumeration.'
  File "/usr/lib/python3.9/enum.py", line 97, in __setitem__
    if _is_private(self._cls_name, key):
AttributeError: '_EnumDict' object has no attribute '_cls_name'
>>> import enumfields
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/__init__.py", line 1, in <module>
    from .enums import Enum, IntEnum
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/enums.py", line 28, in <module>
    class Enum(EnumMeta('Enum', (BaseEnum,), _EnumDict())):
  File "/var/www/.venv/lib/python3.9/site-packages/enumfields/enums.py", line 18, in __new__
    obj = BaseEnumMeta.__new__(mcs, name, bases, attrs)
  File "/usr/lib/python3.9/enum.py", line 212, in __new__
    classdict['__doc__'] = 'An enumeration.'
  File "/usr/lib/python3.9/enum.py", line 97, in __setitem__
    if _is_private(self._cls_name, key):
AttributeError: '_EnumDict' object has no attribute '_cls_name'

Transition validation failure leaves field in unvalidated state

Hello, I'm doing some unittesting around a workflow which is enabled by django-enumfield enum __transitions__, and I'm seeing something unexpected. Suppose we had:

class StatusEnum(Enum):
    NEW = 0
    PENDING = 1
    UNREACHABLE = 3

    __default__ = NEW

    __transitions__ = {
        NEW: (PENDING,),
        PENDING: (NEW,),
        UNREACHABLE: (PENDING,),

    }


class WorkflowModel(models.Model):
    status = EnumField(StatusEnum)

Then, if I were to run something like:

assert workflow_instance.status == StatusEnum.NEW

try:
    workflow_instance.status = StatusEnum.UNREACHABLE
except InvalidStatusOperationError:
    pass

assert workflow_instance.status == StatusEnum.UNREACHABLE

No AssertionError would raise! The status of the field will appear as UNREACHABLE, even though that should be impossible as the change did not pass validation. The behavior I expected was that the field value would be returned to it's pre-validation value (namely NEW). As I write this I'm realizing that the existing behavior permits bypassing validation, which may be a feature, and not a bug; so a change may not really be necessary.

Thanks for this package, it is great and necessary!

Nested enum generates incorrect migration

This is using Django 1.9 with django-enumfield 1.3b2

class Hike(models.Model):
    class ExposureType(enum.Enum):
        UNKNOWN = 0
    exposure_type = enum.EnumField(ExposureType, default=ExposureType.UNKNOWN)

generates

    operations = [
        migrations.AlterField(
            model_name='hike',
            name='exposure_type',
            field=django_enumfield.db.fields.EnumField(default=0, enum=base.models.ExposureType),
        ),

It should instead generate enum=base.models.Hike.ExposureType

define a required field with no default

The code automatically sets the first choice as the default value: https://github.com/5monkeys/django-enumfield/blob/master/django_enumfield/db/fields.py#L16-L17

I think this behavior is misleading because if someone defines a field with no default, he expects the field to have no default assigned so that an error is raised if the field is also required.

Right now, it's impossible to have a required field (null=False) with no default that would work as expected in the admin.

enum.EnumField(STATUSES, blank=True, null=False)

Setting default=None obviously doesn't work as the whole code assumes there is a value.

Supporting Django 2?

Now it fails with error AttributeError: module 'django.db.models' has no attribute 'SubfieldBase'

New stable release

We are encountering problems with the fact that the EnumField in version 1.5 dot not allow mandatory field because it set by default based on the default of Enum.

We also noticed that you have already fixed it in the latest beta release.

What's is blocking the new stable release?

SubfieldBase has been deprecated. Use Field.from_db_value instead

Using Django 1.9.5 you get the following deprecation warning:

C:\Python35-32\lib\site-packages\enumfields\fields.py:99: RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead.
  class EnumIntegerField(EnumFieldMixin, models.IntegerField):

Install library six when installing django-enumfield

Installing django-enumfield using pip doesn't install required library six.

Steps to reproduce:

  1. Start with environment only containing django 1.7

  2. pip install django-enumfield

    ImportError: No module named six

TypeError: Type str doesn't support the buffer API

Python noob here...

When installing with pip install django-enumfield I get the following error:

Traceback (most recent call last):

  File "<string>", line 16, in <module>

  File "/Users/danielesalatti/Documents/Projects/books-vanth/env/build/django-enumfield/setup.py", line 110, in <module>

    test_suite='run_tests.main',

  File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/core.py", line 148, in setup

    dist.run_commands()

  File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/dist.py", line 929, in run_commands

    self.run_command(cmd)

  File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/dist.py", line 948, in run_command

    cmd_obj.run()

  File "<string>", line 13, in replacement_run

  File "/Users/danielesalatti/Documents/Projects/books-vanth/env/lib/python3.3/site-packages/setuptools/command/egg_info.py", line 415, in write_pkg_info

    metadata.write_pkg_info(cmd.egg_info)

  File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/dist.py", line 1027, in write_pkg_info

    self.write_pkg_file(pkg_info)

  File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/dist.py", line 1048, in write_pkg_file

    long_desc = rfc822_escape(self.get_long_description())

  File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/util.py", line 490, in rfc822_escape

    lines = header.split('\n')

TypeError: Type str doesn't support the buffer API

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /Users/danielesalatti/Documents/Projects/books-vanth/env/build/django-enumfield
Storing complete log in /Users/danielesalatti/.pip/pip.log

I'm on a Mac, with Python 3.3.3 installed via homebrew.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.