equal
deleted
inserted
replaced
29 from logilab.common.decorators import cached |
29 from logilab.common.decorators import cached |
30 from logilab.common.compat import any |
30 from logilab.common.compat import any |
31 from logilab.common import flatten |
31 from logilab.common import flatten |
32 |
32 |
33 from yams import BadSchemaDefinition |
33 from yams import BadSchemaDefinition |
|
34 from yams.schema import role_name |
34 from rql import RQLSyntaxError |
35 from rql import RQLSyntaxError |
35 |
36 |
36 from cubicweb import (CW_SOFTWARE_ROOT, CW_MIGRATION_MAP, |
37 from cubicweb import (CW_SOFTWARE_ROOT, CW_MIGRATION_MAP, |
37 UnknownEid, AuthenticationError, ExecutionError, |
38 UnknownEid, AuthenticationError, ExecutionError, |
38 ETypeNotSupportedBySources, MultiSourcesError, |
39 ETypeNotSupportedBySources, MultiSourcesError, |
517 errmsg = session._('the value "%s" is already used, use another one') |
518 errmsg = session._('the value "%s" is already used, use another one') |
518 try: |
519 try: |
519 if (session.execute('CWUser X WHERE X login %(login)s', {'login': login}) |
520 if (session.execute('CWUser X WHERE X login %(login)s', {'login': login}) |
520 or session.execute('CWUser X WHERE X use_email C, C address %(login)s', |
521 or session.execute('CWUser X WHERE X use_email C, C address %(login)s', |
521 {'login': login})): |
522 {'login': login})): |
522 raise ValidationError(None, {'login': errmsg % login}) |
523 qname = role_name('login', 'subject') |
|
524 raise ValidationError(None, {qname: errmsg % login}) |
523 # we have to create the user |
525 # we have to create the user |
524 user = self.vreg['etypes'].etype_class('CWUser')(session, None) |
526 user = self.vreg['etypes'].etype_class('CWUser')(session, None) |
525 if isinstance(password, unicode): |
527 if isinstance(password, unicode): |
526 # password should *always* be utf8 encoded |
528 # password should *always* be utf8 encoded |
527 password = password.encode('UTF8') |
529 password = password.encode('UTF8') |
532 session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"', |
534 session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"', |
533 {'x': user.eid}) |
535 {'x': user.eid}) |
534 if email or '@' in login: |
536 if email or '@' in login: |
535 d = {'login': login, 'email': email or login} |
537 d = {'login': login, 'email': email or login} |
536 if session.execute('EmailAddress X WHERE X address %(email)s', d): |
538 if session.execute('EmailAddress X WHERE X address %(email)s', d): |
537 raise ValidationError(None, {'address': errmsg % d['email']}) |
539 qname = role_name('address', 'subject') |
|
540 raise ValidationError(None, {qname: errmsg % d['email']}) |
538 session.execute('INSERT EmailAddress X: X address %(email)s, ' |
541 session.execute('INSERT EmailAddress X: X address %(email)s, ' |
539 'U primary_email X, U use_email X WHERE U login %(login)s', d) |
542 'U primary_email X, U use_email X WHERE U login %(login)s', d) |
540 session.commit() |
543 session.commit() |
541 finally: |
544 finally: |
542 session.close() |
545 session.close() |