Mini Shell

Direktori : /lib/python3.6/site-packages/xdg/__pycache__/
Upload File :
Current File : //lib/python3.6/site-packages/xdg/__pycache__/DesktopEntry.cpython-36.pyc

3

�N�P�A�@sTdZddlmZmZddlZddlmZddlZ	ddl
Z
ddlZGdd�de�ZdS)a=
Complete implementation of the XDG Desktop Entry Specification Version 0.9.4
http://standards.freedesktop.org/desktop-entry-spec/

Not supported:
- Encoding: Legacy Mixed
- Does not check exec parameters
- Does not check URL's
- Does not completly validate deprecated/kde items
- Does not completly check categories
�)�IniFile�is_asciiN)�ParsingErrorc@s�eZdZdZdZdpdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>d?�Z"d@dA�Z#dBdC�Z$dDdE�Z%dFdG�Z&dHdI�Z'dJdK�Z(dLdM�Z)dNdO�Z*dPdQ�Z+dRdS�Z,dTdU�Z-dVdW�Z.dXdY�Z/dZd[�Z0d\d]�Z1d^d_�Z2d`da�Z3dbdc�Z4ddde�Z5dfdg�Z6dhdi�Z7djdk�Z8dldm�Z9dndo�Z:dS)q�DesktopEntryz+Class to parse and validate Desktop Entriesz
Desktop EntryNcCs6t�|_|r$tjj|�r$|j|�n|r2|j|�dS)z�Create a new DesktopEntry
        
        If filename exists, it will be parsed as a desktop entry file. If not,
        or if filename is None, a blank DesktopEntry is created.
        N)�dict�content�os�path�exists�parse�new)�self�filename�r�"/usr/lib/python3.6/DesktopEntry.py�__init__s
zDesktopEntry.__init__cCs|j�S)N)�getName)r
rrr�__str__%szDesktopEntry.__str__cCstj||ddg�dS)zParse a desktop entry file.z
Desktop EntryzKDE Desktop EntryN)rr)r
�filerrrr(szDesktopEntry.parsecCs
|jd�S)N�Type)�get)r
rrr�getType-szDesktopEntry.getTypecCs|jddd�S)z)deprecated, use getVersionString instead �Version�numeric)�type)r)r
rrr�
getVersion/szDesktopEntry.getVersioncCs
|jd�S)Nr)r)r
rrr�getVersionString2szDesktopEntry.getVersionStringcCs|jddd�S)N�NameT)�locale)r)r
rrrr4szDesktopEntry.getNamecCs|jddd�S)NZGenericNameT)r)r)r
rrr�getGenericName6szDesktopEntry.getGenericNamecCs|jddd�S)N�	NoDisplay�boolean)r)r)r
rrr�getNoDisplay8szDesktopEntry.getNoDisplaycCs|jddd�S)N�CommentT)r)r)r
rrr�
getComment:szDesktopEntry.getCommentcCs|jddd�S)NZIconT)r)r)r
rrr�getIcon<szDesktopEntry.getIconcCs|jddd�S)N�Hiddenr!)r)r)r
rrr�	getHidden>szDesktopEntry.getHiddencCs|jddd�S)N�
OnlyShowInT)�list)r)r
rrr�
getOnlyShowIn@szDesktopEntry.getOnlyShowIncCs|jddd�S)N�	NotShowInT)r))r)r
rrr�getNotShowInBszDesktopEntry.getNotShowIncCs
|jd�S)N�TryExec)r)r
rrr�
getTryExecDszDesktopEntry.getTryExeccCs
|jd�S)N�Exec)r)r
rrr�getExecFszDesktopEntry.getExeccCs
|jd�S)N�Path)r)r
rrr�getPathHszDesktopEntry.getPathcCs|jddd�S)N�Terminalr!)r)r)r
rrr�getTerminalJszDesktopEntry.getTerminalcCs|jdddd�S)z%deprecated, use getMimeTypes instead �MimeTypeT�regex)r)r)r)r
rrr�getMimeTypeLszDesktopEntry.getMimeTypecCs|jddd�S)Nr5T)r))r)r
rrr�getMimeTypesOszDesktopEntry.getMimeTypescCs|jddd�S)N�
CategoriesT)r))r)r
rrr�
getCategoriesQszDesktopEntry.getCategoriescCs|jddd�S)N�
StartupNotifyr!)r)r)r
rrr�getStartupNotifySszDesktopEntry.getStartupNotifycCs
|jd�S)N�StartupWMClass)r)r
rrr�getStartupWMClassUszDesktopEntry.getStartupWMClasscCs
|jd�S)N�URL)r)r
rrr�getURLWszDesktopEntry.getURLcCs|jddd�S)N�ServiceTypesT)r))r)r
rrr�getServiceTypes\szDesktopEntry.getServiceTypescCs
|jd�S)N�DocPath)r)r
rrr�
getDocPath^szDesktopEntry.getDocPathcCs|jdddd�S)NZKeywordsT)r)r)r)r
rrr�getKeywords`szDesktopEntry.getKeywordscCs
|jd�S)N�InitialPreference)r)r
rrr�getInitialPreferencebsz!DesktopEntry.getInitialPreferencecCs
|jd�S)N�Dev)r)r
rrr�getDevdszDesktopEntry.getDevcCs
|jd�S)N�FSType)r)r
rrr�	getFSTypefszDesktopEntry.getFSTypecCs
|jd�S)N�
MountPoint)r)r
rrr�
getMountPointhszDesktopEntry.getMountPointcCs|jddd�S)N�ReadOnlyr!)r)r)r
rrr�getReadonlyjszDesktopEntry.getReadonlycCs|jddd�S)NZUnmountIconT)r)r)r
rrr�getUnmountIconlszDesktopEntry.getUnmountIconcCs|jddd�S)NZMiniIconT)r)r)r
rrr�getMiniIconqszDesktopEntry.getMiniIconcCs
|jd�S)N�TerminalOptions)r)r
rrr�getTerminalOptionssszDesktopEntry.getTerminalOptionscCs
|jd�S)N�
DefaultApp)r)r
rrr�
getDefaultAppuszDesktopEntry.getDefaultAppcCs|jddd�S)N�	ProtocolsT)r))r)r
rrr�getProtocolswszDesktopEntry.getProtocolscCs|jddd�S)N�
ExtensionsT)r))r)r
rrr�
getExtensionsyszDesktopEntry.getExtensionscCs
|jd�S)N�
BinaryPattern)r)r
rrr�getBinaryPattern{szDesktopEntry.getBinaryPatterncCs
|jd�S)N�	MapNotify)r)r
rrr�getMapNotify}szDesktopEntry.getMapNotifycCs
|jd�S)N�Encoding)r)r
rrr�getEncodingszDesktopEntry.getEncodingcCs|jddd�S)NZSwallowTitleT)r)r)r
rrr�getSwallowTitle�szDesktopEntry.getSwallowTitlecCs
|jd�S)N�SwallowExec)r)r
rrr�getSwallowExec�szDesktopEntry.getSwallowExeccCs|jddd�S)N�	SortOrderT)r))r)r
rrr�getSortOrder�szDesktopEntry.getSortOrdercCs|jddd�S)N�FilePatternr6)r)r)r
rrr�getFilePattern�szDesktopEntry.getFilePatterncCs|jddd�S)N�ActionsT)r))r)r
rrr�
getActions�szDesktopEntry.getActionscCshtjj|�ddkrd}n$tjj|�ddkr4d}n
td|��t�|_|j|j�|jd|�||_	dS)	z�Make this instance into a new desktop entry.
        
        If filename has a .desktop extension, Type is set to Application. If it
        has a .directory extension, Type is Directory.
        �z.desktop�Applicationz
.directory�	DirectoryzUnknown extensionrN)
rr	�splitextrrrZaddGroup�defaultGroup�setr)r
rrrrrr�s
zDesktopEntry.newcCs�|jdkr|jjd�|jdkr.|jjd�n |jdkrN|jdkrN|jjd�y|j|jd|_Wn tk
r�|jjd	�YnXy|j|jd
|_Wn tk
r�|jjd�YnXdS)NzKDE Desktop Entryz([KDE Desktop Entry]-Header is deprecatedz.kdelnkz$File extension .kdelnk is deprecatedz.desktopz
.directoryzUnknown File extensionrzKey 'Type' is missingrzKey 'Name' is missing)	rm�warnings�append�
fileExtensionrr�KeyError�errors�name)r
rrr�checkExtras�s

zDesktopEntry.checkExtrascCsh||jkp(tjd|�p(tjd|�o(t|�s<|jjd|�n(d|j|krdd|j|krd|jjd�dS)Nz^Desktop Action [a-zA-Z0-9\-]+$z^X-zInvalid Group name: %sr(r+z;Group may either have OnlyShowIn or NotShowIn, but not both)rm�re�matchrrsrpr)r
�grouprrr�
checkGroup�s
zDesktopEntry.checkGroupcCs�|dkr�|dks |dks |dkr2|jjd|�n>|dkrH|jjd�n(|dkp^|d	kp^|d
ksp|jjd|�|jdkr�|d
kr�|jjd
|�n|jdkr�|d
kr�|jjd�|dkr�d|j|kr�|jjd�|d	kr�d|j|kr�|jjd��n�|dk�r|j||��n�tjdtj	j
d|��r4�n�tjdtj	j
d|��rR�nt|dk�rp|j||dd��nVtjdtj	j
d|��r��n8tjdtj	j
d|��r�|j||��n|dk�r�|j||dd��n�|dk�r�|j||dd �|j|��n�|d!k�r&|j||dd �|j|��n�|d"k�rL|j||�|j|d��nz|dk�rr|j||�|j|d��nT|d#k�r�|j||�|j|d��n.|d$k�r�|j||dd�|j|d��n|d%k�r�|j||dd �|j|d��n�|dk�r|j||dd �|j|d��n�|d&k�rF|j||�|j|d�|j
|��n�tjd'tj	j
d|��r�|j||d(dd)�|j|d��nD|d*k�r�|j||dd�|j|d��n|d+k�r�|j|d��n|dk�r�|j||�|j|d��n�|d,k�r|j||dd �|jjd-|��n�|d.k�rD|j||�|jjd-|��n�|d/k�rr|j||d0d�|jjd-|��nT|d1k�r�|j||�|j|d�|jjd-|��n|d2k�r�|j||�|j|d�|jjd-|��n�|d3k�r|j||�|j|d�|jjd-|��n�|d4k�rN|j||dd�|j|d�|jjd-|��nxtjd5tj	j
d|��r�|j||�|j|d�|jjd-|��n2|d6k�r�|j||�|jjd7|��ntjd8tj	j
d|��r�|j||�|jjd7|��n�|d9k�r"|j||�|jjd7|��n�|d:k�rL|j||�|jjd7|��nz|d;k�rz|j||dd �|jjd7|��nL|d<k�r�|j||dd �|jjd7|��n|d=k�r�|j||�|jjd7|�n�|d>k�r�|j||�|jjd7|�n�tjd?tj	j
d|��r$|jjd7|�n�|d@k�rL|j||�|jjd7|�nz|dAk�rz|j||dBdd)�|jjd7|�nL|dCk�r�|j||dd �|jjd7|�n tjdD|��r�n|jjdE|�dS)FNrZServiceTypeZServiceZFSDevicezType=%s is a KDE extensionr5zType=MimeType is deprecatedrjZLinkrkzGValue of key 'Type' must be Application, Link or Directory, but is '%s'z
.directoryz.File extension is .directory, but Type is '%s'z.desktopz>Files with Type=Directory should have the extension .directoryr/z!Type=Application needs 'Exec' keyr?zType=Link needs 'URL' keyrz^Name�$z^GenericNamer r!)rz^Commentz^Iconr&r(T)r)r+r-r1r3rgr9z	^KeywordsZlocalestring)rr)r;r=rAzKey '%s' is a KDE extensionrCrFrrHrJrLrNz^UnmountIconr^zKey '%s' is deprecatedz	^MiniIconrRrTrVrXrZr\z
^SwallowTitlerarer6rcz^X-[a-zA-Z0-9-]+zInvalid key: %s)rorprsrqrZ
checkValuervrw�xdgZLocaler6�checkOnlyShowIn�	checkType�checkCategories)r
�key�valuerxrrr�checkKey�s































zDesktopEntry.checkKeycCs$|j�|ks |jjd||f�dS)Nz Key '%s' only allowed in Type=%s)rrsrp)r
rrrrrr}�szDesktopEntry.checkTypec
Cs\|j|�}ddddddddd	d
g
}x4|D],}||kr(|dd�d
kr(|jjd|�q(WdS)N�GNOME�KDEZLXDEZMATEZRazorZROXZTDEZUnity�XFCEZOldr�zX-z)'%s' is not a registered OnlyShowIn value)�getListrsrp)r
r��valuesZvalid�itemrrrr|�s

zDesktopEntry.checkOnlyShowInc~s�|j|�}ddddddddd	d
ddd
g
�t�fdd�|D��rL|jjd�dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g~}|�}x6|D].}||k�or|jd���r�|jjd�|��qZWdS)�NZ
AudioVideoZAudioZVideoZDevelopmentZ	EducationZGameZGraphicsZNetworkZOfficeZScienceZSettingsZSystemZUtilityc3s|]}|�kVqdS)Nr)�.0r�)�mainrr�	<genexpr>�sz/DesktopEntry.checkCategories.<locals>.<genexpr>zMissing main categoryZBuildingZDebuggerZIDEZGUIDesignerZ	ProfilingZRevisionControlZTranslationZCalendarZContactManagementZDatabaseZ
DictionaryZChartZEmailZFinanceZ	FlowChartZPDAZProjectManagementZPresentationZSpreadsheetZ
WordProcessorZ
2DGraphicsZVectorGraphicsZRasterGraphicsZ
3DGraphicsZScanningZOCRZPhotographyZ
PublishingZViewerZ	TextToolsZDesktopSettingsZHardwareSettingsZPrintingZPackageManagerZDialupZInstantMessagingZChatZ	IRCClientZFeedZFileTransferZHamRadioZNewsZP2PZRemoteAccessZ	TelephonyZTelephonyToolsZVideoConferenceZ
WebBrowserZWebDevelopmentZMidiZMixerZ	SequencerZTunerZTVZAudioVideoEditingZPlayerZRecorderZDiscBurningZ
ActionGameZ
AdventureGameZ
ArcadeGameZ	BoardGameZ
BlocksGameZCardGameZKidsGameZ	LogicGameZRolePlayingZShooterZ
SimulationZ
SportsGameZStrategyGameZArtZConstructionZMusicZ	LanguagesZArtificialIntelligenceZ	AstronomyZBiologyZ	ChemistryZComputerScienceZDataVisualizationZEconomyZElectricityZ	GeographyZGeologyZ
GeoscienceZHistoryZ
HumanitiesZImageProcessingZ
LiteratureZMapsZMathZNumericalAnalysisZMedicalSoftwareZPhysicsZRoboticsZSpiritualityZSportsZParallelComputingZ	AmusementZ	ArchivingZCompressionZElectronicsZEmulatorZEngineeringZ	FileToolsZFileManagerZTerminalEmulatorZ
FilesystemZMonitorZSecurityZ
AccessibilityZ
CalculatorZClockZ
TextEditorZ
DocumentationZAdultZCorer�r�r�ZGTKZQtZMotifZJavaZConsoleOnlyzX-z!'%s' is not a registered Category)r��anyrsrp�
startswith)r
r�r�Z
additionalZ
allcategoriesr�r)r�rr~�s
�
zDesktopEntry.checkCategoriescCstjdt�|j|�S)z`Deprecated alias for checkCategories - only exists for backwards
        compatibility.
        z1checkCategorie is deprecated, use checkCategories)ro�warn�DeprecationWarningr~)r
r�rrr�checkCategorie�szDesktopEntry.checkCategorie)N);�__name__�
__module__�__qualname__�__doc__rmrrrrrrrrr"r$r%r'r*r,r.r0r2r4r7r8r:r<r>r@rBrDrErGrIrKrMrOrPrQrSrUrWrYr[r]r_r`rbrdrfrhrruryr�r}r|r~r�rrrrrsr
=r)
r�Zxdg.IniFilerrZ
xdg.Localer{Zxdg.ExceptionsrZos.pathrrvrorrrrr�<module>s