I'm trying to build a custom type [1] to manage the bcrypt hashes [2].

---------------
from bcrypt_wrap import password
from sqlalchemy import types


class Bcrypt(types.TypeDecorator):
  """Stores a bcrypt hash of a password."""
  impl = types.String #(60)
  hasher = password.Password()

  def process_bind_param(self, value, dialect):
    return hasher.create(value)
---------------

And I've any doubts:

1) Since that the hash length is always 60, is there that use the
next?
  impl = types.String(60)

2) The bcryptWrap API [3] (line 53) lets call to 'create' with
arguments 'cost' and 'admin' (boolean). Then,

  a) I would that the cost could be passed from the column definition,
i.e.
      password = sqlalchemy.Column(types.Bcrypt, cost=12)
or
      password = sqlalchemy.Column(types.Bcrypt(cost=12))

  b) This would be more hard, but I would to pass the 'admin' argument
when an object is created

    u = model.User()
    u.login = u'foo'
    u.password = u'bar'
    u.admin = True

    And sou could be call:
        return hasher.create(value, admin=True)


[1] 
http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/types.html#custom-types

[2] http://pypi.python.org/pypi/bcryptWrap/

[3] http://www.bitbucket.org/ares/bcryptwrap/src/tip/lib/bcrypt_wrap/password.py

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to