PK!C'66dau/__init__.pydefault_app_config = 'dau.apps.DjangoAutoUserConfig' PK!#Bbb dau/apps.pyfrom django.apps import AppConfig from django.db.models import signals from django.apps import apps from . import core class DjangoAutoUserConfig(AppConfig): name = 'dau' verbose_name = "Django Auto User" def ready(self): signals.post_migrate.connect(core.post_migrate_receiver,sender=apps.get_app_config("auth")) PK!Q  dau/core.py import warnings from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.db.models import signals from django.apps import apps from django.db import DEFAULT_DB_ALIAS def tag(msg:str): return "{} {}{}"('[DJANGO AUTO USER]',msg,'.') def err_set(err_msg:str): raise ImproperlyConfigured(tag(err_msg)) def wrn(warn_msg:str): warnings.warn(tag(warn_msg)) class DjangoAutoUser(): def __init__(self): from django.contrib.auth import get_user_model self.auto_user = getattr(settings,'DJANGO_AUTO_USER') self.user_model = get_user_model() self.USERNAME_FIELD = self.user_model.USERNAME_FIELD self.__validate() self.__create_users() def __is_valid(self,obj,typ:type): if obj and isinstance(obj,typ): return True else: return False def __validate(self): self.__settings_validation() self.__users_validation() def __settings_validation(self): if not self.__is_valid(self.auto_user,list): err_set('DJANGO_AUTO_USER settings under Django settings must be of type list but instead is of type {}'.format(str(type(self.auto_user)))) def __users_validation(self): for idx, user_entry in enumerate(self.auto_user): self.__is_valid_user(idx,user_entry) uuf=[user_entry[self.USERNAME_FIELD] for user_entry in self.auto_user] if len(uuf) != len(set(uuf)): err_set('The username field {} is not unique amoung users entries in Django_AUTO_USER'.format(self.USERNAME_FIELD)) def __is_valid_user(self,idx,user_entry): if not self.__is_valid(user_entry,dict): err_set('User entry at index {} in DJANGO_AUTO_USER settings must be a non empty dictionary'.format(str(idx))) elif not self.__is_valid(user_entry['password'],str): err_set('User entry at index {} in DJANGO_AUTO_USER settings must contain a non empty "password" field of type {}'.format(str(idx),str(type(str)))) elif not self.__is_valid(user_entry[self.USERNAME_FIELD],str): err_set('User entry at index {} in DJANGO_AUTO_USER settings must contain a non empty "{}" username field of type {}'.format(str(idx),self.USERNAME_FIELD,str(type(str)))) def __create_users(self): for idx, user_entry in enumerate(self.auto_user): try: user, created = self.user_model.objects.get_or_create({self.USERNAME_FIELD:user_entry[self.USERNAME_FIELD]}) user.set_password(user_entry['password']) for field, value in user_entry.items(): if field not in [self.USERNAME_FIELD, "password"]: if hasattr(user,field): setattr(user,field,value) else: wrn('User model does not have attribute {} defined in user entry at index {} in DJANGO_AUTO_USER settings'.format(self.USERNAME_FIELD,str(idx))) user.save() except Exception as error: err_set('Could not create user entry at index {} in DJANGO_AUTO_USER settings. {}'.format(str(idx),str(error))) def post_migrate_receiver(app_config, verbosity=2, interactive=False, using=DEFAULT_DB_ALIAS, **kwargs): DjangoAutoUser()PK!h:. dau/tests.pyfrom django.test import TestCase from django.contrib.auth import get_user_model class DAUTestCase(TestCase): def test_default_user_object(self): User = get_user_model() users_number = User.objects.count() self.assertEqual(users_number,1) PK!HڽTUdau-0.1.3.dist-info/WHEEL A н#Z;/"d&F[xzw@Zpy3Fv]\fi4WZ^EgM_-]#0(q7PK!Hedau-0.1.3.dist-info/METADATAUmo"7_1} HMNZ]NG$(@1dw{M]{<+t"Nt@cSxص0\xv>gƾ٦NU EAZW yo®+B,6Mt_LUI ~h8{K̰͡~u9adP >mwLaEPR(68?4h-{C]ZH;p3F1k?922jeDUzCrؓAzo|㣋i scSca Nm?c63Rv/TvVS~\mj/^9p~?pFf+za#R PK\׫; 2c֏ .U*!YQg9e(H"_!cZom3no`J=߁AiAO\Dla Ayj[r.k꿲">"{UT^fZGhV ,JL@d 2vww`BI2d~Cxy=ïFcK 7I#<b\pS5%):<Ì8:ng'#FIuu y:O_o\/R">b\Bku1 gcMcL cs5`NgB'"sr$ 9J<`JRzF3 ԣ+(ÝPDM|2y1Cv1,)WJ3+(h;KJ#O55H92[^.m-q."G`L HFSU~̺'k4p2i`u٦oXm*z.Kuqoڤ|?r3j_hBߚzpEńQvy24rDķoo0PK!C'66dau/__init__.pyPK!#Bbb cdau/apps.pyPK!Q  dau/core.pyPK!h:. dau/tests.pyPK!HڽTUdau-0.1.3.dist-info/WHEELPK!He^dau-0.1.3.dist-info/METADATAPK!Hߓ+Jdau-0.1.3.dist-info/RECORDPK