From 9a8ca32792a16b0c247e6481deaca29c14bb2668 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 22 Mar 2026 22:07:35 +0000 Subject: [PATCH] RIPLEY --- core/__pycache__/models.cpython-311.pyc | Bin 2288 -> 3638 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 564 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 2755 bytes core/migrations/0002_relationship.py | 28 ++++++++++++++++ .../0002_relationship.cpython-311.pyc | Bin 0 -> 1887 bytes core/models.py | 20 ++++++++++- .../__pycache__/ingestion.cpython-311.pyc | Bin 0 -> 1870 bytes .../__pycache__/resolution.cpython-311.pyc | Bin 0 -> 1451 bytes core/urls.py | 8 +++-- core/views.py | 31 +++++++++++++++--- 10 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 core/migrations/0002_relationship.py create mode 100644 core/migrations/__pycache__/0002_relationship.cpython-311.pyc create mode 100644 core/services/__pycache__/ingestion.cpython-311.pyc create mode 100644 core/services/__pycache__/resolution.cpython-311.pyc diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 0a846fcabad4a30b77111596b1be7eaac49296ca..08f525274ff39d40288611eee0de1f6afc45b0c4 100644 GIT binary patch delta 1354 zcmZ{iU1$?o6vyv;W?DN*6Q?1qT8nGdX{;-Ys}|}qi1NgE4C9=HB!BY4ROW`6Z$TH0mOa23+?ULLS3ztRklh zIU=|Hem%%ikDR;gLEtO4r~Pe1ub+72{L8x3H_kIIP7OK#aO3vI*O>9pI_S&L8Meie3h;9>&6e*PyX_YE6Dh>5AAH%Kn9+=SVX_={s zR%OmCX^Ljpx;e$`aV?S^J(I|%GU?n{>a3EVIy;&(F=2BUu>(*wk74L%HI7jf;pcZ8q8fii z(`ROFvm1|l5PrkL7_GO`?_?6s5Ph(%H-Pm{)@infciCvYopkNFaoUsm@BQ=_|98+W zOqN~ASdk1*G8QLRrT$iN@{%i+SERBhl|hT`yTg02eZM8$lUX;GTZ!eoSk7g;R>j_H zKYC*CJ}b!z2~LFdt5XrIQv;n8-rk%y4&NGn=W8Fn;P7Ah4=bxcqW}N^ delta 182 zcmdlc^FferIWI340}$L#J&?)BGLcV$F>a!IEL#d&FoP!h#tnQdjGB}8vlsx$4=hq# z=^&*H3?J+@CyTINVAPxZlvSJ2bh03uH=6-ayvT5J5?hTbgbC!|;&RI`O3h5q^G>ZS zVg(7XJ39tDJG!_Q8BJzpw*YEY}HG2RtgC diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index f705988a223abc7b5af333902925bc196186bbf5..d63d93a0ff84529a672f6592f965a021f7d06e21 100644 GIT binary patch literal 564 zcmZ`!Jx?1!5S{hSoevI+j}DZ?^+^ev3b{ZOI5iDa*H{#+<_`=QQ@x%p!=|Mu)| zCz+^X+L3EoY(_24^fj>av7r-85vTTQkZj? za+#x;85x)uQW;ZNQkhd&*RU;PW?)zi#1N3q7{!vp9?YQ0@e(AU$#{#UAh9IlB_ouR zA)23?dW)e5WD!U*FEKaOPm^`B9HZRi07l;!KA<>AZLt@S_`uA_$asT6<^n2uz#x7B p6@6f1VC8IZ=@9A&nZb5}MgAg-{1q1Y56n#bOby&1Si}P~4ggX?HUYxNbauU7+p!bd2{hCRWRs>OPJ;stN~MB`@&yWQ14^i>`cTVw2WQQGxU=H~ zTTbOe4pich8ys?=Qbj@Op+^oq@DtY2s#q&os#NvB%@yLpsc+UF#c7Lr?(F#a&3kX& zyf^P-_lMrz9t7i;>@$V)A@mztvq+*wxK9mgp=8L#Ikh+0>+0=G_QAhj4Qr8P6nKGMlxwSawgsz%~zK+ejp_>@i!Hh|6rSKiBx=q8rbv@R=pRx&dLV_n)-=%%C^X^4>o90}`N z3NdsI>r|34O)ILID23Ab{I*gm6%!dlbNmbW{1SqgAR#Km@e;W5Yp*%5iI73rrkdZAh~FY<&_iIG|ZNkfwoQ=gOf_0C8QH=6BP{( zNfn4%3TF(0XB0@!JBdxIsqr4i&+?LKa=fasjR|3Kay+`RP5K$;&x6Ca45ATs?GA64 zjtE=e(g?Hw6!$tlg1;_6eURg@CQ$}rOw^Y#bc*j#lVzO5#_KaPn}&vG3O5TnEzCfH zWeU_FGusBaZRXP%JmcE8rQmHdkuN#|lP06EJp@1VI{+2*Yh>_wL^_N})yS9~8G9a? zJd8|MBU5%{s;*Y;NlrC7(g}tf0sb@o#PwGAW_oly1+)GrJ8X|gkyf!#ik4;u% zQ+8~s9vib`=c=(;J2qQ8F;qK#sy;HhU$o+vp7GU@C3|G4esX00OKaler;F8-^Y+R4 zMl=u>8wfz<%By22)W0`j4NX7JR)cePaLy9uUV@RRtH7E2Zh`*{2rKX$6LCkUJm+aA zeW6r3g#of1`Xea$gHGA+aBr4pu2a-y?uZ;ud)ucW=*4AT_U!ZBG8?E%Mv%P z2}e$YDRG}8Y8dibc7z=CU6yxg85GdRTmV+8SPfSq(4R;YG{8SPu?97_`P_trO>;Zdk#EYH-00E?B|> z8G|$ax1lEE;2n7%K%932M?PePNe1E!Ofm2QfVhuLGyDt#2?k~uU@r#N9N-NJ?>!bW zat=Uu@FFdK3fh`N6>O3@kYU08j}e@-qi27D2+rBjxpo9ETf<8*tKnrkylnZG-yXsE zao2Ju*zCU07-`-$*BNe6nhi-y?`Ei^AD($a5k8iYbCG~Jf!gj!^fR86-ZlVLcE46y^nCX=w2v)iHF{^;htdv#Bc zo0e{Ay!Kzz47s4qBgjZn4v|rXL37nLZ{#sFC}j1BDe2I=tcCH1kSe(Jql=E?lW~dU?5|WqI7_z z5d&ndiW7D%Qr4wRTZVR^i5we5AJ-uT9P9R@x$w7-IoJJES3?F%rqQ|zeEoE>>4Ky@=Ei|Bk| zZf7dy67;)3N4^kfYQBc>E4w5hhoz&!pUg= diff --git a/core/migrations/0002_relationship.py b/core/migrations/0002_relationship.py new file mode 100644 index 0000000..5cd2155 --- /dev/null +++ b/core/migrations/0002_relationship.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2.7 on 2026-03-22 22:06 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Relationship', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('relationship_type', models.CharField(choices=[('OWNED_BY', 'Owned By'), ('ASSOCIATED_WITH', 'Associated With'), ('COMMUNICATED_WITH', 'Communicated With')], max_length=20)), + ('weight', models.FloatField(default=1.0)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('source_entity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='outbound_relationships', to='core.entity')), + ('target_entity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inbound_relationships', to='core.entity')), + ], + options={ + 'unique_together': {('source_entity', 'target_entity', 'relationship_type')}, + }, + ), + ] diff --git a/core/migrations/__pycache__/0002_relationship.cpython-311.pyc b/core/migrations/__pycache__/0002_relationship.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e9ccb987a378a2cf418774d4908e457bb4675ed GIT binary patch literal 1887 zcmbVNO-vg{6rNq1^$#|9DGsGpYeEpMqX^TYQV~_OV8@gufK;d`PNnVIGpyIKcb)x# zn5rp<9(v5JIYvEDRdDDrhaPgwagp|b=G3aE+>GFqQ{U`*Aqdn%XFYFc-hA(UJMYaK z|CUU~5ww@e3-#|XLjSNy(0aOqlOha$K^S4Kfyx}b`3Bz%l|#*NIm{s*Eg&5F3E?ma z)dL%}7eZ(sy5Gt@m|I1;o>y$Toa1S{sVatSsk&xTp{ZliFsogx_v-6TP9AfNn|Qos z9&-v;4)KVD&zUffnMSBb0tYw@PY)IjB73l>edvDMFedi!Z}JT=*_0Bsns*wt3il7fFsqKu2zW&XHuMdRJwNwNiMf5V!-Ey)9$qTZ4FCrZqeN7Wig%bLAel(>6!#3K`e-j2PD{!3~%W)X~~8{tiWYj)voYJ`(bYn zZ6aAZU~9z4g^Ub*yfMN=3Ix!Ey=V)YDrsPoM)a0fkIOlcMkS9=l4x9#pgipcfpJ2T z9@=t)S+N-=EuvwfRaIgdtkh|5!OQa!t7n6i9Zk%u${d`4662t;LQOXOVZ7APWy>EY zi;#phwMl{{2!^U?cj1f(xGrmoPI+9RQ7dICU9mOG&XY%^3iL*PTQ?qn9Hf`J)Tzm}s>PR+*k)mx}ov6#eem z(-BbYdMCsW3cL3@aTLq`9CxGd9f{e$#I!SX^U0Pwbn|)m<(N~J9L;cs%)=qm9WtGi zbtH~CbL)>)Co^-H znQ=2SPU`lN_^y+kdb;Iir(O&?+0tRQ6-PvV#cHNzo zz@N@7Frs_>27BEoGd_^O2a@sK2fqKXE-}zu{u|GF!?WJ-tUZ4s_((0~T^j6j?+(Fyer2)kdh$CwU6o)hS>pY{n{nehJ{CW71>lK`W!vvu#_ zd1uYf*~iR_=jsy}y^enBpWa#HHcZ*wZB{^ZLLA3I9=Yod8u5Qe=mY1fUq?uDLI+(I RPvUNB?3gW_Ua{(Z!@v1)2M_=N literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index fa9c11b..9a1dbe1 100644 --- a/core/models.py +++ b/core/models.py @@ -27,4 +27,22 @@ class Entity(models.Model): unique_together = ('entity_type', 'value', 'source') def __str__(self): - return f"{self.entity_type}: {self.value}" \ No newline at end of file + return f"{self.entity_type}: {self.value}" + +class Relationship(models.Model): + RELATIONSHIP_TYPES = ( + ('OWNED_BY', 'Owned By'), + ('ASSOCIATED_WITH', 'Associated With'), + ('COMMUNICATED_WITH', 'Communicated With'), + ) + source_entity = models.ForeignKey(Entity, on_delete=models.CASCADE, related_name='outbound_relationships') + target_entity = models.ForeignKey(Entity, on_delete=models.CASCADE, related_name='inbound_relationships') + relationship_type = models.CharField(max_length=20, choices=RELATIONSHIP_TYPES) + weight = models.FloatField(default=1.0) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ('source_entity', 'target_entity', 'relationship_type') + + def __str__(self): + return f"{self.source_entity} -[{self.relationship_type}]-> {self.target_entity}" diff --git a/core/services/__pycache__/ingestion.cpython-311.pyc b/core/services/__pycache__/ingestion.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0363eac3c613799b44a6f0e78568b838bc277d54 GIT binary patch literal 1870 zcma)6&1)M+6rb5$tz^mTs7WyLM`by6Y}BS!i(Lq=DcG_d5~xdYT8IcN>)naGuC(jU zjN%Vu2*row<`#pY7%F;jD9)kB&`S;Z2P7k~SO^444!Oy-3nr(|>}Dm)O=)LWZ{K_K z=Dqiu`HdbcN*J&)mEAWtB>?{5hCi6?j^lCm*#-tMU=HMA212e2IUz4*#JrS|AP~R} zV2B&Qkah(C_SnxGnSc?P14;Q6H;l%2BTrk@q^tUyRqn^n zaXi4xZGb=q8XzMe(SRFZm-+S@(HY4QSQXKU-n6oa@Z@s{-#2xni;W-vI8tsO{|R|U z%A`LQ8+vQzPXGke-v<`F*vMBpZww8pOo ziUD$gDrX|Z)`;&Q?P$*aXGeh|EQzvhi#-uD6~EkJAMs$e-5UA(#X2fsX-^mW37Z4p?SPy~9qB z@ioZ!5n7uLC*F*SY!;)eMiEJ9mXWY*oY!*Z8Z)uBoG>)1B}|Lj3A%t1WR*~qA8xE= zJeDjikDRb+AV%DKCc^w>p<_i`rq|ge|3)IG`WgCA(mNXrubQ_}-@h&4tvHkI`=kU_16Y(r}d)9i- z-`wFdvm6E)XIJV0_$v%Lx~fWFMd`09{dI7;t=kpPWAUAi!`SFSZ1m{|<=AK?HdBqw zJi7UCW^iw~|l&f@&RJ%qV-l|=Cw+^6^hR-__<^G9E=VY~WvK*a!86ViO z4&!47@v&OZ)mraRZQ%WJx)PnLMyJZrsamviJMu&1 zdu2=6R9;-_swaIoO<+eH;zmrX<@yC2GYN1H7eQZef|3uJ zc+hxifp_XcEWi$mi6arn7dP%U9j+H&@z>8LWv9(p)U2#MY|MM)k8lq+fi-)}!FX|2X!_$h)3LkX_}&}i zNCXc#>~U|h;=xlEiGRStUe>$9C;>x*Ab3~=4;|wnc(Pvi%*4@nu)4dtK3@H*x~lr` z$;oj*ns5H+zt;iYC}luKU)cT$g?r$EM*;{*gAgTaffniwoqz_vfv2y6XRK)e>-c2U zFudF%RP%3@S|xE&ayt^XD}5HBn!gxHUv}O8>GXvaq_lksU-y7QgLu%;sO}k_wo2B} zx}Kdtj`%v_=i(nSq)Sw=prg8|8j6n=hXyQa znv$8aMNMIc)NHr9!guY!Y*Q{+WIDE>o{55xw)BO}e4IJ9;|Dm}+Ave|*;7UDF5uk9 zvn1Di$`>xrS94r7FV5SNg}%#G|Kc&`EKygASZ`8U&BqhFA(lO&Iq`IRH=!k4oQf6; zytowF(rsCvIpae5ZCykdNRCj;kagqZ&-E4yX}#lgBH5|aTh#4H#_P+BUl(oLrFEBa zS{K=Bi8?0gZ(FV1jSr;iO=|T!*u8!F8%tUH@}$~3@h`HwknD$}X0LGgb+OVjXI~U& zd&SvTrOHO>#Pib0jnc^k3X_$Ty(%AnaQjX-ku&f&$JLr2R(mirRDqGCshcNIFY$FGLP%$;Dl&KvN=aAhU zUYog6qD|$d6Bw{99r9DFSHH0GBLk2HENY*(WJgU_^PFr6i)zF*td0gE-NY>CVHJ}G ysyaRve#z=T&yS+2erfSLvP36@Y{K#0=)DQYdZTw@93oig*KAAKKJ4L0lYaubLvKO= literal 0 HcmV?d00001 diff --git a/core/urls.py b/core/urls.py index 6299e3d..1facb35 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,11 @@ from django.urls import path -from .views import home +from .views import home, ingest_data, resolve_entities + +app_name = 'core' urlpatterns = [ path("", home, name="home"), -] + path("api/ingest/", ingest_data, name="ingest_data"), + path("api/resolve/", resolve_entities, name="resolve_entities"), +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..cfa6cf5 100644 --- a/core/views.py +++ b/core/views.py @@ -1,10 +1,13 @@ -import os -import platform - -from django import get_version as django_version +import json +from django.http import JsonResponse +from django.views.decorators.csrf import csrf_exempt +from core.services.ingestion import IngestionService +from core.services.resolution import EntityResolutionService from django.shortcuts import render from django.utils import timezone - +import os +import platform +from django import get_version as django_version def home(request): """Render the landing screen with loader and environment details.""" @@ -23,3 +26,21 @@ def home(request): "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), } return render(request, "core/index.html", context) + +@csrf_exempt +def ingest_data(request): + if request.method == 'POST': + data = json.loads(request.body) + # Using IngestionService as a placeholder for actual processing + result = IngestionService.ingest(data) + return JsonResponse({'status': 'success', 'data': result}) + return JsonResponse({'error': 'Invalid request'}, status=400) + +@csrf_exempt +def resolve_entities(request): + if request.method == 'POST': + data = json.loads(request.body) + # Using EntityResolutionService as a placeholder for actual processing + result = EntityResolutionService.resolve(data) + return JsonResponse({'status': 'success', 'result': result}) + return JsonResponse({'error': 'Invalid request'}, status=400) \ No newline at end of file