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)
def post(self): manager_email = self.request.get('manager_email') pr_key = self.request.get('pr_key') manager = User.gql("WHERE email = :manager_email", manager_email = manager_email).get() pr = PerformanceReview.get(pr_key) if manager is None: self.response.out.write('Some error happened. Try again please') return comment_to_form = CommentToForm.gql("WHERE pr = :pr AND manager = :manager", pr = pr, manager = manager).get() if comment_to_form is None: comment_to_form = CommentToForm(manager = manager, pr = pr) comment_to_form.put() self.response.out.write('You have successfully requested comment form %s %s' %(manager.first_name, manager.last_name)) else: self.response.out.write('You have already requested comment form %s %s' %(manager.first_name, manager.last_name))
def get(self, role, pr_key, blob_key): blob_key = str(urllib.unquote(blob_key)) blob_info = blobstore.BlobInfo.get(blob_key) current_pr = PerformanceReview.get(pr_key) if role == 'manager': url = '/#/manager/pr/get/manager/%s' %current_pr.key() elif role == 'hr': url = '/#/hr/get/manager/%s' %current_pr.key() elif role == 'employee': url = '/#/employee/pr/get/employee/%s' %current_pr.key() else: url = '/' file = blob_info.open() employee = current_pr.employee NAMESPACES = { 'w':"http://schemas.microsoft.com/office/word/2003/wordml", 'v':"urn:schemas-microsoft-com:vml", 'w10':"urn:schemas-microsoft-com:office:word", 'sl':"http://schemas.microsoft.com/schemaLibrary/2003/core", 'aml':"http://schemas.microsoft.com/aml/2001/core", 'wx':"http://schemas.microsoft.com/office/word/2003/auxHint", 'o':"urn:schemas-microsoft-com:office:office", 'dt':"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882", 'wsp':"http://schemas.microsoft.com/office/word/2003/wordml/sp2", 'ns0':"GD_AssessmentReportManager.xsl", } ElementTree.register_namespace( 'o', 'urn:schemas-microsoft-com:office:office') try: parser = ElementTree.parse(file) except SyntaxError: self.response.out.write('incorrect type') return date = parser.find('.//w:body//ns0:ActionDateFormat//w:t', namespaces=NAMESPACES).text manager_type = parser.find( './/w:body//ns0:GD_ManagerAssessmentForm//w:t', namespaces=NAMESPACES) if manager_type is None: blob_info.delete() self.response.out.write('incorrect type') # return fio = parser.find('.//w:body//ns0:EmployeeName//w:t', namespaces=NAMESPACES).text.replace(' ',' ').strip() last_name, first_name = fio.split(' ')[:2] employee_from_form = User.gql( "WHERE last_name = :last_name AND first_name = :first_name", last_name=last_name, first_name=first_name).get() if employee_from_form is None or \ employee_from_form.email != employee.email: blob_info.delete() self.response.out.write('incorrect user') return date = datetime.datetime.strptime(date, '%d/%m/%Y').date() type = 'annual' description = "PR %s: %s-%s" % (type, date, date) month = datetime.timedelta(days=30) period = PerformanceReviewPeriod.gql("WHERE start_date >= \ :min_start_date AND \ start_date <= :max_start_date", max_start_date=date+month, min_start_date=date-month).get() if period is None: period = PerformanceReviewPeriod(start_date=date, finish_date=date, description=description, type=type) period.put() pr = PerformanceReview(employee=employee, first_effective_date=employee.first_date, manager=employee.manager, period=period, date=date) pr.put() manager_form = PerformanceReviewForm(pr=pr, status='approved', type='manager') manager_form.put() achievements = parser.findall( './/w:body//ns0:AchievementMngList//ns0:Description//w:t', namespaces=NAMESPACES) for achievement in achievements: achievement = achievement.text.replace('\n', '').replace(' ',' ') logging.debug(achievement) ach = Achievements(value=achievement, form=manager_form) ach.put() challenges = parser.findall( './/w:body//ns0:ChallengeMngList//ns0:Description//w:t', namespaces=NAMESPACES) for challenge in challenges: challenge = challenge.text.replace('\n', '').replace(' ',' ') ch = Challenges(value=challenge, form=manager_form) ch.put() goals = parser.findall( './/w:body//ns0:NextYearGoalsMng//ns0:Goal//w:t', namespaces=NAMESPACES) for goal in goals: goal = goal.text.replace('\n', '').replace(' ',' ') g = NextGoals(value=goal, form=manager_form) g.put() blob_info.delete() self.response.out.write('done')