From b24d315f199f01da324d3d75f3753d806dad74c2 Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Mon, 12 Sep 2011 14:50:29 -0700 Subject: [PATCH] implementation of read-only api for Work, Edition, Subject, Campaign, Author added a check_db command to check database integrity of regluit.core.models --- api/models.py | 27 ++++++++++++++++++++++++++- docs/core_db_schema.png | Bin 14714 -> 13792 bytes urls.py | 12 +++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/api/models.py b/api/models.py index be1098cc..be6c40d1 100755 --- a/api/models.py +++ b/api/models.py @@ -1,7 +1,32 @@ from tastypie.resources import ModelResource +from tastypie import fields from regluit.core import models class WorkResource(ModelResource): class Meta: queryset = models.Work.objects.all() - resource_name = 'work' \ No newline at end of file + resource_name = 'work' + +class EditionResource(ModelResource): + work = fields.ForeignKey(WorkResource, 'work') + class Meta: + queryset = models.Edition.objects.all() + resource_name = 'edition' + +class CampaignResource(ModelResource): + work = fields.ForeignKey(WorkResource, 'work') + class Meta: + queryset = models.Campaign.objects.all() + resource_name = 'campaign' + +class AuthorResource(ModelResource): + works = fields.ToManyField(WorkResource, 'works') + class Meta: + queryset = models.Author.objects.all() + resource_name = 'author' + +class SubjectResource(ModelResource): + works = fields.ToManyField(WorkResource, 'works') + class Meta: + queryset = models.Subject.objects.all() + resource_name = 'subject' \ No newline at end of file diff --git a/docs/core_db_schema.png b/docs/core_db_schema.png index d1b782ff25322597c4f8b2389ac66fa70c657e23..65947672b295c8240dbe9bcb7fa0572aceecdf93 100644 GIT binary patch literal 13792 zcmdVBWmKHY(m#q!fFVH#4IUXt@GwAt;1Xky03if-2^QRSaDr@t4FLwX0KpxC6P(~4 z9D=*UeI`3OXP@_;_pblC>wdYPnCb4S`c-vRbSLr? zf7eGfRng)CPa(mFbadp7b}F$k{!I;W1KmlbMSleadS#}C&Q7Gey1KRvelBf|aE%vE zDYx6$Ss0&h56f0F4Y{+mnmaf+2nf8szV6Xb;08Wn+P#uf!Vp^?Gs3`N#CR?xuI%(_ zGcm*^?Qw*kqj7bXt9xJTd-L|7)17nCg;bgjsxKf?6`y@a<|53SIrr%9sxV!x;9y{o zUrQ!pVqmbMz!(@bCRi9>agZ1oU%a6h80P=`&=1)*GP9Z%5EA2YlxDnyMO>g51j85w zUciQ9eDa2d62UO7agbah{h+VZCQT>kNf*;5_EHR3qJA~{+Y^{LeW6zTb@G8VpC;sxarhJFgYB1Ni0J|69x9-nL%2MXvyu}5qEoQ&dNvIH#)htcWGOf zB)5!OICT@a8TmL_e%@<+bA6s?8O0|n^@~P7U}4v-mPY7PFhSP(rqk6~y_VlCjh^y( z&)wYqpncW%Yt}+Z!uK!%Z3$*Z!P14Iv!*^{)>SjT%O3<*?_7nbQoc{hdxC{z^a7B9 z20@21;dDdg>&LOR4ktw-gm7SZ#_62|uLH4r-EE<4>;u}g35UzGtE-2ECozLz{UB_> z2yLz+DWCLfg9Vz+!W2XN_oQ|KQuvH;dp^-=(&i7Z zwDZ;W_PM+1(As(f&O#Z;V)F6)t?i|;xy#F)GbYE_P5iY6HIU!*2`e-A=fz=Tk)Wu(r0-zz=J+$X8_c zylc*@2pi+pfIDo5Hm&xS)1VdPDMpi^fXUFvD+K?$;(S6S`j(2+h|0yfEPa?EMult9Q#Y@kcfo zz70f;!X2R>Hf5UZC2q_f#$AaXC2FywV6#CzR;`s*hg}<1kt$83hemo)%^)b=r(HODA@y5R+02H`*h#k7hLZe^tkdsE*^ZtoHg&7+ znZxp0S>pCU*cPvNCL@2&y+aa}vn6|J>usa&HF3~DSiPN zS!SzB^vD3O2mDJ&^O$alMu8a;)kavX&)G6u=T;TNL%6Ard-~MDF*==E=;K;!LnoX{ z2t(|{hL@vl=(uH#<`As08xx<2xWp@W){-v<^rV-&Q`AQ5)%^#(#btwq9`W!veUKND zt>nCj!KHT~amn)Vg7HR~rXCiMUy7W; zdvsCdFJ;j|HRRqv@O$$lr;jK9%dpaVFp1I4bMfESH`C;`v3iav>ly zx|wX0H5XFQDs|j^ZW3nmhe(8|&)@F6*A_uj2{Oklm0 z>+vpbU`rV#9lq8a666+1I=>sz8ywme;uS}UaK^sKE{xELF^(vTu*s^U1+oUlBLm!8 z^;y(+#2$s&b)!^4!(nUB=pFAfe6W$T|MbX4X{5~gIwKxap4{QW)er05)#gn z8N@fr2H%FElN$9eT&U5yp5rB#qH#zx#~qX6%~X=9S13f9D=|=f|5BDE2;NJ z>USTU<+y|uRY2ne+V*Y<_T=Y-Uy-%Qy%WFzG&eYLIGQWvNVRsn%lms1sHJhtCnyxN z+1tf_o2-ol%k%#+#{SFE5_eO;9)}cwyNm^EBrw5>yV(!oM}c)X#2`~%P_HTsxHb0w z4<;9fLoT+2E74FTJdUw~`*C2H-F~${wr8JQKhteq?U!T3s=4r=6>nVMF z%?kSwPAl|Gmss8MGIeN=vU+TZp7VlMV!|ar)BJ!8452|dhvVssK0zuDUa^fS9mm86g&n}8w?7anL_<)lDGD0NpMEux{Xz3aKw zy$*zxP4li>T_VSDNj? z-hvCjqO%oUqdYW(!q0_;x$a|Cgq*v-0qRl z*%gV_kFM}N5G7~0ah;lW6Zxo}_f!j+KlT9C45N(ygpM~j9~@iae0a!S_jLlIaUno| zXp{mr+hUGLh(q&hrfKOw^NWPdt*GC-U-z{W;ugihSTx!klt-%V9(8nzszb*71v-h+Y z`=sTVw18RLP_vTv5Zs&0X^v+I^XLuI)yg6%YBYAIL z?9sjkOsmlD$O9TcLBR8^B^|oL!<(PN;7;z}w6s1zJ4Clz*Jiqkn$OSY4kfp& zJ8{Yyu>c>RiV(K<>>wO~r4S<|D9qu+S(8BB;F?1)pRdIC2elpiamPBQfbwJ5yQTyW zOgOPru7CC~uM81(aH52SwkpgmsU%6Vc+m@WOt+5BEm?mZOG$tDpv=*!e81k7IYhXf zg%f+`XnZo{N&9-eNPAq}_HkjHKFlP|;5{$qm2UrwuMT{KXzT;_SQpKxXhwE(S#$)% ztRpICbWZ}raY-gMY0)DT@W7vR{+?8JB!$z`K7i#-2N2o6mQe0aXx>9(CWWI8h@P@4 zD>tb)VJXl|qQlbPU_)$;Av3J-=hI4jc`uVq4hpomZ?tzaJmabzkMC;uF?+q^xpNCu zbsVS&xLHYve)`t*C7$XWxc_ZmPr*-mH;=7WT1Vl;zP`6!p_f5n9cWj>K}LY)9zMZ* zyDsnvif48F?r_T)nHb6QYaf`vXar=uE>4uQovo->Pjks;2RW@CMo3#w@l{68Y{&W= zsBm)1Y2MPBojK;Tik}&z7LWuSM-0+*IO+7fPYyC;*v{&)_AFYqt+b=yGvBQQ5M}a{ z4Vu5$dFK{(9(rhXC-wfu(I1m$uLd{PLO=bTx!eV`J{ymG`40N|)8s4vwW}>%;awFiEusK<*Jf)tv3@{+!Ap2Y zXP{tN7LN^dw=-vj0ofnhRpoM!D0|{i?RMP}FcXwz=&31ThL8sf$i+J?iSp>XX~aq&DUbTBi*CUre6W+I)gB6+6ZaiPCn2?xl>iGNMxo z+xOZFDma&ZfY{2w$;Sx&lKswWFMnyt`RIjoaAaL``qiA65!oH<%PI}edd{pnaPG8h zpz!3z5e#q3LNLkERj;`$d5SfsdZRAmZ{z=^#UAnjNjxqj`;&oCw|RH>fo|WOr104a zD~Qd&)chGuAL}*tZ3=<`)-0+Bt%gEJ-|xBpX6pWY6|9DJk_?fe$%)w?%* zYB#7zb$1aBipgb(OmD~job)?mZaP(=R=qMTv|f%_y=hpkoi@#hy!GE43cHTiG|ZZI z-JW!+W(`)EL^4xbirXYc5SbXuJH^;-#rdvAE8V&smSy!|Qct3$((G}r2~|GW>}B?Z zIITYE$;U5_B%X3M^~&WX-_vsIJ##|>N%oR+EaPH5n@VODCtLNuSD_}lWgz(HH>E4H z1s}UJc-p~2uL{c%xpXEH00V0=l0Hg^m7=N7Cx`TY1X~i6t)gbhW*7zjU;AZo92r#NrPwa%AjJq`WyX#?fvmkIu22JC2*wYp}VG?^nQNbl!aq$Cn_{l>VTs;}_*FkZ&>ZeS7rbs_Kpuo?6 zC^aQXU!2x!h8fdYDfVz{$y0K_CASS7y*joBJUB0$&Y@;WkG#0iJi2KyZ%Oa2Ho2z_ z6PAqM5OoM;-mp!p7z8mo=Qe07D9!73{U3a-r7x-wFTSx}t7$^Yi}P?=OqyOn8)lx} ze}hz%aBkC}uQEV^-{%;T0GUYS{w>v(F4gRhwR_3JCQX9YzTEn_hb3xku~oc|ib*6$ zh1bt)ocJn1yAPP!jaH(sWe>mAUX)A*Qa5_Nu??MPyU8t5IS8_s5z!B*94da63nsgo z`>6!FDK<6RyXFmqH=j`91?7^axgqngXYsT{4c=RlXwFxmbme;VyK;~r>eFuSwu~6* zJ8;xKQOH6UMz(dWd%cQP?nj|m_noi5o#uD-8)lH&wgz0-!7v`59o$=@vTxnA?tkj5GC4dEbndL9w2A z;JH9sn<2xKod>$Z8$M5ULKpZ4l7nobN_h%IIK>M)=hTG)^<}Y=NrUgWJk_xdF6>V> zT@O2*&J*d3WHoy}V-=bM?tX{+%Xv2J6Td#Fm+)M6cBHkwA1PY@ZmeZVPs(84Fds`)=p^Te1q4a;{qmrzg{y0GvFg;8rY+V zyFLTb&QqB98cx+Lbg@DEemlfX!uq(VYkWfPr&1HWZRo~4>%l=1exRE9e$U%JZlf2F zp~W;UEpgzZ2a*v&X&YJ-Et_5aW+xa>HL;j^ePVY6F*l=&xp@Zefw?+Nom@xQF(ITd8I|O&s^M$eZn>LrxtDoSZ{~Y^Kkk624wjzo;{3jRes62j z{dzBEP1vK}@YiAZFCY9jhe-8{?_txj)n0}TuW4$t%vu@)+$CRRK;3AyTKhuA7gp4d z(8(p%<*Md+opl)-pP7W+HrMVM*!A>=7Mc_&N6JTOYBdFAAoQ;u^3I`pPfU+aPGj8B z$9+c9wdE^L4fYUCBypdRY^_JrjK(8KM`REk>uYnxXw!_)ot)!y^4K?o`J( zr%MoTJB!wX_N_^+?k#Xb;mi-w_LI{G?vX?fcujmJeyNpWTXK`yn`F>xZ`A{T(J>D0 z7OK5@5TtLg41S@VmAs(TbabcORb8!JRauj#VfK4+>Ab#7!SACd7HS<5Rx*b`_wQnG4NH}%X--nQdqSP$jEz4c2||0Yv6= zk#A_sgXW+7A9(!wp0kMr&?#hTvaEM*mHj1Ew#{t_uIL;p>9pLKcUxmutlYURCL@kLBZS)r2l+Tk7p! zon^FI?aEmEcRCfw!>oLVcJqW~3>Uq6kzx0dWsMO+QQRV{L>ARj!916{{O0G{H*PpM z5k3580F;|aES2&i`$ws##NZJBUl0?YCzd_2DASQ5!V;>*jRp$Im%`W6=~|Uq+7bN$KM^2yRu2wlOT6B3N7Y`M$ zrh=Wrh5BUfyCg;cksu;%K&L(6GScg2XNuKz2$>)mAAXt2w_N_d;i;OLTFWINP&7%< z(QJ@=H?r5K+Fydo@KC)v>kt`PXjf(I+s2?#`F?%XDl$aZZQ@5Yt%Ws)cRv?7E_j3k zvhaSLCO=&RYwvJXwyKsEB!A)2RHu;L^mJ=_7X6&=_!aA8AmbQ?sk7afE5<=|7gWj* zY4J5BrCCjEE5^K~NI{ou67GfXmmz<|M=L6Q`E0j6BdRN9TpaA0L;eZK3DH(%zW^8} zSHynkA0du0o%#p8ZG)HmuQ(bxgeY6pbB--QWbB~%R0-!k=w#b`SMf)@t^0l%x*AiiHb+RWJkkpDejolQ|~Q|Yx<}k&~{00 zm}5AwQuWPVMNIb;}mR?bCg6C%+gfsb=`TajmuG$uV?mn{Z^u5z4G3g78gUoKHRb z6Ja$;yoF?{&Q@g%e*+vqJjE>@Kzz^8+AsgPuqV_PY?b(t&|+01N^V7HsorRC&G~q z{kS&DoAR*Eqlzz9n#esN!84iWUnlD5n0S?V^zo6$Mnq6DW)}f)3;q;$FAX~7s($#M zshyCfOU0evfjHoG{rbE_N@$iR6}I*Mw(Z@+3&$vzIl#_w`a_lqOLcY0`rXPx+jUc7 z@9EgxBf|+7pTe`9)ra3>u2AJ2Yzipzup$V?ZcEqRC$@Qn< z32VkVv#}|ObJ5MY4o0-?tC|D|$I$bSU&5h_65*5|0>=1%I?_^b__Q2J^L=`;Vi;vb ze=N{!c?psOYC7xtedh&@WEjb$N8dqnAhSA6en$Z|D>s@2LGd0LcK(_IQu`(=^jaQ$ z`09&Y7VeE#uA+D4NZgdQp>q+NQonU)itY_E&n6_GSUOXi!5>NxH`>SUbQMZbEcX}GsG*NE_Q!>Gg%T()rrks*O^_$_& zn+M+!3by8b->Z`8EZQsNTnr5D1daWZDHPpwJCdWT3}r9KdgNwHXWhyJ$SLilWGu7N zXpnT?Ohl~5yncEo%d?+36xb6LMk10H36?_KSY+Q(PwZNFcE4lxpDDhz06geJ(7gcA z#|MR_7tMWh%d6(QItIOsGWxp}xj6t6w-R&4XLJ<;3u{6bWP zdio-URn4oGW=koRSU4A?l#6Yga(RnN_iZ06zYNwkD)J3zU5D%wi3Xs9hiOlq?Do7E zaNCjzHZywaBJja;(EQO&`qhQdW~KZ@(@)8IZTb}tDTSOWU7mM~UeH=zxm%|HDJgr9 zjP5j@U8WZaT@yaIXO9JuE5a*Nfk7pk&YlU-q`M;4SDUEtniSMf5pt<&#>)z3O;LxCV)G8w8jG5oz{;@F!@B$I|HL|z&4gJGE<1NuZwRJVw|+WtD`DJ8>TPHIXi*t9c$}GD1jgy1WYelZ@ zd=;`c=K)Uxve$(JVxc?1K}BFCbNP4So{6aKEl%Oev*TQsE3+joilpf<6|!zuR-f1s z&p3>N)UPigC#2~^^=SoV0-){a9+lhSL>tb8-8~ZazQoRiZsCNzv@OX%) zXkw)v{uz8sIBBDTahh1b%ha`%g#|#!o{8N#B!V<5kpZt^AeNGboTnoQ*MNLAavdhu zT6!S^Uij)8=@b|3rV&wDnO;S5VA(BB8={xt!VZ;xYP6WMG-DE|1c!oh7^a~~<)YO)#Vp(8Avd}ox_r`}pCFX`nYr+o~GeRvNBxgk$ z%KImNp4WGI8=nKUW^a|7J2G%VD!R#T ze={_ZU>^9)BUmftEeGjjp`u>+OMRF1%#-@QzI4UMzQK;9s-jZ>H9z++SDe74Gr8Jx%;$xA69IP{0bE@^72aoCrXtNVt$hH?i$n8zfm&vflg{kJ)Blem4D7o z`^YvZoLW!E1+K#tH6{mJSNO`}67-E$pM3U}sZTt1t>t4qXFw{FIBIXDD) zNe(Yakr+s3rtA@feIdDFrk(DXX6u$DV{%4ri#m~)gJ=+`3kshJBkco!+`$hr^;y`5 zH4Wx{l>8u60R7Cr_sw)N!#OqnV2Xo(j*WwL@ zg7C0-cY%r*@uM}Lj4Xugna75lf9j5sU&4QINuNFz`k9aQuv%#BBsF8FE3tfA;9261 ze*nw995CpBWx;wd%w5}nJ9w5t^``ned-tpmC)FXu`)HSGI&-&y8k^G_lgG5Fa+S>z zXrDTv%v%H^xRBYou{Vq<_#qn8`~0?$5c>m@ixgsTWV)Xr%( z5&P4rK`2@~bX7Gf67tSvFW9hxeTG12OqF{=X3Anz{HqsXY0gt%sLj}EuoF%QPR>){nswqizaN2 z?2-t=SzFk8zXS(<)G+A#Nu1d0M4-TMww>KR5Pn)h$li~rp&(9mKFuJ%F9Q9jxRM60 z3pAqB%a-<*h3Gx)=x=RDglGi(a^)f75UjP5Wqp~Bh}L#cDa$V(VhVUo#dDR(y8$DeCS>1sSZ- zH>ljeM-M*qR~l)Le?N!;D(FGgpgdT*5GQ3G+z%4nd*0c!YKTlFX}@R2ihw%tv>rWi zh?fzWZOLWZJ0^uSCI^*qeM=WwYkA1#@E!#gj+;NxZK|_-TSnfnD-Lnt7FLNXfXe3P zwwXBfBa&q0$TQD|g>zhPXK?i+W@O>ynWxjj882?~IM_S#TST+b~eSKNb~rqcQbW+mC@ z1b7I;kkto@Fec57ur7qpUX-%qA&Gq-WJ?rJ^Epo{RnVJA&}OgmVgwyc4iU)D+MvKi zsKUvVd*kmR6@me;vEhNZ0cUhlKEnJKQTry`{fM~qD_G!SwdMEa>Ek;`wb1j_@|fK+q?TC($SmCQ&;5MPoi!`My4 z_=pV0r0H&W?#}t>W?zG+Wdr^oCHc<2d-?nrzhgdht3tPo`-9h^U>DKXIXLDwkEZ zVNv3~fiVZUI=O5_M8o`RF|Hn%US^`5g<#J+SSF zf2Xy+<@GvuJJrLKhwm(^_T@PR!$q)epkCH>81O_)+!I-3VENSrk~~S!NI78*`Sj3}gI6v>2o^qO(;Z zLSyf_0f;nbjMN0{?stl!8in*PP>H*y|G1gWJE$+yQ_n_|eLZH7;)v4m)ce$R4 zNBmd8R{%uqH~j2PT0LVAv3kpvK`?LL&`H%kEw+v_(Y9ew z-4ves$?F)Re$bV*h3RR&e0x1X1mek}gifRGTlfrc%jjinyFOeJV2brp2#?CRhtfpi zj(SFV@7UeJ3tvN*WSZ~eF|x>AZ# zoQp}u5QDt(eMv*x{}fjfYW)-OX^)i9M8bv3G)U4dSgBH0=VSC2Kpx_$YkEIu*0$A0 zUd{)&btI>_Olx2XwM~7t^X>U96d2r`Vi=YKuFnd>P6%zmLPo%7CyY52spe=EfBY2= zbS%CK5ND;6gt+w)W8-AfW1BRA;-0JD_v?v%0kpLa>hKZ7AWm1kF_2v3%fpsW4IKRa zpt6DEWiuz;1Hgl!DMpRR{fH_q)G+PT%<=NER3|ha zGsc_o4R8)g&9*T}LGZaxs@cxZ< zlQf*=C6@5c4fMAHvhRb4qj&T>WF}ZF-}aa5KYoIWk@^EoVE#|6Nc>u0Dfv`hw@oC> zN*z*5VJRvT7`*+6ZxJz26BPKu3o7e>j~8}#N)xd(LM5as=& z17{xS!1?R%4xFVw{BVY)MMVf1#Chiq@4GtlA{no1DYKk7fiC0ifKj5V=6^5D0G~@b z;N^n-7|Dut-uXOkt*@0Educ&zr6~uuxVJ+K$P7#a<2nm72H*!6!JP&Ng zD5Ah9qM_+&u-V=F!2<~O)0;?)B+2RN#Q#D55edC;)8^0~-GBb1Zu`i-N*p3~xA)R! zafy6uD=r<7H3SpKYua@YOl$}no!kvw2laOkYK`w5sl{GRg}9=ACSP8BW=H9Grn(#6 z0EE4OL*!=Llh+UL9BEh`HM{$M0%{U!JyV}bnzJ&O<0pv)(d5}5KC;L_>TfAzm~9c9XGsYEIKlvSCZ~Fc+uQ@u(}|?SYuZ4v~9|h}YfCMzpi*-+@Gu$BE?J9ht@qOtR4DNaDo)Mg;ZF^7=u?#n{6h;N5P1{JSqF03L+ zpE4W~JdZ~1ymulO`QDOeTOvBkiUpNE^qrugt9L*`wu_#&ZTzc2*~6R+Nk(e)WuCf zLg-fsgqNvAMKd_}m~wF73a-_!U;o+3S{Fg`|1(FxhhZLgSJw!MTck^QL%l>4937c~ zy?6*9!~VIo^{=2CIp6z|c&cVoHL3eM>~IF}@9)V|jU>3$ILUHQDkr3XqcDMeH52Cf z_>YE;6!020;KlK0TO8FHr#RYM<#|gA@Ucy0<5>&-ch14Tx-_Z=FzhLI^~$EjA>VNU z9(I&vZG<&IBm3=KuzJSBQ?shE4%OCVjX*C&di$99Ruzj6;sBi*aNuu<$Pu4`pIjvO=v8&+p9b%-{mu`mT|rmzv7Qbz+(M6u z--Rir*Ag%I3c(eO8^?4Xi9w*gt2QC|8(+@k%O@=(ZqZq^GmrGNrls$ zh(pLS4xrX5VeM4#5<&2+k*;qBZ+t|;<CDZdZvYGFoz6$ T`3C%M3gfx7oK%5?j?e!ErKcw( literal 14714 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