Files
ServerSync/lib/keyring/__pycache__/backend.cpython-314.pyc

139 lines
15 KiB
Plaintext
Raw Normal View History

2026-02-19 00:55:27 +02:00
+
<00>;<3B>im#<00><01><>a<00>0t$Rt^RIHt^RIt^RIt^RIt^RIt^RIt^RI t ^RI
t
^RI t ^RI H t ^RIHt^RIHtHtHt^RIHt^RIHt]P0!]4t]P6!R4tRtR ]R
&!R R ]P>4t !R R] R7t!!RR4t"!RR]"4t#RRlt$]RRl4t%!RR4t&R#)z
Keyring implementation support
)<01> annotationsN)<01> ExceptionTrap)<01>once)<03> credentials<6C>errors<72>util)<01>
properties)<01>metadata<74>priorityz.typing.Callable[[KeyringBackend], bool] | None<6E>_limitc<01>8a<00>]tRt^tRtV3RltRtRtRtV;t #)<06>KeyringBackendMetaz}
Specialized subclass behavior.
Keeps a registry of all (non-abstract) types.
Wraps set_password to validate the username.
c <09>h<<01>\SV`WV4VP4VP4R#<00>N)<04>super<65>__init__<5F> _register<65>"_validate_username_in_set_password)<05>cls<6C>name<6D>bases<65>dict<63> __class__s&&&&<26><>6/tmp/pip-target-ugtna5l2/lib/python/keyring/backend.pyr<00>KeyringBackendMeta.__init__'s'<00><><00> <0A><07><18><14>d<EFBFBD>+<2B> <0B> <0A> <0A><0F> <0B>.<2E>.<2E>0<>c <09><><00>\VR4'g\4VnVPpVP'gVP V4R#R#)<02>_classesN)<05>hasattr<74>setr<00>__abstractmethods__<5F>add)r<00>classess& rr<00>KeyringBackendMeta._register,s><00><00><16>s<EFBFBD>J<EFBFBD>'<27>'<27><1E>5<EFBFBD>C<EFBFBD>L<EFBFBD><15>,<2C>,<2C><07><12>&<26>&<26>&<26> <13>K<EFBFBD>K<EFBFBD><03> <1C>'rc <0A>ja<02>VPo\P!S4V3Rl4pWnR#)z=
Wrap ``set_password`` such to validate the passed username.
c<01>@<<01>VPV4S!WV.VO5/VB#r)<01>_validate_username)<06>self<6C>system<65>username<6D>args<67>kwargs<67>origs&&&*,<2C>r<00>wrapper<65>FKeyringBackendMeta._validate_username_in_set_password.<locals>.wrapper9s(<00><><00> <10> #<23> #<23>H<EFBFBD> -<2D><17><04>h<EFBFBD>@<40><14>@<40><16>@<40> @rN)<03> set_password<72> functools<6C>wraps)rr-r,s& @rr<00>5KeyringBackendMeta._validate_username_in_set_password3s5<00><><00><13><1F><1F><04> <12><1F><1F><14> <1E> A<01>
<1F> A<01>#<23>r<00>)
<EFBFBD>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__rrr<00>__static_attributes__<5F> __classcell__)rs@rr r s<00><><00><08>1<>
<1D> #<23> #rr c<01>v<00>]tRt^AtRtRt]PRRl4t] !4Pt
]P]
R44t ] RRl4t ]PRR l4tR
R lt]P"R R l4tRRlt]P"RRl4tRRltRRltRRltRRltRtR#)<1C>KeyringBackendzUThe abstract base class of the keyring, every backend must implement
this interface.
c <09>&<00>VP4R#r)<01>set_properties_from_env<6E>r's&rr<00>KeyringBackend.__init__Fs<00><00> <0C>$<24>$<24>&rc<01><00>V^8<>dQhRR/#)<03><00>return<72>floatr3)<01>formats"r<00> __annotate__<5F>KeyringBackend.__annotate__Js<00><00>"<22>"<22>%<25>"rc <0A><00>\h)ae
Each backend class must supply a priority, a number (float or integer)
indicating the priority of the backend relative to all other backends.
The priority need not be static -- it may (and should) vary based
attributes of the environment in which is runs (platform, available
packages, etc.).
A higher number indicates a higher priority. The priority should raise
a RuntimeError with a message indicating the underlying cause if the
backend is not suitable for the current environment.
As a rule of thumb, a priority between zero but less than one is
suitable, but a priority of one or greater is recommended.
)<01>NotImplementedErrorr?s&rr
<00>KeyringBackend.priorityIs
<00><00> "<22>!rc <09><00>VPR#r)r
<00>rs&r<00>viable<6C>KeyringBackend.viable^s <00><00> <0C> <0C> rc<01> <00>V^8<>dQhRRRR/#)rBrztype[KeyringBackend]rCzfilter[type[KeyringBackend]]r3)rEs"rrFrGds <00><00>C<01>C<01> !<21>C<01> %<25>Crc <0A>V<00>\\P!R4VP4#)z&
Return all subclasses deemed viable.
rM)<04>filter<65>operator<6F>
attrgetterrrLs&r<00>get_viable_backends<64>"KeyringBackend.get_viable_backendscs <00><00><16>h<EFBFBD>)<29>)<29>(<28>3<>S<EFBFBD>\<5C>\<5C>B<>Brc<01><00>V^8<>dQhRR/#<00>rBrC<00>strr3)rEs"rrFrGms<00><00> 2<> 2<>S<EFBFBD> 2rc <0A><><00>VPPR4wrpVPRR4pRPW0P.4#)zZ
The keyring name, suitable for display.
The name is derived from module and class name.
<EFBFBD>.<2E>_<> )r5<00>
rpartition<EFBFBD>replace<63>joinr4)r<00>parent<6E>sep<65>mod_names& rr<00>KeyringBackend.namelsE<00><00>!$<24><0E><0E> 9<> 9<>#<23> ><3E><1D><06>X<EFBFBD><1B>#<23>#<23>C<EFBFBD><13>-<2D><08><12>x<EFBFBD>x<EFBFBD><18><<3C><<3C>0<>1<>1rc<01><00>V^8<>dQhRR/#rWr3)rEs"rrFrGxs<00><00>m<01>m<01><13>mrc <09>l<00>\V4pVP RVP RVPR R2#)rZz (priority: <20>g<>))<04>typer5r4r
)r'<00> keyring_classs& r<00>__str__<5F>KeyringBackend.__str__xs><00><00><1C>T<EFBFBD>
<EFBFBD> <0A><1F>*<2A>*<2A>+<2B>1<EFBFBD>]<5D>-C<>-C<>,D<>L<EFBFBD>Q^<5E>Qg<51>Qg<51>hi<68>Pj<50>jk<6A>l<>lrc<01>$<00>V^8<>dQhRRRRRR/#)rB<00>servicerXr)rC<00>
str | Noner3)rEs"rrFrG}s!<00><00><14><14>C<EFBFBD><14>3<EFBFBD><14>:<3A>rc <0A><00>R#)z,Get password of the username for the serviceNr3<00>r'rmr)s&&&r<00> get_password<72>KeyringBackend.get_password|s<00><00>rc<01> <00>V^8<>dQhRRRR/#)rBr)rXrC<00>Noner3)rEs"rrFrG<00>s<00><00> <0E> <0E>3<EFBFBD> <0E>4<EFBFBD> rc <0A>T<00>V'g \P!R\^R7R#R#)z#
Ensure the username is not empty.
z(Empty usernames are deprecated. See #668)<01>
stacklevelN)<03>warnings<67>warn<72>DeprecationWarning)r'r)s&&rr&<00>!KeyringBackend._validate_username<6D>s!<00><00><18> <14>M<EFBFBD>M<EFBFBD>:<3A>"<22><1C> <0E>rc<01>(<00>V^8<>dQhRRRRRRRR/#)rBrmrXr)<00>passwordrCrtr3)rEs"rrFrG<00>s(<00><00>0<>0<>C<EFBFBD>0<>3<EFBFBD>0<>#<23>0<>$<24>0rc <0A>.<00>\P!R4h)znSet password for the username of the service.
If the backend cannot store passwords, raise
PasswordSetError.
<EFBFBD>reason)r<00>PasswordSetError<6F>r'rmr)r|s&&&&rr/<00>KeyringBackend.set_password<72>s<00><00><15>%<25>%<25>h<EFBFBD>/<2F>/rc<01>$<00>V^8<>dQhRRRRRR/#)rBrmrXr)rCrtr3)rEs"rrFrG<00>s!<00><00>3<>3<>s<EFBFBD>3<>c<EFBFBD>3<>d<EFBFBD>3rc <0A>.<00>\P!R4h)zyDelete the password for the username of the service.
If the backend cannot delete passwords, raise
PasswordDeleteError.
r~)r<00>PasswordDeleteErrorrps&&&r<00>delete_password<72>KeyringBackend.delete_password<72>s<00><00> <15>(<28>(<28><18>2<>2rc<01>$<00>V^8<>dQhRRRRRR/#)rBrmrXr)rnrCzcredentials.Credential | Noner3)rEs"rrFrG<00>s(<00><00><14><14><14><14><1D><14>
'<27> rc <0A>d<00>Ve,VPW4pVe\P!W#4#R#)z<>Gets the username and password for the service.
Returns a Credential instance.
The *username* argument is optional and may be omitted by
the caller or ignored by the backend. Callers must use the
returned username.
N)rqr<00>SimpleCredentialr<6C>s&&& r<00>get_credential<61>KeyringBackend.get_credential<61>s4<00><00> <14> <1F><1B>(<28>(<28><17>;<3B>H<EFBFBD><17>#<23>"<22>3<>3<>H<EFBFBD>G<>G<>rc<01><00>V^8<>dQhRR/#<00>rBrCrtr3)rEs"rrFrG<00>s<00><00>
'<27>
'<27><14>
'rc <0A><><00>RRlp\R\V\PP 444pVFwr4\ WV4K R#)z6For all KEYRING_PROPERTY_* env var, set that property.c<01><00>V^8<>dQhRR/#)rB<00>itemztuple[str, str]r3)rEs"rrF<00><KeyringBackend.set_properties_from_env.<locals>.__annotate__<5F>s<00><00> 1<> 1<><0F> 1rc<01>j<00>VwrVPR4wr4pT;'dVP4V3#)<01>KEYRING_PROPERTY_)<02> partition<6F>lower)r<><00>key<65>value<75>prerars& r<00>parse<73>5KeyringBackend.set_properties_from_env.<locals>.parse<73>s5<00><00><1D>J<EFBFBD>C<EFBFBD> <20>]<5D>]<5D>+><3E>?<3F>N<EFBFBD>C<EFBFBD>d<EFBFBD><16>0<>0<>D<EFBFBD>J<EFBFBD>J<EFBFBD>L<EFBFBD>%<25>0<> 0rN)rQ<00>map<61>os<6F>environ<6F>items<6D>setattr)r'r<><00>propsrr<>s& rr><00>&KeyringBackend.set_properties_from_env<6E>s?<00><00> 1<>
*0<><04>c<EFBFBD>%<25><12><1A><1A>AQ<41>AQ<41>AS<41>6T<36>)U<><05> <20>K<EFBFBD>D<EFBFBD> <13>D<EFBFBD><05> &<26>!rc<01> <00>V^8<>dQhRRRR/#)rBr+<00>
typing.AnyrCr<r3)rEs"rrFrG<00>s<00><00><13><13>
<EFBFBD><13>~<7E>rc <09>f<00>\P!V4p\V4PV4V#r)<03>copy<70>vars<72>update)r'r+<00>alts&, r<00>with_properties<65>KeyringBackend.with_properties<65>s&<00><00><12>i<EFBFBD>i<EFBFBD><04>o<EFBFBD><03> <0C>S<EFBFBD> <09><18><18><16> <20><12>
rr3N)r4r5r6r7r8rr<00> classpropertyr
r<00>passesrM<00> classmethodrTrrj<00>abc<62>abstractmethodrqr&r/r<>r<>r>r<>r9r3rrr<r<As<><00><00><08>'<27><10><1D><1D>"<22><1E>"<22>$<1B>_<EFBFBD> #<23> #<23>F<EFBFBD><0F><1D><1D> <0B><15> <0C><1E><15><11>C<01><11>C<01><10><1D><1D> 2<><1E> 2<>m<01> <09><17><17><14><18><14> <0E> <09><17><17>0<><18>0<>3<><14>&
'<27><13>rr<)<01> metaclassc<01>b<00>]tRt^<5E>tRt]P R4t]P R4tRt R#)<06>Crypterz.Base class providing encryption and decryptionc <0A><00>R#)zEncrypt the value.Nr3<00>r'r<>s&&r<00>encrypt<70>Crypter.encrypt<70><00><00><00> rc <0A><00>R#)zDecrypt the value.Nr3r<>s&&r<00>decrypt<70>Crypter.decrypt<70>r<>rr3N)
r4r5r6r7r8r<>r<>r<>r<>r9r3rrr<>r<><00>s7<00><00>8<><08><17><17> <0A><18> <0A> <09><17><17> <0A><18> rr<>c<01>&<00>]tRt^<5E>tRtRtRtRtR#)<06> NullCrypterzA crypter that does nothingc <09><00>V#rr3r<>s&&rr<><00>NullCrypter.encrypt<70><00><00><00><14> rc <09><00>V#rr3r<>s&&rr<><00>NullCrypter.decrypt<70>r<>rr3N)r4r5r6r7r8r<>r<>r9r3rrr<>r<><00>s<00><00>%<25><15>rr<>c<01><00>V^8<>dQhRR/#r<>r3)rEs"rrFrF<00>s<00><00>><3E>><3E>t<EFBFBD>>rc<05>.<00>\P!RR7FNp\PRVP4VP 4p\ V4'd
V!4KNKP R# \d\PRT R24K{i;i)a<>
Locate all setuptools entry points by the name 'keyring backends'
and initialize them.
Any third-party library may register an entry point by adding the
following to their setup.cfg::
[options.entry_points]
keyring.backends =
plugin_name = mylib.mymodule:initialize_func
`plugin_name` can be anything, and is only used to display the name
of the plugin at initialization time.
`initialize_func` is optional, but will be invoked if callable.
zkeyring.backends)<01>groupz
Loading %szError initializing plugin rZN) r <00> entry_points<74>log<6F>debugr<00>load<61>callable<6C> Exception<6F> exception)<02>ep<65> init_funcs r<00> _load_pluginsr<73><00>sx<00><00> <17>#<23>#<23>*<<3C>=<3D><02> ><3E> <0F>I<EFBFBD>I<EFBFBD>l<EFBFBD>B<EFBFBD>G<EFBFBD>G<EFBFBD> ,<2C><1A><07><07> <09>I<EFBFBD><17> <09>"<22>"<22><19> <0B>#<23> ><3E><> <19> ><3E> <0F>M<EFBFBD>M<EFBFBD>6<>r<EFBFBD>d<EFBFBD>!<21><<3C> =<3D> ><3E>s<00>AA,<02>,$B<05>Bc<01><00>V^8<>dQhRR/#)rBrCzlist[KeyringBackend]r3)rEs"rrFrF<00>s<00><00><17><17>-<2D>rc<05><><00>\4\P4p\P!V\
R7p\ V4#)zW
Return a list of all implemented keyrings that can be constructed without
parameters.
)<01>
exceptions)r<>r<rTr<00>suppress_exceptions<6E> TypeError<6F>list)<02>viable_classes<65>ringss r<00>get_all_keyringr<67><00>s3<00><00> <12>O<EFBFBD>#<23>7<>7<>9<>N<EFBFBD> <10> $<24> $<24>^<5E> <09> J<>E<EFBFBD> <0F><05>;<3B>rc<01>b<00>]tRtRtRtRt]!]!RRR7]!RRR7R 7tRR R lltR t R
#)<0F>SchemeSelectableia<>
Allow a backend to select different "schemes" for the
username and service.
>>> backend = SchemeSelectable()
>>> backend._query('contoso', 'alice')
{'username': 'alice', 'service': 'contoso'}
>>> backend._query('contoso')
{'service': 'contoso'}
>>> backend.scheme = 'KeePassXC'
>>> backend._query('contoso', 'alice')
{'UserName': 'alice', 'Title': 'contoso'}
>>> backend._query('contoso', 'alice', foo='bar')
{'UserName': 'alice', 'Title': 'contoso', 'foo': 'bar'}
<EFBFBD>defaultr)rm)r)rm<00>UserName<6D>Title)r<><00> KeePassXCNc<01>(<00>V^8<>dQhRRRRRRRR/#) rBrmrXr)rn<00>baser<65>rCzdict[str, str]r3)rEs"rrF<00>SchemeSelectable.__annotate__s,<00><00>
<EFBFBD>
<EFBFBD><1A>
<EFBFBD>&0<>
<EFBFBD>AK<EFBFBD>
<EFBFBD> <17>
rc <09><><00>VPVP,p\VeVR,VVR,V/M
VR,V/3/VB#)Nr)rm)<03>schemes<65>schemer)r'rmr)r<>r<>s&&&, r<00>_query<72>SchemeSelectable._querysa<00><00><16><1C><1C>d<EFBFBD>k<EFBFBD>k<EFBFBD>*<2A><06><13>
<18>#<23><17>z<EFBFBD>"<22>H<EFBFBD><16>y<EFBFBD>!<21>7<EFBFBD> <0E> <17>y<EFBFBD>!<21>7<EFBFBD><0E>

<EFBFBD><13>

<EFBFBD>
rr3r)
r4r5r6r7r8r<>rr<>r<>r9r3rrr<>r<>s6<00><00><08> <17>F<EFBFBD><12><14>j<EFBFBD>)<29><<3C><16>
<EFBFBD>G<EFBFBD><<3C><06>G<EFBFBD>

<EFBFBD>
rr<>)'<27>__conditional_annotations__r8<00>
__future__rr<>r<>r0<00>loggingrRr<><00>typingrw<00>jaraco.contextr<00>jaraco.functoolsr<00>rrr<00>compatr<00> compat.py312r <00> getLoggerr4r<>rS<00> by_priorityr <00>__annotations__<5F>ABCMetar r<r<>r<>r<>r<>r<>)r<>s@r<00><module>r<>s<><00><><01><04>#<23>
<EFBFBD> <0B><10><0E><0F> <09> <0A><0F>(<28>!<21>'<27>'<27><1E>"<22> <0A><17><17><08>!<21><03><17>!<21>!<21>*<2A>-<2D> <0B>9=<3D><06>6<>=<3D> #<23><13><1B><1B> #<23>FE<13>1<>E<13>P  <0A>  <0A><15>'<27><15>><3E>4<06><17><06><17>%
<EFBFBD>%
r