a #e@sddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZdd lmZd d lmZmZed ZGdddejZe e jeddddZe e jeddddZdS)N)rmtree)ValidationError)models)signals)receiver)ImageSpecField) ResizeToFit) gettext_lazy)settings)Themeupdate_theme_cssz app.loggercs eZdZejdddededdZejdddededd Ze d e d d gd d didZ e d e ddgd d didZ ejddddededdZ ejddddededdZejeddejededdZfddZfddZd d!ZGd"d#d#ZZS)$SettingFzThe name of your applicationzApp name) max_lengthblanknull help_text verbose_namez settings/z2A 512x512 logo of your application (.png or .jpeg)zApp logo) upload_torrrrapp_logo$PNGqualityZ)source processorsformatoptions0WebODMTzThe name of your organizationzOrganization name)defaultrrrrrz'https://github.com/OpenDroneMap/WebODM/z$The website URL of your organizationzOrganization websiter z Active theme)rr on_deleterrcs$tt|j|i||jj|_dSN)superr__init__rname _Setting__original_app_logo_name)selfargskwargs __class__/webodm/app/models/setting.pyr%$szSetting.__init__cs"|jdkr|jj|jkrtj|jjtj|jkrtjtj|j}tjtjddtj |jd}tj |rzt |t d|Wnt d|Yn0tj |rzt|t d|Wnt d|Yn0|jj|_tt|j|i|dS)NCACHEimagesrz Removed {}zCannot cleanup {})r'rr&ospathbasenamejoinr MEDIA_ROOTsplitextexistsunlinkloggerinforwarningrr$rsave)r(r)r*Z old_logo_pathZold_logo_path_cachesr+r-r.r=*s2       z Setting.savecCs ttdS)N Application)str_)r(r-r-r.__str__HszSetting.__str__c@seZdZedZedZdS)z Setting.MetaSettingsN)__name__ __module__ __qualname__r@rverbose_name_pluralr-r-r-r.MetaKsrG)rCrDrEr CharFieldr@app_name ImageFieldrrrZ app_logo_36Zapp_logo_faviconZorganization_nameURLFieldZorganization_website ForeignKeyr DO_NOTHINGthemer%r=rArG __classcell__r-r-r+r.rs*    rsetting_pre_save)sender dispatch_uidcKs2tjdkr.|jtjjkr.tdtjdS)NrzCan only create 1 %s instance)robjectscountidgetrrC)rQinstancer*r-r-r.rPPs setting_post_savecKs tdSr#)r )rQrWcreatedr*r-r-r.rXVs) loggingr2shutilrdjango.core.exceptionsr django.dbrdjango.db.modelsrdjango.dispatchrZimagekit.modelsrZimagekit.processorsrdjango.utils.translationr r@Zwebodmr rNr r getLoggerr:Modelrpre_saverP post_saverXr-r-r-r.s"          =