예제 #1
0
def create(real_user, user, organization, **params):
    """
    Creates a project.
    """
    class ProjectForm(formencode.Schema):
        name = formencode.All(fv.UnicodeString(not_empty=True), UniqueName(organization))
        description = fv.UnicodeString(not_empty=False)
    
    scrubbed = validate(ProjectForm, **params)

    project = projects.Project(name=scrubbed.name,
                               creator=user,
                               description=scrubbed.description,
                               organization=organization)
    Session.add(project)
    Session.flush()
    
    #email
    users = organization.interested_users
    if user in users: users.remove(user)
    email.send(users, 'create_project.txt', {
        'project': project,
        'creator': user
    })
    
    return project
예제 #2
0
파일: file.py 프로젝트: Nullicopter/Desio
def add_comment(real_user, user, body, change=None, extract=None, in_reply_to=None, **kw):
    """
    Add a comment for either a change or an extract.
    """

    commentable = change or extract or in_reply_to.change
    
    comment = commentable.add_comment(user, body, in_reply_to=in_reply_to, **kw)
    
    #email
    if in_reply_to:
        users = in_reply_to.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_reply.txt', {
            'comment': comment,
            'creator': user,
            'parent_comment': in_reply_to,
            'entity': in_reply_to.change.entity,
            'change': in_reply_to.change,
        })
    else:
        ch = change or extract.change
        entity = ch.entity
        
        users = entity.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_comment.txt', {
            'comment': comment,
            'entity': entity,
            'change': ch,
            'creator': user
        })
    
    return commentable, comment
예제 #3
0
파일: auth.py 프로젝트: Nullicopter/Desio
    def _do_register(self, **kw):

        user = api.user.create(**dict(request.params))
        
        self.commit()
        
        email.send(user, 'registered.txt', {})
        
        return {'url': auth.login(user) or '/'}
예제 #4
0
파일: file.py 프로젝트: Nullicopter/Desio
def upload(real_user, user, project, **kw):
    """
    File is binary in the request body.
    """
    from pylons import request
    fname = utils.to_unicode(request.headers.get('X-Up-Filename'))
    type = utils.to_unicode(request.headers.get('X-Up-Type'))
    path = utils.to_unicode(request.headers.get('X-Up-Path'))
    description = utils.to_unicode(request.headers.get('X-Up-Description'))
    
    if not fname or not type or not path: return None
    
    ext = None
    if type:
        ext = mimetypes.guess_extension(type)
        if not ext:
            _, ext = os.path.splitext(fname)
        ext = ext or ''
    
    f, tmpname = tempfile.mkstemp(ext)
    #why is this returning an int on my machine? Supposed to be a file pointer.
    if isinstance(f, int):
        f = open(tmpname, 'wb')
    
    #this is inefficient. Pylons supposedly already creates a tmp file. We are instead
    #reading the thing into memory. I'm lazy until this beomes an issue (prolly soon)
    #V: please make this not suck
    f.write(request.environ['wsgi.input'].read())
    f.close()
    
    change = project.add_change(user, os.path.join(path, fname), tmpname, u'')
    
    if change.version == 1:
        #email
        users = project.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_file.txt', {
            'project': project,
            'change': change,
            'creator': user
        })
    else:
        #email
        users = change.entity.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_change.txt', {
            'project': project,
            'change': change,
            'creator': user
        })
    
    return change.entity, change
예제 #5
0
파일: file.py 프로젝트: Emamatcyber90/Desio
def upload(real_user, user, project, **kw):
    """
    File is binary in the request body.
    """
    from pylons import request
    fname = utils.to_unicode(request.headers.get('X-Up-Filename'))
    type = utils.to_unicode(request.headers.get('X-Up-Type'))
    path = utils.to_unicode(request.headers.get('X-Up-Path'))
    description = utils.to_unicode(request.headers.get('X-Up-Description'))

    if not fname or not type or not path: return None

    ext = None
    if type:
        ext = mimetypes.guess_extension(type)
        if not ext:
            _, ext = os.path.splitext(fname)
        ext = ext or ''

    f, tmpname = tempfile.mkstemp(ext)
    #why is this returning an int on my machine? Supposed to be a file pointer.
    if isinstance(f, int):
        f = open(tmpname, 'wb')

    #this is inefficient. Pylons supposedly already creates a tmp file. We are instead
    #reading the thing into memory. I'm lazy until this beomes an issue (prolly soon)
    #V: please make this not suck
    f.write(request.environ['wsgi.input'].read())
    f.close()

    change = project.add_change(user, os.path.join(path, fname), tmpname, u'')

    if change.version == 1:
        #email
        users = project.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_file.txt', {
            'project': project,
            'change': change,
            'creator': user
        })
    else:
        #email
        users = change.entity.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_change.txt', {
            'project': project,
            'change': change,
            'creator': user
        })

    return change.entity, change
예제 #6
0
 def create(cls, sid, email, creator=None, send_email=True):
     from desio.utils import email as email_mod
     
     be = cls.get(sid, email)
     
     if be: return be
     
     be = BetaEmail(sid=sid, email=email.lower(), creator=creator)
     Session.add(be)
     
     if send_email:
         email_mod.send(email, 'beta_email.txt', reply_to='*****@*****.**')
     
     return be
예제 #7
0
파일: create.py 프로젝트: Nullicopter/Desio
 def _do_create(self, **kw):
     user_params = extract(request.params, 'name', 'email', 'password', 'confirm_password', 'default_timezone')
     user = api.user.create(**user_params)
     
     org_params = {
         'company_name': request.params.get('company_name'),
         'subdomain': request.params.get('subdomain')
     }
     org = api.organization.create(user, user, **org_params)
     
     self.commit()
     
     email.send(user, 'new_organization.txt', {
         'organization': org
     })
     
     return {'url': auth.login(user) or pylons.config.get('subdomain_url') % (org.subdomain)}
예제 #8
0
파일: file.py 프로젝트: Emamatcyber90/Desio
def add_comment(real_user,
                user,
                body,
                change=None,
                extract=None,
                in_reply_to=None,
                **kw):
    """
    Add a comment for either a change or an extract.
    """

    commentable = change or extract or in_reply_to.change

    comment = commentable.add_comment(user,
                                      body,
                                      in_reply_to=in_reply_to,
                                      **kw)

    #email
    if in_reply_to:
        users = in_reply_to.interested_users
        if user in users: users.remove(user)
        email.send(
            users, 'create_reply.txt', {
                'comment': comment,
                'creator': user,
                'parent_comment': in_reply_to,
                'entity': in_reply_to.change.entity,
                'change': in_reply_to.change,
            })
    else:
        ch = change or extract.change
        entity = ch.entity

        users = entity.interested_users
        if user in users: users.remove(user)
        email.send(users, 'create_comment.txt', {
            'comment': comment,
            'entity': entity,
            'change': ch,
            'creator': user
        })

    return commentable, comment
예제 #9
0
    def _do_create(self, **kw):
        user_params = extract(request.params, 'name', 'email', 'password',
                              'confirm_password', 'default_timezone')
        user = api.user.create(**user_params)

        org_params = {
            'company_name': request.params.get('company_name'),
            'subdomain': request.params.get('subdomain')
        }
        org = api.organization.create(user, user, **org_params)

        self.commit()

        email.send(user, 'new_organization.txt', {'organization': org})

        return {
            'url':
            auth.login(user)
            or pylons.config.get('subdomain_url') % (org.subdomain)
        }
예제 #10
0
파일: invite.py 프로젝트: Nullicopter/Desio
    class Form(formencode.Schema):
        email = formencode.All(fv.Email(not_empty=True), fv.MaxLength(256))
        role = fv.OneOf(APP_ROLES, not_empty=True)
    validate(Form, role=role, email=email)
    
    obj = entity or project or organization
    try:
        invite = users.Invite.create(user, email, obj, role=role)
        commit()
    except AppException, e:
        if e.code == DUPLICATE:
            raise ClientException('%s has already been invited to %s' % (email, obj.name), DUPLICATE)
        raise ClientException(e.msg, e.code)
    
    email_mod.send(invite.invited_user or email, 'invite.txt', {
        'invite': invite,
        'invitee': user
    })
    return invite

@enforce(invite=users.Invite)
def get(invite):
    return invite

@enforce(invite=users.Invite)
@authorize(IsLoggedIn())
def accept(real_user, user, invite):
    invite.accept(user)
    return True

@enforce(invite=users.Invite)
@authorize(IsLoggedIn())
예제 #11
0
    validate(Form, role=role, email=email)

    obj = entity or project or organization
    try:
        invite = users.Invite.create(user, email, obj, role=role)
        commit()
    except AppException, e:
        if e.code == DUPLICATE:
            raise ClientException(
                '%s has already been invited to %s' % (email, obj.name),
                DUPLICATE)
        raise ClientException(e.msg, e.code)

    email_mod.send(invite.invited_user or email, 'invite.txt', {
        'invite': invite,
        'invitee': user
    })
    return invite


@enforce(invite=users.Invite)
def get(invite):
    return invite


@enforce(invite=users.Invite)
@authorize(IsLoggedIn())
def accept(real_user, user, invite):
    invite.accept(user)
    return True