Exemplo n.º 1
0
    def __call__(self, environ, start_response):

        current_user = users.get_current_user()
        url = users.create_login_url("/")

        req = Request(environ)

        non_auth_urls = ['/create_role', '/p', '/users', '/add_emp', '/edit_user', '/upload_contacts', '/parse_xls']
        if environ['PATH_INFO'] not in non_auth_urls:

            if current_user is None:
                try:
                    auth_header = req.headers['Authorization']
                except KeyError:
                    resp = Response(status="307", location=url)
                    return resp(environ, start_response)

                username, password = '', ''
                try:
                    user_info = base64.decodestring(auth_header[6:])
                    username, password = user_info.split(':')

                except ValueError:
                    resp = Response(status="401")
                    return resp(environ, start_response)

                user_info = User.gql("WHERE username = :username ",
                            username=username).get()

                if user_info is None:
                    resp = Response(status="401")
                    return resp(environ, start_response)

                if not check_password(password, user_info.password):
                    resp = Response(status="401")
                    return resp(environ, start_response)
            else:
                email = str(current_user.email()).strip()
                user_info = User.all().filter('email', email).get()

                if user_info is None:
                    user_info = User(
                        email=current_user.email())
                    user_info.put()

            environ["current_user"] = user_info

            try:
                environ["current_role"] = Model.get(user_info.role[0]).value
            except IndexError:
                environ["current_role"] = ''

        resp = req.get_response(self.app)
        return resp(environ, start_response)
Exemplo n.º 2
0
    def get(self):

        file_key = ContactXlsFile.all().get().file_key
        blob_info = blobstore.BlobInfo.get(file_key)
        file = blob_info.open().read()

        wb = xlrd.open_workbook(file_contents=file)
        wb.sheet_names()
        sh = wb.sheet_by_index(0)

        cols_dict = {'first_name': 1,
                     'last_name': 0,
                     'dept': 2,
                     'position': 3,
                     'email': 4,
                     'manager': 12}
        manager_dict = {}

        reg = "^\s+|\n|\r|\s+$"

        employee_role = Role.all().filter('value', 'employee').get().key()

        for rownum in range(sh.nrows)[6:]:
            email = sh.cell_value(rownum, cols_dict['email']).strip()
            user = User.all().filter('email', email).get()
            if user is None:
                user = User(email=email)
                user.put()

            if not user.role:
                user.role.append(employee_role)

            string_fields = ['first_name',
                             'last_name',
                             'position',
                             ]

            for field in string_fields:
                value = re.sub(reg,
                               '',
                               sh.cell_value(rownum, cols_dict[field]))
                setattr(user, field, value)

            department_str = re.sub(reg,
                                    '',
                                    sh.cell_value(rownum, cols_dict['dept']))
            department = Dept.all().filter('name', department_str).get()
            if department is None:
                department = Dept(name=department_str)
                department.put()
            user.dept = department

            user.put()

            manager_str = re.sub(reg,
                                 '',
                                 sh.cell_value(rownum, cols_dict['manager']))
            manager_dict[user.key()] = manager_str

        manager_role = Role.all().filter('value', 'manager').get().key()

        for user_key in manager_dict:

            manager_str = manager_dict[user_key].replace('  ', ' ')

            if manager_str:
                last_name, first_name = manager_str.split(' ')[:2]
                manager = User.all().filter('last_name',
                                            last_name).filter('first_name',
                                                              first_name).get()
            else:
                manager = None

            if manager is not None:
                if manager_role not in manager.role:
                    manager.role.append(manager_role)
                    manager.put()

            user = User.get(user_key)
            user.manager = manager
            user.put()

        self.redirect('/users')