From b19870501acfe0846ded759a68d2536e8b972971 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 22 Mar 2026 22:50:51 +0000 Subject: [PATCH] RIPLEY --- core/__pycache__/models.cpython-311.pyc | Bin 3638 -> 4651 bytes .../0003_identityprofile_entity_profile.py | 30 +++++++++ ...tityprofile_entity_profile.cpython-311.pyc | Bin 0 -> 1776 bytes core/models.py | 16 ++++- .../__pycache__/ingestion.cpython-311.pyc | Bin 1870 -> 1931 bytes core/services/ingestion.py | 29 +++++---- core/templates/core/dashboard.html | 60 ++++++++++++++++-- 7 files changed, 113 insertions(+), 22 deletions(-) create mode 100644 core/migrations/0003_identityprofile_entity_profile.py create mode 100644 core/migrations/__pycache__/0003_identityprofile_entity_profile.cpython-311.pyc diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 08f525274ff39d40288611eee0de1f6afc45b0c4..2b7c80f68b883afb36d7526124714ea48ff444ff 100644 GIT binary patch delta 1885 zcmaJ>O>7%Q7~S>HuDy=eKZz6Pk8DFla0w=Dq^2ruLz=j0l+>ieDNUeSw%$$HYU533 z*Hld^905X=T2+arhaP(1(vVOeKnTPE3DgsaizE3EEq4$|h*ar`3(U70CyoP*HP5>< zZ@&G$d2iP!pG^)R=PgqT+}cn`#z#%|H{2qmXWy$DiK)u z{3m)H-=fbF{Eq&D4&m#rzF<9By-uM9@`s}ME7v03fRDOk0XKvtZTks@FS><7(Y;Dj z)ML_}HqE#w#dD3Vyvv@Vw}#=f8UFuakVHw0Kox_jiBY%1DC}^^XV@A_5GtMKWj`sB zvqB@Xk~3BF<~Y)4R83isIDxcbr03@i;XMhddfpIhimDjGi{lD1^jx=)nv+zmTbMKy zl#}L^Zb31#$%LThOkI!!qhHOqMhw_g0YwQSkYk~#riP>_8YU9O7?45lC2BKNfA{^8 zuiX|dod_YALyZ7U1T0n*Wj!m32y{eofahTkQ8Pdb0n0b}#@IPk(PS&KQ;n$3NwbQW zM;dAcS{u-~{JbogiY!W|ogHe2DaSAH)KLK_*?2%;Y4^9~a(R7Q6aYg-P9Iuk%3)z` zuoUju2=|o3Jxe2-(az-;%F)iXhEg=S5lxn($)(ZFc-I5wVQ5V*#d|m6z2$gs$rHo0 zJBI&Yn@-T)=eDSW;G_iEWJ%v`6@zXM;c@r9g0C{6)DhHRcQ3jL0s-Tdb>LM5`I6C`$GggEf?T`@HhxyoOd?BmvT$Hr*hHiML~N zgm^oO70;t%2@mQcla?n(JcPgu=mddZodsL{#B{8z%t(37v`vTvEO5;@<(&*vSp+}w z9%=Re9=}Y(ybGQJ@(}~7f zW7eh8nUTztn3)<+O;ova_Y)R(PDhG5n;TVbB9Ovj2L~nw2ZmDUEMx!*TfT`@ModqR zjalrDcgZqMmrTdd;jE4u*-+oEi%}OWO##3OtMzaK#sJ`;7=Pm|`_3W0GL+K92wNw>BPykjDT{ z0=!Bfg91d0#h0sefTEMT+0KtHPVWo&vZGa6k{N1)Ay8_~SrN zy`w<1S^@lHp#92uSZJ3#0#9~CI~Y{zD07ITBh@UFRc7yS1Iz78t^l6bK0m$&R) zf!B0`wfyomDL1Pp<*T;bmiK}#E1E5>b9vaQ*b(;c!e72qbGn?@lru;qvEY_8e#V91 v`O5*CTmc7RdFH)BU)gn5fM>P=!B5jy7$VaTk>IoKzSA-t zAo4+0g6Gbs0*@{6Xr4L;ANls{j=Fc5WtdfZ8)wRAV|4o+ar><~>inJz$;Mn@G@;69 z;yDpL6BLLHQj2(C@IC#9BjDn zdIQu+4kENbzbDpq7|jM5YMJ&+x}lOjY6fA!bELs-5SBcto|Bk)3IVq+Bb5k|@Qsoz zh{>XnH|Dz)rECyI2}6kMxQ30>(E!;sm3mA*na+-9Czb5v0(NsCk`xejSgoF_7d|h{#T`%SY`v F`wx;^yJi3Y diff --git a/core/migrations/0003_identityprofile_entity_profile.py b/core/migrations/0003_identityprofile_entity_profile.py new file mode 100644 index 0000000..208ae32 --- /dev/null +++ b/core/migrations/0003_identityprofile_entity_profile.py @@ -0,0 +1,30 @@ +# Generated by Django 5.2.7 on 2026-03-22 22:49 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0002_relationship'), + ] + + operations = [ + migrations.CreateModel( + name='IdentityProfile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('full_name', models.CharField(max_length=255)), + ('description', models.TextField(blank=True)), + ('profile_image_url', models.URLField(blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + migrations.AddField( + model_name='entity', + name='profile', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='entities', to='core.identityprofile'), + ), + ] diff --git a/core/migrations/__pycache__/0003_identityprofile_entity_profile.cpython-311.pyc b/core/migrations/__pycache__/0003_identityprofile_entity_profile.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de7a3898a445a90e734731518a0e6147b5a8d67e GIT binary patch literal 1776 zcmZuxJ#5=X6h2ZCEzy=O*-BKqsifA1QDu9y%1AyfveT!fjy<89jRF(2)W-2!{>@I%Sh#Pg&Y`M@dOzA9;`O?mfQ0@7?_x z4$BC}Ur*1q`+kJ}VT-{C^qI>wV17mzVL?Yl0luOx)_p}^-Cy(zNJI}1_WgjcpZIEn zf6$2!p;MUNCW>2Qn{{GP1V+nhDD{ifr)OF`?~xy)?ZxyBrxBE`z?xC zs0u}&h=~8SCoE#NBh^L*2CyHV0G8S#Cy>)AOm9>~9ORn8!43|!|$dHQ;ID8A=ZpTjmxzizf?RWlNegl@$flS~>xKOi`Y;RGpb%D@>ZC0shMnj>*m+9bM&x ze#GpW>@3i+6|I^B2=Xi+8d}{}%|2To`?kjhx4z!+xbPYjrJ&VGUy#Gtmmo*p1UgOAq>%I4O_29=E_>7V!C(Io_dUOmZf8+DRxm0AtEl_mS6 z3?Z4>J;U6wnrfM3SuL}#?};pQ*`o4RZ50m-rC;hy^T1@y&I!8@tb1^>4~I`rLZSJd zPmD>28$B6?l0V9BFwu>E@OSi<6Tf@3>&EY%`Tv}Aii*=Pow(JBTW;KPB6c@=$4O+K zSKLJAY}QFEcM{8PV%dq@??w|&YT;ONQwuL_C$-c`ExD;BC-QkWI(KXwSAH?h)|~lV zXFli7=bXq&H~OBFTztOkCKu0RPBPy~=G|o8i9C2ia8_`VE1l$un_O`stG)0@Y`hnc zL-GXza>YpRHVWNg!N1#$C%e&^?&R#zygNDj+uV!7`IA4sao4xp_3z#FY7e13At%Bo zFMi8DQ{RafoL+I-8}T!{K&}|+O-CoC!!OuleljRzTB6e)z8PG~c(-+C0J8ZJsL{|+ z&YO<+nTNzZW`&#j6u4KxC9iXr&Cg)Tu3f7Hq~{X^0nicNcTmcEyXZsbrne`>1*wOw RlOx%U%v~_S)eTY}!+(qx?hgO} literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 9a1dbe1..5c5187c 100644 --- a/core/models.py +++ b/core/models.py @@ -8,6 +8,19 @@ class Source(models.Model): def __str__(self): return self.name +class IdentityProfile(models.Model): + """ + Groups various entities (Person, Email, Username, etc.) into a single identity profile. + """ + full_name = models.CharField(max_length=255) + description = models.TextField(blank=True) + profile_image_url = models.URLField(blank=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.full_name + class Entity(models.Model): ENTITY_TYPES = ( ('PERSON', 'Person'), @@ -18,6 +31,7 @@ class Entity(models.Model): entity_type = models.CharField(max_length=20, choices=ENTITY_TYPES) value = models.CharField(max_length=255, db_index=True) source = models.ForeignKey(Source, on_delete=models.CASCADE, related_name='entities') + profile = models.ForeignKey(IdentityProfile, on_delete=models.SET_NULL, null=True, blank=True, related_name='entities') confidence_score = models.FloatField(default=1.0) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) @@ -45,4 +59,4 @@ class Relationship(models.Model): unique_together = ('source_entity', 'target_entity', 'relationship_type') def __str__(self): - return f"{self.source_entity} -[{self.relationship_type}]-> {self.target_entity}" + return f"{self.source_entity} -[{self.relationship_type}]-> {self.target_entity}" \ No newline at end of file diff --git a/core/services/__pycache__/ingestion.cpython-311.pyc b/core/services/__pycache__/ingestion.cpython-311.pyc index 0363eac3c613799b44a6f0e78568b838bc277d54..b9ff0042139d95f2a3408c870f10e8feb8fcee5f 100644 GIT binary patch literal 1931 zcmah}%}?A$6d!-@N0zU&bb+kbh$hXJu&Y*7m1q++phCG&T2xh8Az8*A7K1;?*b9Lg zDF+V8jZ{eFkOL>0iu?f_E9KH7pp~#JMT*p3dRqjQP)?n(*@fLS%GiE>@6Gr(@4fjw z|CUN603Lte|3hD80r-m;wSnz$oP2{{TR;OEWdM^ZQWVi?gEpBWW3olo z$ez^=sGh@wFXr4hxq+1}06~$`K#_)w#%T09wS&F8=Su)6vKoaqW`nkIs{|dg-xNek zx(X-MT5e=<96tp3#HR?Ti)C%h*Y!r|F8~GHOBnODz`*t;Zw&z`oFM5t?eRao)SuavI-wPCE5MX!L|J@@t&iaHaUs6Mq}kE;0Y?Ng;!&= z6qo{i;4|Q`%k%^09$3aay@$^Uvz5j)NUT~3>3rNRl@Kf`E_5Wt(j?19ref%;*whqP zk#x(oC3g-=&Whtg^Oj^U67nd9u_76|wV+!iNp~f@NU@|Qy5{SfV5+m0V#0|aK3g^n zndpJ=leJ*k%T|!oprax^1P(xsMoFA_5YynSQZ`&C5Edi)WBMkeevsXjMHp~Pic!Yh z;)Gp;TJcx81S0ecc*V6%T}7ncfnd+fLlpz1O3;;UB&!JGgb^W5z+fNZu!h=*$vVms z%*BIb1R6$)+R1bWnZ9x!icE@wt`Zj|M_=+$Xn_!+YYsWVT9u_YLxnlpgoW}<*>cMT z_yDS9*G7e98!b4CiV6#=jbOovn$juYx<+l9Ut9^2kri&bdab#G^Ot5xBF=ZXvmSzf z6QHH5lFA;WdMl~kD)=zo9g0_J@mb4JdhjqkxYxg*9y~~oR??%7#~+Pu+V)cBIntYPlOl_oIU+t>) z*HXJk@|dK1TF?1nqDebDJ8SYZnGQMj&EY#ES>|Py9qAKZ-k`9|Q4={Xh{+*8WI0I4 zvT18&17iJ(EZ;9H2H`ld99MC5)r9Vxt)VPN`yHHM36MwxY57nPraGTv@vwgRTzi%7 z;_$K6#4!W-j`is#FS=d>naBx2T$@*{lAYIPqE<)}V&!pk&~UB~%v{S;O%1{*LgWmnd+Xr9nzx%GTJroZAZE;L|r~fk%2J#;ghRK!y 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)k8l +

System Dashboard

+
-
-

System Dashboard

-
+
+
-
Welcome to the Management System
-

You are logged in as {{ user.username }}.

- Logout +
Quick Search
+
+ + +
+ +
+
+
+
+
People & Identities
+
+

Enter a search term to find entities.

+
+
+
+
+
+ +
+
+ Logout +
+
-{% endblock %} \ No newline at end of file + + +{% endblock %}