22
33from sqladmin import ModelView
44from sqlalchemy import Column
5+ from wtforms import TextAreaField
56
7+ from wacruit .src .admin .formatters import member_formatter
68from wacruit .src .admin .formatters import recruiting_formatter
79from wacruit .src .admin .formatters import shorten_column
10+ from wacruit .src .admin .formatters import timeline_category_formatter
811from wacruit .src .admin .formatters import user_formatter
912from wacruit .src .apps .announcement .models import Announcement
13+ from wacruit .src .apps .faq .models import FAQ
14+ from wacruit .src .apps .history .models import History
15+ from wacruit .src .apps .member .models import Member
16+ from wacruit .src .apps .pre_registration .models import PreRegistration
1017from wacruit .src .apps .problem .models import CodeSubmission
1118from wacruit .src .apps .problem .models import Problem
1219from wacruit .src .apps .problem .models import Testcase
20+ from wacruit .src .apps .project .models import Project
1321from wacruit .src .apps .recruiting .models import Recruiting
1422from wacruit .src .apps .recruiting .models import RecruitingApplication
23+ from wacruit .src .apps .recruiting_info .models import RecruitingInfo
1524from wacruit .src .apps .resume .models import ResumeQuestion
1625from wacruit .src .apps .resume .models import ResumeSubmission
26+ from wacruit .src .apps .review .models import Review
27+ from wacruit .src .apps .seminar .models import Seminar
28+ from wacruit .src .apps .sponsor .models import Sponsor
29+ from wacruit .src .apps .timeline .models import Timeline
30+ from wacruit .src .apps .timeline .models import TimelineCategory
1731from wacruit .src .apps .user .models import User
1832
1933
@@ -84,6 +98,7 @@ class RecruitingAdmin(ModelView, model=Recruiting):
8498 Recruiting .to_date ,
8599 Recruiting .description ,
86100 Recruiting .short_description ,
101+ Recruiting .recruiting_info ,
87102 ]
88103
89104 column_formatters = {
@@ -179,6 +194,8 @@ class TestcaseAdmin(ModelView, model=Testcase):
179194 Testcase .expected_output : shorten_column (), # type: ignore
180195 }
181196
197+ form_overrides = {"stdin" : TextAreaField , "expected_output" : TextAreaField }
198+
182199 form_excluded_columns = [
183200 Testcase .submission_results ,
184201 ]
@@ -284,6 +301,196 @@ class RecruitingApplicationAdmin(ModelView, model=RecruitingApplication):
284301 column_sortable_list = RecruitingApplication .__table__ .columns .keys ()
285302
286303
304+ class ProjectAdmin (ModelView , model = Project ):
305+ column_list = [
306+ Project .id ,
307+ Project .name ,
308+ Project .summary ,
309+ Project .introduction ,
310+ Project .thumbnail_url ,
311+ Project .project_type ,
312+ Project .is_active ,
313+ ]
314+
315+ form_excluded_columns = [
316+ Project .images ,
317+ Project .urls ,
318+ ]
319+
320+ column_searchable_list = [
321+ Project .name ,
322+ Project .summary ,
323+ Project .introduction ,
324+ ]
325+
326+ column_sortable_list = Project .__table__ .columns .keys ()
327+
328+
329+ class MemberAdmin (ModelView , model = Member ):
330+ column_list = [
331+ Member .id ,
332+ Member .first_name ,
333+ Member .last_name ,
334+ Member .introduction ,
335+ Member .department ,
336+ Member .college ,
337+ Member .phone_number ,
338+ Member .github_id ,
339+ Member .generation ,
340+ Member .is_active ,
341+ Member .created_at ,
342+ Member .position ,
343+ ]
344+
345+ column_searchable_list = [Member .first_name , Member .last_name ]
346+
347+ column_sortable_list = Member .__table__ .columns .keys ()
348+
349+
350+ class ReviewAdmin (ModelView , model = Review ):
351+ column_list = [
352+ Review .id ,
353+ Review .member ,
354+ Review .title ,
355+ Review .content ,
356+ ]
357+
358+ column_formatters = {
359+ Review .member : member_formatter , # type: ignore
360+ }
361+
362+ column_searchable_list = [
363+ Review .title ,
364+ ]
365+
366+ column_sortable_list = Review .__table__ .columns .keys ()
367+
368+
369+ class SeminarAdmin (ModelView , model = Seminar ):
370+ column_list = [
371+ Seminar .id ,
372+ Seminar .seminar_type ,
373+ Seminar .curriculum_info ,
374+ Seminar .prerequisite_info ,
375+ Seminar .is_active ,
376+ ]
377+
378+ column_searchable_list = [Seminar .seminar_type ]
379+
380+ column_sortable_list = Seminar .__table__ .columns .keys ()
381+
382+
383+ class PreRegistrationAdmin (ModelView , model = PreRegistration ):
384+ column_list = [
385+ PreRegistration .id ,
386+ PreRegistration .url ,
387+ PreRegistration .generation ,
388+ PreRegistration .is_active ,
389+ ]
390+ column_searchable_list = [
391+ PreRegistration .url ,
392+ PreRegistration .generation ,
393+ ]
394+
395+ column_sortable_list = PreRegistration .__table__ .columns .keys ()
396+
397+
398+ class SponsorAdmin (ModelView , model = Sponsor ):
399+ column_list = [
400+ Sponsor .id ,
401+ Sponsor .name ,
402+ Sponsor .amount ,
403+ Sponsor .email ,
404+ Sponsor .phone_number ,
405+ Sponsor .sponsored_date ,
406+ ]
407+
408+ column_searchable_list = [
409+ Sponsor .name ,
410+ ]
411+
412+ column_sortable_list = Sponsor .__table__ .columns .keys ()
413+
414+
415+ class TimelineAdmin (ModelView , model = Timeline ):
416+ column_list = [
417+ Timeline .id ,
418+ Timeline .title ,
419+ Timeline .category ,
420+ Timeline .group ,
421+ Timeline .start_date ,
422+ Timeline .end_date ,
423+ ]
424+ column_formatters = {
425+ Timeline .category : timeline_category_formatter , # type: ignore
426+ }
427+ column_searchable_list = [
428+ Timeline .title ,
429+ ]
430+
431+ column_sortable_list = Timeline .__table__ .columns .keys ()
432+
433+
434+ class TimelineCategoryAdmin (ModelView , model = TimelineCategory ):
435+ column_list = [
436+ TimelineCategory .id ,
437+ TimelineCategory .title ,
438+ ]
439+
440+ column_searchable_list = [
441+ TimelineCategory .title ,
442+ ]
443+
444+ column_sortable_list = TimelineCategory .__table__ .columns .keys ()
445+
446+
447+ class FAQAdmin (ModelView , model = FAQ ):
448+ column_list = [
449+ FAQ .id ,
450+ FAQ .question ,
451+ FAQ .answer ,
452+ ]
453+
454+ column_searchable_list = [
455+ FAQ .question ,
456+ ]
457+
458+ column_sortable_list = FAQ .__table__ .columns .keys ()
459+
460+
461+ class RecruitingInfoAdmin (ModelView , model = RecruitingInfo ):
462+ column_list = [
463+ RecruitingInfo .id ,
464+ RecruitingInfo .recruiting ,
465+ RecruitingInfo .info_num ,
466+ ]
467+
468+ column_formatters = {
469+ RecruitingInfo .recruiting : recruiting_formatter # type: ignore
470+ }
471+
472+ column_searchable_list = [
473+ "recruiting.name" ,
474+ RecruitingInfo .info_num ,
475+ ]
476+
477+ column_sortable_list = RecruitingInfo .__table__ .columns .keys ()
478+
479+
480+ class HistoryAdmin (ModelView , model = History ):
481+ column_list = [
482+ History .id ,
483+ History .history_key ,
484+ History .history_value ,
485+ ]
486+
487+ column_searchable_list = [
488+ History .history_key ,
489+ ]
490+
491+ column_sortable_list = History .__table__ .columns .keys ()
492+
493+
287494admin_views = [
288495 UserAdmin ,
289496 RecruitingAdmin ,
@@ -294,4 +501,15 @@ class RecruitingApplicationAdmin(ModelView, model=RecruitingApplication):
294501 ResumeQuestionAdmin ,
295502 ResumeSubmissionAdmin ,
296503 RecruitingApplicationAdmin ,
504+ ProjectAdmin ,
505+ MemberAdmin ,
506+ ReviewAdmin ,
507+ SeminarAdmin ,
508+ PreRegistrationAdmin ,
509+ SponsorAdmin ,
510+ TimelineAdmin ,
511+ TimelineCategoryAdmin ,
512+ FAQAdmin ,
513+ RecruitingInfoAdmin ,
514+ HistoryAdmin ,
297515]
0 commit comments