def create(self, validated_data): request = self.context['request'] instance = Partner(**validated_data) instance.save() for i in request.FILES.getlist('file'): f = PartnerFile(partner=instance, file=i) f.save() return instance
class TestEquipments: def setup(self): self.equipment = Equipment() self.partner = Partner(name='partner') self.equipment.save() self.partner.save() def test_borrow_equipment_get(self, client): response = client.get('equipment/borrow_equipment/', follow=True) response.status_code == 200 def test_list_equipment_get(self, client): response = client.get('equipment/list_equipment/', follow=True) response.status_code == 200 def test_register_equipment_get(self, client): response = client.get('equipment/registerequipment/', follow=True) response.status_code == 200 def test_register_equipment_post(self, client): response = client.post('equipment/registerequipment/', { 'equipment_name': 'test_equipment', }, follow=True) response.status_code == 200 def test_equipment(self, client): response = client.get('equipment/borrow_equipment/', follow=True) response.status_code == 200 def test_list_equipment(self, client): response = client.get('equipment/list_equipment/', follow=True) response.status_code == 200 def test_equipment_states(self): self.equipment.start_state() self.equipment.borrow_equipment(self.partner) assert (type(self.equipment.state) == type(BorrowedEquipment())) assert (self.equipment.state.partner == self.partner) self.equipment.take_back_equipment() assert (type(self.equipment.state) == type(AvailableEquipment())) self.equipment.disable_equipment() assert (type(self.equipment.state) == type(BrokenEquipment())) self.equipment.fix_equipment() assert (type(self.equipment.state) == type(AvailableEquipment()))
def update_partner_score(self): from partners.models import Partner latest_os = OperationScheme.latest() # 현재 참여하고자 하는 active user의 가장 최신의 짝지 객체를 가져온다 for active_user in self.participants.all(): related_partner = Partner.related_partner_activeuser(active_user) if related_partner is None: # related partner가 없으면(운영자계정, 신입회원 등) 아무것도 하지 않는다 continue # 짝지 년도, 학기를 가장 최신의 운영정보 년도, 학기와 비교한다 if not (related_partner.partner_year == latest_os.current_year and related_partner.partner_semester == latest_os.current_semester): # 만일 다르다면 아무것도 하지 않는다. 신학기에 예전학기 짝지 정보를 불러온 것이기 때문이다. continue else: from meetings.models import CoffeeMeeting # 참여였을 경우 원하는 점수만큼(현재는 커피 한잔 점수) 올린다. 단 커모 개최자는 추가점수를 준다. if active_user == ActiveUser.objects.filter( user=self.author).latest(): related_partner.raise_score(latest_os.coffee_point + latest_os.extra_author_point) else: related_partner.raise_score(latest_os.coffee_point)
def home(request): c = get_common_context(request) c['request_url'] = 'home' c['partners'] = Partner.get_list(c['lang']) c['home_content'] = Page.get('home', c['lang'])['content'] c['home_about'] = Page.get('home_about', c['lang'])['content'] c['home_projects'] = Page.get('home_projects', c['lang'])['content'] c['home_probation'] = Page.get('home_probation', c['lang'])['content'] if request.user.is_authenticated(): if not (request.user.first_name or request.user.last_name): c['msg'] = u'Необходимо заполнить поля: Имя и Фамилия.' return HttpResponseRedirect('/profile/') return render_to_response('home.html', c, context_instance=RequestContext(request))
def partner_match_view(self, request): # 짝지 매칭을 위한 템플릿을 뿌려주는 뷰 if not (request.user.is_staff or request.user.is_superuser): return HttpResponseForbidden() year, semester = self.latest_os.current_year, self.latest_os.current_semester # 활동회원 중 이번학기 회원들을 불러온다 active_users = ActiveUser.objects \ .select_related('user') \ .filter(active_year=year, active_semester=semester) \ .order_by('user__name') # 이번학기 활동회원 중 신입회원과 기존회원을 분리한다 new_actives = active_users.filter(user__join_semester=semester, user__join_year=year) old_actives = active_users.difference(new_actives) # 이번학기에 매칭된 짝지 queryset을 받아온다 matched_users = Partner.current_activeuser_set() # 각 활동회원들 중 현재 매칭된 회원은 없애준다 new_actives = new_actives.difference(matched_users) old_actives = old_actives.difference(matched_users).order_by( 'user__name') # 현재 학기에 매칭된 짝지들도 얻어온다 matched_partners = Partner.objects \ .select_related('up_partner') \ .select_related('down_partner_3') \ .select_related('down_partner_2') \ .select_related('down_partner_1') \ .filter(partner_semester=self.latest_os.current_semester, partner_year=self.latest_os.current_year) # 각각을 다른 context에 넣어 뿌려준다 context = dict(self.admin_site.each_context(request), news=new_actives, olds=old_actives, matched=matched_partners) return TemplateResponse(request, "admin/match_partner.html", context)
def create_partner(self): """Create a new random partner""" partner = Partner() partner.is_active = random.random() < 0.75 partner.name = "{} {}".format(_faker.company(), _faker.company_suffix()) partner.slug = _faker.slug() partner.link = _faker.uri() igen = IconGenerator(5, 5) # 5x5 blocks icon = igen.generate( partner.name, 480, 480, padding=(10, 10, 10, 10), output_format="jpeg", ) # 620x620 pixels, with 10 pixels padding on each side partner.logo.save(partner.name + ".jpeg", ContentFile(icon)) partner.address = _faker.street_address() partner.zip_code = _faker.postcode() partner.city = _faker.city() partner.save()
def setup(self): self.equipment = Equipment() self.partner = Partner(name='partner') self.equipment.save() self.partner.save()
def get_dated_queryset(self, **lookup): if not Partner.exist(self.request.user): raise Http404 return super( PartnerIncomeView, self).get_dated_queryset(**lookup).filter( account__partner__user=self.request.user).select_related()
def get_queryset(self): if not Partner.exist(self.request.user): raise Http404 return super(PartnerAccountsView, self).get_queryset().filter( partner__user=self.request.user).select_related()
def get_dated_queryset(self, **lookup): if not Partner.exist(self.request.user): raise Http404 return super(PartnerIncomeView, self).get_dated_queryset(**lookup).filter( account__partner__user=self.request.user).select_related()
def get_queryset(self): if not Partner.exist(self.request.user): raise Http404 return super(PartnerAccountsView, self).get_queryset().filter(partner__user = self.request.user).select_related()
def entrypoint(request): """ 루트 url을 통해 처음 사이트로 들어온 경우 로그인 여부에 따라 분기한다.""" if request.user.is_authenticated: # 사용자가 로그인상태인 경우 if request.method == 'GET': # Meeting 객체들을 모두 불러와서 그 중 커모에 해당하는 객체는 빼준다. every_coffee_meetings = CoffeeMeeting.objects.all().values('meeting_ptr') official_and_educations = Meeting.objects \ .select_related('author') \ .select_related('officialmeeting') \ .select_related('coffeeeducation') \ .exclude(id__in=every_coffee_meetings) \ .order_by('-created')[:3] # 커모 중 최신 인스턴스 4개를 가져온다. coffee_meetings = CoffeeMeeting.objects \ .select_related('cafe') \ .select_related('author') \ .prefetch_related('photos') \ .prefetch_related('participants') \ .prefetch_related('cafe__photos') \ .all() \ .order_by('-meeting_date')[:4] # 짝모 역시 최신 인스턴스 4개를 가져온다 latest_partnermeetings = PartnerMeeting.objects \ .select_related('author') \ .select_related('partner') \ .select_related('partner__up_partner__user') \ .prefetch_related('photos') \ .all().order_by('-created')[:4] # 사진첩 carousel은 photo_album의 사진들만 8개까지 보여준다. latest_albumphotos = Photo.objects.all().order_by('-created')[:8] # 짝모 순위를 가져온다 partner_rank = Partner.objects \ .select_related('up_partner__user')\ .select_related('down_partner_1__user')\ .select_related('down_partner_2__user')\ .select_related('down_partner_3__user')\ .all().order_by('-score')[:4] current_os = OperationScheme.latest() # 최근의 짝지 객체를 갖고와서 아래짝지가 몇명인지 반환하고 기본 context를 정의한다. latest_partner = Partner.related_partner_user(request.user) context = {'user': request.user, 'official_meetings': official_and_educations, 'coffee_meetings': coffee_meetings, 'partner_meetings': latest_partnermeetings, 'latest_photos': latest_albumphotos, 'partner_rank': partner_rank } # latest_partner가 존재하고 이번 학기/년도와 짝지 학기/년도가 일치하면 최신의 짝지가 존재하는 것이다. if latest_partner is not None and ((current_os.current_year == latest_partner.partner_year) and (current_os.current_semester == latest_partner.partner_semester)): # 현재 사용자가 위짝지 여부, 아래짝지 명수, 각 아래짝지의 User객체를 넣어준다 up_partner = latest_partner.up_partner.user down_num = latest_partner.down_partner_count() if down_num == 1: down_partners = [latest_partner.down_partner_1.user] elif down_num == 2: down_partners = [latest_partner.down_partner_1.user, latest_partner.down_partner_2.user] elif down_num == 3: down_partners = [latest_partner.down_partner_1.user, latest_partner.down_partner_2.user, latest_partner.down_partner_3.user] context['partner_set'] = True context['is_up'] = up_partner == request.user context['down_num'] = down_num context['up_partner'] = up_partner context['down_partners'] = down_partners context['score'] = latest_partner.score return render(request, 'accounts/index.html', context) else: # 짝지 객체가 아예 없거나 현재 학기, 년도에 해당하는 짝지가 없다면 명시적으로 아직이라고 템플릿에 전달한다. context['partner_set'] = False return render(request, 'accounts/index.html', context) else: # 사용자가 인증되지 않았으면 index로 보낸다 return redirect('core:index')
def partners(request): c = get_common_context(request) c['list'] = Partner.get_list(c['lang']) return render_to_response('partners.html', c, context_instance=RequestContext(request))
state = State(name=state['Name']) state.save() # with open('play.json') as f: # play_json = json.load(f) # for play in play_json: # play = Play(name=play['play']) # play.save() with open('2019_June_partners.json') as f: partners_json = json.load(f) for partner in partners_json: partner = Partner(name=partner['name'], type=partner['type'], act_id=partner['act_id'], active=partner['active']) partner.save() with open('2019_June_Oxy_rigs.json') as f: rigs_json = json.load(f) for rig in rigs_json: rig = Rig(name=rig['name'], partner=Partner.objects.get(pk=int(rig['partner'])), company=rig['company'], active=rig['active']) rig.save() with open('districts.json') as f: districts_json = json.load(f)