
    i_                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKr	S SK
r
S SKrS SKrSr " S S\R&                  5      r\" S\	R,                  " / S	Q5      \	R,                  " 5       / S
QSS\R.                  \	R,                  " SS/5      S9r\S   \S'   / SQ\S   S'   \S   S   \S   S'   \	R,                  " SS/5      \S'   \" SS9r\" SS9r " S S\R6                  5      r\S:X  a  \R<                  " 5         gg! \ aC    \R                  R                  S\ R                  R                  " \/S/S-  Q76 5        S SKr GN f = f! \ a    Sr GN+f = f)    N   z..   s  
### Default (baseline) configuration parameters.
### DO NOT ever change this config, use -c commandline option instead!

# Note that this file is YAML, so YAML types can be used here, see http://yaml.org/type/
# For instance, large number can be specified as "10_000_000" or "!!float 10e6".

source:
  # Path or glob pattern (to match path) to backup, required
  path: # example: /srv/backups/weekly.*

  queue:
    # Path to intermediate backup queue-file (list of paths to upload), required
    path: # example: /srv/backups/queue.txt
    # Don't rebuild queue-file if it's newer than source.path
    check_mtime: true

  entry_cache:
    # Path to persistent db (sqlite) of remote directory nodes, required
    path: # example: /srv/backups/dentries.sqlite

  # How to pick a path among those matched by "path" glob
  pick_policy: alphasort_last # only one supported


destination:
  # URL of Tahoe-LAFS node webapi
  url: http://localhost:3456/uri

  result: # what to do with a cap (URI) of a resulting tree (with full backup)
    print_to_stdout: true
    # Append the entry to the specified file (creating it, if doesn't exists)
    # Example entry: "2012-10-10T23:12:43.904543 /srv/backups/weekly.2012-10-10 URI:DIR2-CHK:..."
    append_to_file: # example: /srv/backups/lafs_caps
    # Append the entry to specified tahoe-lafs directory (i.e. put it into that dir)
    append_to_lafs_dir: # example: URI:DIR2:...

  encoding:
    xz:
      enabled: true
      options: # see lzma.LZMAOptions, empty = module defaults
      min_size: 5120 # don't compress files smaller than 5 KiB (unless overidden in "path_filter")
      path_filter:
        # List of include/exclude regexp path-rules, similar to "filter" section below.
        # Same as with "filter", rules can be tuples with '+' or '-' (implied for strings) as first element.
        #  '+' will indicate that file is compressible, if it's size >= "min_size" option.
        #  Unlike "filter", first element of rule-tuple can also be a number,
        #   overriding "min_size" parameter for matched (by that rule) paths.
        # If none of the patterns match path, file is handled as if it was matched by '+' rule.

        - '\.(gz|bz2|t[gb]z2?|xz|lzma|7z|zip|rar)$'
        - '\.(rpm|deb|iso)$'
        - '\.(jpe?g|gif|png|mov|avi|ogg|mkv|webm|mp[34g]|flv|flac|ape|pdf|djvu)$'
        - '\.(sqlite3?|fossil|fsl)$'
        - '\.git/objects/[0-9a-f]+/[0-9a-f]+$'
        # - [500, '\.(txt|csv|log|md|rst|cat|(ba|z|k|c|fi)?sh|env)$']
        # - [500, '\.(cgi|py|p[lm]|php|c|h|[ce]l|lisp|hs|patch|diff|xml|xsl|css|x?html[45]?|js)$']
        # - [500, '\.(co?nf|cfg?|li?st|ini|ya?ml|jso?n|vg|tab)(\.(sample|default|\w+-new))?$']
        # - [500, '\.(unit|service|taget|mount|desktop|rules|rc|menu)$']
        # - [2000, '^/etc/']


http:
  request_pool_options:
    maxPersistentPerHost: 10
    cachedConnectionTimeout: 600
    retryAutomatically: true
  ca_certs_files: /etc/ssl/certs/ca-certificates.crt # can be a list
  debug_requests: false # insecure! logs will contain tahoe caps


filter:
  # Either tuples like "[action ('+' or '-'), regexp]" or just exclude-patterns (python
  #  regexps) to match relative (to source.path, starting with "/") paths to backup.
  # Patterns are matched against each path in order they're listed here.
  # Leaf directories are matched with the trailing slash
  #  (as with rsync) to be distinguishable from files with the same name.
  # If path doesn't match any regexp on the list, it will be included.
  #
  # Examples:
  #  - ['+', '/\.git/config$']   # backup git repository config files
  #  - '/\.git/'   # *don't* backup any repository objects
  #  - ['-', '/\.git/']   # exactly same thing as above (redundant)
  #  - '/(?i)\.?svn(/.*|ignore)$' # exclude (case-insensitive) svn (or .svn) paths and ignore-lists

  - '/(CVS|RCS|SCCS|_darcs|\{arch\})/$'
  - '/\.(git|hg|bzr|svn|cvs)(/|ignore|attributes|tags)?$'
  - '/=(RELEASE-ID|meta-update|update)$'


operation:
  queue_only: false # only generate upload queue file, don't upload anything
  reuse_queue: false # don't generate upload queue file, use existing one as-is
  disable_deduplication: false # make no effort to de-duplicate data (should still work on tahoe-level for files)

  # Rate limiting might be useful to avoid excessive cpu/net usage on nodes,
  #  and especially when uploading to rate-limited api's (like free cloud storages).
  # Only used when uploading objects to the grid, not when building queue file.
  # Format of each value is "interval[:burst]", where "interval" can be specified as rate (e.g. "1/3e5").
  # Simple token bucket algorithm is used. Empty values mean "no limit".
  # Examples:
  #   "objects: 1/10:50" - 10 objects per second, up to 50 at once (if rate was lower before).
  #   "objects: 0.1:50" - same as above.
  #   "objects: 10:20" - 1 object in 10 seconds, up to 20 at once.
  #   "objects: 5" - make interval between object uploads equal 5 seconds.
  #   "bytes: 1/3e6:50e6" - 3 MB/s max, up to 50 MB/s if connection was underutilized before.
  rate_limit:
    bytes: # limit on rate of *file* bytes upload, example: 1/3e5:20e6
    objects: # limit on rate of uploaded objects, example: 10:50


logging: # see http://docs.python.org/library/logging.config.html
  # "custom" level means WARNING/DEBUG/NOISE, depending on CLI options
  warnings: true # capture python warnings
  sql_queries: false # log executed sqlite queries (very noisy, caps will be there)

  version: 1
  formatters:
    basic:
      format: '%(asctime)s :: %(name)s :: %(levelname)s: %(message)s'
      datefmt: '%Y-%m-%d %H:%M:%S'
  handlers:
    console:
      class: logging.StreamHandler
      stream: ext://sys.stderr
      formatter: basic
      level: custom
    debug_logfile:
      class: logging.handlers.RotatingFileHandler
      filename: /srv/backups/debug.log
      formatter: basic
      encoding: utf-8
      maxBytes: 5242880 # 5 MiB
      backupCount: 2
      level: NOISE
  loggers:
    twisted:
      handlers: [console]
      level: 0
  root:
    level: custom
    handlers: [console]
c                       \ rS rSrSrSrSrg)
test_const   i	  {    N)__name__
__module____qualname____firstlineno__dispatch	heartbeat__static_attributes__r	       T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/pyaml/tests/test_dump.pyr   r      s    r   r   z
/some/path))key1u	   тест1)key2u	   тест2)key3u	   тест3)u   последнийN)r   Nasdu
   не-asciig      @)br   )a   )path
query_dumpidsr   r   cdr   r   query_dump_clone)         r   u   id в уникодеu   id2 в уникодеz	'asd'
! a  -----BEGIN CERTIFICATE-----
MIIDUjCCAjoCCQD0/aLLkLY/QDANBgkqhkiG9w0BAQUFADBqMRAwDgYDVQQKFAdm
Z19jb3JlMRYwFAYDVQQHEw1ZZWthdGVyaW5idXJnMR0wGwYDVQQIExRTdmVyZGxv
dnNrYXlhIG9ibGFzdDELMAkGA1UEBhMCUlUxEjAQBgNVBAMTCWxvY2FsaG9zdDAg
Fw0xMzA0MjQwODUxMTRaGA8yMDUzMDQxNDA4NTExNFowajEQMA4GA1UEChQHZmdf
Y29yZTEWMBQGA1UEBxMNWWVrYXRlcmluYnVyZzEdMBsGA1UECBMUU3ZlcmRsb3Zz
a2F5YSBvYmxhc3QxCzAJBgNVBAYTAlJVMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnZr3jbhfb5bUhORhmXOXOml8N
fAli/ak6Yv+LRBtmOjke2gFybPZFuXYr0lYGQ4KgarN904vEg7WUbSlwwJuszJxQ
Lz3xSDqQDqF74m1XeBYywZQIywKIbA/rfop3qiMeDWo3WavYp2kaxW28Xd/ZcsTd
bN/eRo+Ft1bor1VPiQbkQKaOOi6K8M9a/2TK1ei2MceNbw6YrlCZe09l61RajCiz
y5eZc96/1j436wynmqJn46hzc1gC3APjrkuYrvUNKORp8y//ye+6TX1mVbYW+M5n
CZsIjjm9URUXf4wsacNlCHln1nwBxUe6D4e2Hxh2Oc0cocrAipxuNAa8Afn5AgMB
AAEwDQYJKoZIhvcNAQEFBQADggEBADUHf1UXsiKCOYam9u3c0GRjg4V0TKkIeZWc
uN59JWnpa/6RBJbykiZh8AMwdTonu02g95+13g44kjlUnK3WG5vGeUTrGv+6cnAf
4B4XwnWTHADQxbdRLja/YXqTkZrXkd7W3Ipxdi0bDCOSi/BXSmiblyWdbNU4cHF/
Ex4dTWeGFiTWY2upX8sa+1PuZjk/Ry+RPMLzuamvzP20mVXmKtEIfQTzz4b8+Pom
T1gqPkNEbe2j1DciRNUOH1iuY+cL/b7JqZvvdQK34w3t9Cz7GtMWKo+g+ZRdh3+q
2sn5m3EkrUb1hSKQbMWTbnaG4C/F3i4KVkH+8AZmR9OvOmZ+7Lo=
-----END CERTIFICATE-----)certat  MIIDUjCCAjoCCQD0/aLLkLY/QDANBgkqhkiG9w0BAQUFADBqMRAwDgYDVQQKFAdmZ19jb3JlMRYwFAYDVQQHEw1ZZWthdGVyaW5idXJnMR0wGwYDVQQIExRTdmVyZGxvdnNrYXlhIG9ibGFzdDELMAkGA1UEBhMCUlUxEjAQBgNVBAMTCWxvY2FsaG9zdDAgFw0xMzA0MjQwODUxMTRaGA8yMDUzMDQxNDA4NTExNFowajEQMA4GA1UEChQHZmdfY29yZTEWMBQGA1UEBxMNWWVrYXRlcmluYnVyZzEdMBsGA1UECBMUU3ZlcmRsb3Zza2F5YSBvYmxhc3QxCzAJBgNVBAYTAlJVMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnZr3jbhfb5bUhORhmXOXOml8NfAli/ak6Yv+LRBtmOjke2gFybPZFuXYr0lYGQ4KgarN904vEg7WUbSlwwJuszJxQLz3xSDqQDqF74m1XeBYywZQIywKIbA/rfop3qiMeDWo3WavYp2kaxW28Xd/ZcsTdbN/eRo+Ft1bor1VPiQbkQKaOOi6K8M9a/2TK1ei2MceNbw6YrlCZe09l61RajCizy5eZc96/1j436wynmqJn46hzc1gC3APjrkuYrvUNKORp8y//ye+6TX1mVbYW+M5nCZsIjjm9URUXf4wsacNlCHln1nwBxUe6D4e2Hxh2Oc0cocrAipxuNAa8Afn5AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBADUHf1UXsiKCOYam9u3c0GRjg4V0TKkIeZWcuN59JWnpa/6RBJbykiZh8AMwdTonu02g95+13g44kjlUnK3WG5vGeUTrGv+6cnAf4B4XwnWTHADQxbdRLja/YXqTkZrXkd7W3Ipxdi0bDCOSi/BXSmiblyWdbNU4cHF/Ex4dTWeGFiTWY2upX8sa+1PuZjk/Ry+RPMLzuamvzP20mVXmKtEIfQTzz4b8+PomT1gqPkNEbe2j1DciRNUOH1iuY+cL/b7JqZvvdQK34w3t9Cz7GtMWKo+g+ZRdh3+q2sn5m3EkrUb1hSKQbMWTbnaG4C/F3i4KVkH+8AZmR9OvOmZ+7Lo=c                       \ rS rSrS&S jr\" 5       4S jrS'S jrS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$r'g%)(	DumpTests   c                     [         R                  " U5      R                  SS5      nU(       a  U$ [        R                  " U5      $ )N	z  )textwrapdedentreplaceyaml	safe_load)selfysraws      r   yaml_varDumpTests.yaml_var   s3    r""4."*r**r   c                    [        5       n[        U[        [         45      (       a,  U H%  oCR                  U R	                  XBS-   5      5        M'     Oe[        U[
        5      (       a>  UR                  5        H)  u  pTUR                  U R	                  XBU4-   5      5        M+     OUR                  X!45        [        [        US S95      $ )N)z!!listc                 ,    [         R                  " U SS9$ )NT	sort_keys)jsondumps)vs    r   <lambda>#DumpTests.flatten.<locals>.<lambda>   s    A)Fr   )key)	list
isinstancetupleextendflattendictitemsappendsorted)r.   datar   dstr9   ks         r   rA   DumpTests.flatten   s    #udm$$q**T\\!K-?@AD$jjlsqCJJt||Aqd{'CDl

D< 	vcFG	HHr   c                 z    S[        5       pC UR                  X#S-   5      nUS:  a   U$ UR                  U5        M0  )Nr   r   )r=   findrD   )r.   r/   seppospos_lists        r   rN   DumpTests.pos_list   sA    TVx	!e	3	Agu	/ ??3 	r   c                 T    [        S [        UR                  5       5       5       5      $ )Nc              3   <   #    U  H  u  pU(       a  M  Uv   M     g 7fNr	   ).0nlines      r   	<genexpr>,DumpTests.empty_line_list.<locals>.<genexpr>   s     F9GAaa9s   	)r=   	enumerate
splitlines)r.   r/   s     r   empty_line_listDumpTests.empty_line_list   s    	Fy9F	FFr   c                 P   [         R                  " 5       nU R                  [        R                  " [
        U5      S 5        U R                  [        R                  " [
        [        5      [        5        U R                  [        R                  " [
        [        5      [        5        g rR   )	ioBytesIOassertIspyamldumprF   assertIsInstancestrbytes)r.   buffs     r   test_dstDumpTests.test_dst   s\    	$--

4&-

4-s3

4/7r   c                     U R                  [        5      n[        R                  " [        5      nU R	                  XR                  [
        R                  " U5      5      5        g rR   )rA   rF   r`   ra   assertEqualr,   r-   )r.   r   r   s      r   test_simpleDumpTests.test_simple   s>    
ll4!jj!1ll4>>!#456r   c                    [         R                  " [        5      nU R                  U5      n[        R
                  " U[        SSS9S9nU R                  X R                  [         R                  " U5      5      5        U R                  U R                  US5      / SQ5        [        R
                  " USS9nU R                  SU5        g )	N
   r   split_linessplit_countvspacing
)[         !   4   I   X   k         i  i+  iX  iY  ic  iw  i  i  i  i  i  i  i  i1  iX  iY  i_  i  i  i  i  i  i  i  i%  i&  i4  i?  ib  i  i  i  i  i  i  i  i  i0  i1  iD  iY  i  i  i  i  i  i
  i  i  i#  i3  iE  iT  iU  i]  ik  i{  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i0  i1  i9  iH  iR  iZ  ix  i  i  i  Fz

)
r,   r-   
large_yamlrA   r`   ra   rB   ri   rN   assertNotIn)r.   rF   r   r   s       r   test_vspacingDumpTests.test_vspacing  s    	
	#$
ll4!jj CD!1ll4>>!#456DMM!T* jj&!61r   c                     [         R                  " [        SS9nU R                  SU5        U R	                  SU5        U R	                  SU5        [
        (       d  U R	                  SU5        g g )NFforce_embed&id00z#query_dump_clone: *query_dump_cloneu!   id в уникоде: &ids_-_id2_u&   id в уникоде: &ids_-_id2__id00)r`   ra   rF   r   assertIn	unidecoder.   r   s     r   test_idsDumpTests.test_ids  sU    jj5)!7A--5q9--3Q7	DMM"JANr   c                     [         (       d  U R                  S5        [        R                  " [        SS9nU R                  SU5        U R                  SU5        U R                  SU5        g )Nz3No unidecode module to test ids from non-ascii keysFr   r   _id00u*   id в уникоде: &ids_-_id2_v_unikode)r   skipTestr`   ra   rF   r   r   r   s     r   test_ids_unidecodeDumpTests.test_ids_unidecode  sS    	==FGjj5)!7A7A--<a@r   c                     U R                   S4U R                  S44 H.  u  p[        R                  " [        US9nS H
  oA" XC5        M     M0     g )NTFr   z*&)r   r   r`   ra   rF   )r.   checkfera   r   s        r   test_force_embedDumpTests.test_force_embed!  sE    $$d+dmmU-CCie
**Tr
*4q%.D Dr   c                    [         R                  " [        SS9n[        [	        [
        R                  UR                  5       5      5      n/ SQnUR                  S5      nU R                  X$U[        U5      -    U5        g )NTr   )query_dump:u   key1: тест1u   key2: тест2u   key3: тест3u   последний:r   )r`   ra   rF   r=   maprc   striprY   indexri   len)r.   r   b_lineschkrM   s        r   test_encodingDumpTests.test_encoding&  s]    jj4(!SYY/0'g#m$#7sSX~.4r   c                     [         R                  " [        5      nU R                  SU5        U R                  SU5        U R	                  [        UR                  5       5      S5        g )N"'r   )r`   ra   data_str_longr   ri   r   rY   r   s     r   test_str_longDumpTests.test_str_long-  sK    jj!333q||~&*r   c                    [         R                  " [        5      nUR                  5       nU R	                  [        U5      [        [        S   R                  5       5      5        U H  o0R                  [        U5      S5        M     g )Nr#   d   )r`   ra   data_str_multilinerY   assertGreaterr   
assertLess)r.   r   r   rU   s       r   test_str_multilineDumpTests.test_str_multiline3  sZ    jj#$!LLN'S\3'9&'A'L'L'N#OPds4y#6gr   c                 d    [         R                  " [        5      nU R                  U[        5        g rR   )r`   r8   r   rb   rc   r   s     r   
test_dumpsDumpTests.test_dumps9  s!    kk$%!3r   c                    U R                  [        R                  [        R                  5        U R                  [        R                  [        R                  5        [
        R                  " 5       n[        R                  " [        [        S9n[        R                  " [        US9  U R                  X!R                  5       5        g )NrG   )file)r_   r`   printpprintpr]   r^   ra   r   rd   ri   getvalue)r.   re   r   s      r   
test_printDumpTests.test_print=  sm    --U\\*--UWW%	$jj#/!++ t,1mmo&r   c                     [         R                  " 5       nSn[        R                  " U[        S9n[        R
                  " USU06  U R                  X1R                  5       5        g )Nr   r   r   r   r   )r]   r^   r`   ra   rd   r   ri   r   )r.   re   argsr   s       r   test_print_argsDumpTests.test_print_argsE  sG    	$	$jj5!!++t$1mmo&r   c                 p   [         R                  " [        5      n[         R                  " [        SS9nU R                  X5        [         R                  " [        SS9nU R	                  X5        [         R                  " [        SS9nU R	                  X15        U R	                  X25        U R                  [         R                  " SSS9R                  S5      5        [         R                  " [        SS9=n5      nU R                  US	5        U R                  [         R                  " USS9U5        U R                  [         R                  " USS9U5        [         R                  " [        S
S9=n5      n[         R                  " USS9nU R                  US5        U R                  U R                  U5      U R                  [        R                  " U5      5      5        U R	                  X5        U R                  U R                  U5      U R                  [        R                  " U5      5      5        g )N|)string_val_styleplainliteralz	waka wakaz|-
r   r   za: 123
123z	a: '123'
)r`   ra   r   ri   assertNotEqual
assertTrue
startswithrB   rA   r,   r-   )r.   r   r   r   data_intdata_strs         r   test_str_stylesDumpTests.test_str_stylesL  s   jj#$!jj#c:!1jj#g>!ajj#i@!aa//%**[3?JJ6RSjjTC[()!1j!5::h=qA5::hCQGjjTE]*+!jjC0!1l#4<<)4<<q8I+JKa4<<)4<<q8I+JKr   c                 (   / SQSS.n[         R                  " U5      n[        R                  " U5      n[         R                  " U5      n[        R                  " U5      nU R	                  X5        U R	                  X$5        U R	                  X55        g )N)zbar:bazz	bar:bazzoza: bzyak:)foozfoo:r`   ra   r,   r-   ri   r.   val1val1_strval2val2_strval3s         r   test_colons_in_strings DumpTests.test_colons_in_stringsc  sn    5v	F$ZZ(		!$ZZ(		!$48&4r   c                     SSSS.n[         R                  " U5      n[        R                  " U5      nU R	                  X5        U R                  SU5        g )Nzword1 word2 word3r   zword: stuff)r<   zkey keyk3zkey: word1 word2 word3)r`   ra   r,   r-   ri   r   )r.   r   r   r   s       r   test_unqouted_spacesDumpTests.test_unqouted_spacesm  sG    $m	L$ZZ(		!$4--((3r   c                 *   / SQSSS.n[         R                  " U5      n[        R                  " U5      n[         R                  " U5      n[        R                  " U5      nU R	                  X5        U R	                  X$5        U R	                  X55        g )N) stuffr   morevaluer   )r<   r   r   r   r   s         r   test_empty_stringsDumpTests.test_empty_stringst  sp    *r	B$ZZ(		!$ZZ(		!$48&4r   c                    S nS/ SQ0n[         R                  " U5      n[        R                  " U5      n[         R                  " U5      n[        R                  " U5      nU R	                  X$5        U R	                  X55        U R	                  XF5        UR                  5       nU R	                  U" US   5      S5        U R	                  U" US   5      S5        U R	                  U" US   5      S	5        SS
0n[         R                  " U5      n[        R                  " U5      n[         R                  " U5      n[        R                  " U5      ng )Nc                 \    U R                  5       R                  S5      R                  5       $ )N-)lstrip)rU   s    r   r:   4DumpTests.test_single_dash_strings.<locals>.<lambda>  s     4 4S 9 @ @ Br   r<   )r   -stuffz- -z- more-more---r   r   r!   r   r"   r   r   )r`   ra   r,   r-   ri   rY   )r.   strip_seq_dashr   r   r   r   r   val1_str_liness           r   test_single_dash_strings"DumpTests.test_single_dash_strings~  s   B.
A	B$ZZ(		!$ZZ(		!$48&4&&(.>."34h?>."34g>>."34d;
$ZZ(		!$ZZ(		!$r   c                     [         R                  " SS5      nU" SSS5      n[        R                  " USS9nU R	                  US5        g )	N	TestTuplezy x zr   r   r   Fr5   zy: 1
x: 2
z: 3
)cs
namedtupler`   ra   ri   )r.   r   valval_strs       r   test_namedtupleDumpTests.test_namedtuple  sA    mmK1)!Q#JJse,'701r   c           
         [         R                  " S [        [        S5      5       5       5      n[        R
                  " USS9R                  5       nU R                  U[        [        [        U5      5      5      5        g )Nc              3   (   #    U  H  oS 4v   M
     g7f)r   Nr	   )rS   is     r   rV   -DumpTests.test_ordereddict.<locals>.<genexpr>  s     :&9W&9s   rm   Fr5   )
r   OrderedDictreversedranger`   ra   rY   ri   r=   rE   )r.   r   liness      r   test_ordereddictDumpTests.test_ordereddict  sV    nn:huRy&9::!
**Q%
(
3
3
5%5$xu678r   c                 v   [         R                  nSUSUR                  US0nU R                  US   US   5        [        R
                  " U5      n[        R                  " U5      nU R                  US   US   5        U R                  US   U5        U R                  X!   S5        U R                  SU5        g )Nr   r   testxza: 123 # test_const.heartbeat)	r   r   r   ri   r`   ra   r,   r-   r   )r.   r   d1sd2s        r   	test_enumDumpTests.test_enum  s    !QQWWa)"2c7BsG$jjn!~~a"2c7BsG$2c7A25'"--/3r   c                 (   SS0nS H  n[         R                  " XSS9R                  5       n[        US5       HR  u  pEU R	                  [        U5      US-  5        U[        U5      :w  d  M4  U R                  [        U5      US-  5        MT     M     g )	Nr   ah  lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum )(   P      rm   )widthindentr   g333333?g?)r`   ra   rY   rX   r   r   r   )r.   r   wr   rT   rU   s         r   test_pyyaml_paramsDumpTests.test_pyyaml_params  s{    !"!a::a,7795E1%wqOOCIqu%CJ**3t9ae< & r   c                 P   [         R                  " [        5      [        SSSS9/n[        R
                  " USS9nU R                  UR                  S5      5        U R                  SU5        [        R                  " USSS	9nU R                  X#5        [        R                  " USS9nU R                  X#5        [        R
                  " US
S9nU R                  UR                  S5      5        U R                  X#5        [        R                  " USS
S9nU R                  X#5        g )Nr   r   r   r   r   r   Trq   z---z---

a: 1

b: 2

c: 3
)rr   multiple_docsF)explicit_start)r  r  )r,   r-   r~   rB   r`   dump_allr   r   r   ra   ri   r   assertFalse)r.   docsdocs_str	docs_str2s       r   test_multiple_docsDumpTests.test_multiple_docs  s    
..
$dQ!q&9	:$^^D40(//(%%e,---/:jjDA)8'jj-)h*nnT%8)9''./h*ZZDG(8'r   c                     SSK Jn  W" SS9R	                  [
        5      n[        R                  " U5      ng ! [         a    U R                  S5         NMf = f)Nr   )YAMLz No ruamel.yaml module to test itsafe)typ)ruamel.yamlr  ImportErrorr   loadr~   r`   ra   )r.   r  rF   yaml_strs       r   test_ruamel_yamlDumpTests.test_ruamel_yaml  sA    #	&			z	*$ZZ( 
Gdmm$FGGs   7 AAc                 j   / SQn[         R                  " 5       [         R                  " 5       p2[        R                  " XS9  [        R                  " XS9  U R	                  UR                  5       UR                  5       5        UR                  S5        UR                  5         [        R                  " XUS9  U R	                  UR                  5       UR                  5       5        [        R                  " U[        [        S9nU R	                  XCR                  5       5        UR                  S5        UR                  5         UR                  S5        UR                  5         U R                  [        5         [        R                  " XUS9  S S S 5        U R                  [        5         [        R                  " U[        US9  S S S 5        U R	                  UR                  5       S5        U R	                  UR                  5       S5        g ! , (       d  f       N= f! , (       d  f       N`= f)Nr   r   )streamr   )rG   r&  r   )r]   StringIOr`   ra   ri   r   seektruncaterc   assertRaises	TypeError)r.   rF   buff1buff2r/   s        r   test_dump_stream_kwsDumpTests.test_dump_stream_kws  s`   	$**T**T 5>>#U^^%56**Q-!**TU+5>>#U^^%56zz$C,"2~~'(**Q-!5::a=%..2B#::de, $#::dE* $5>>#R(5>>#R( $###s   <H/H$
H!$
H2c           
      n   U R                  S5      n[        R                  " [        U/S-  S95      nU R	                  U R                  U5      / SQ5        U R                  SSS9n[        S5       H  o2S	S
U SU 3-   -  nM     [        R                  " [        R                  " U5      [        SS9S9nU R	                  U R                  U5      [        [        SSS5      5      5        [        R                  " [        R                  " U5      5      nU R	                  U R                  U5      S/5        g )Nz
			builtIn: 1
			datasource:
				type: grafana
				uid: -- Grafana --
			enable: yes
			hide: yes
			iconColor: rgba(0, 211, 255, 1)
			name: Annotations & Alerts
			type: dashboardrm   )mylist)
r            )   3   =   G   Q   [   zY
			panels:
				- datasource:
						type: datasource
						uid: grafana
					fieldConfig:T)r0   <   z
      fieldz: value-)oneline_splitrq   r    ~   r   )
r1   r`   ra   rB   ri   rZ   r   r,   r-   r=   )r.   itmr/   rT   s       r   test_vspacing_limitsDumpTests.test_vspacing_limits  s    	 		# zz$seBh'("*- }} 
    " 9aMeA3hqc,BBBb9zz$..$t$/GH"4''+T%32B-CDzz$..$%"4''+aS1r   c                     U R                  S5      n[        R                  " U[        SS9S9nU R	                  U R                  U5      / SQ5        g )Na  
			test: # list items should be split
				- key1: 1
					key2: A
				- key1: 1
					key2: A
				- key1: 1
					key2: A
			test2: # list items should be split
				- key1:
						key11: A
						key12: B
				- key2:
						key21: A
				- val
			test3: # only top-level keys should be split
				key1:
					key11:
					key12:
				key2:
					- key21: A
					- key22: B
					- key23: C
				key3:
					- key31:
					- key32:
					- key33:
			r   )ro   rq   )r   r       rm   rt         r3            )r1   r`   ra   rB   ri   rZ   r.   rF   r/   s      r   test_split_block_types DumpTests.test_split_block_types  sH    	  
$8 zz$!!45"4''+-VWr   c           
         U R                  S5      n[        R                  " USS9nS Hw  nU R                  [        R
                  " SU S3U5      =n5        U R                  [        US   5      S5        U R                  S	US   5        U R                  S
US   5        My     [        [        [        SSSS9=nS9[        US9S9n[        R                  " USS9nS H  nU R                  [        R
                  " SU S3U5      =n5        U R                  [        US   5      S5        U R                  [        [        R                  " SUS   5      5      S5        M     g )Na  
			similique-natus-inventore-deserunt-amet-explicabo-cum-accusamus-temporibus:
				quam-nulla-dolorem-dolore-velit-quis-deserunt-est-ullam-exercitationem:
					culpa-quia-incidunt-accusantium-ad-dicta-nobis-rerum-veritatis: &test
						test: 1
			similique-commodi-aperiam-libero-error-eos-quidem-eius:
				ipsam-labore-enim,-vero-voluptatem-eaque-dolores-blanditiis-recusandae:
					quas-atque-maxime-itaque-ullam-sequi-suscipit-quis-vitae-veritatis: *testFr   )&z\*z(?<= )z\S+r   2   	similique	veritatisr   r   r   r  )test2)test4)test1test3   ztest\d)r1   r`   ra   r   researchr   r   r   rB   ri   findall)r.   rF   r/   r   mr9   s         r   test_anchor_cutoffDumpTests.test_anchor_cutoff  s0   	 R 
S$ zz$E*"a??		VA3c"2B7718??3qt9b!==ad#==ad#	  
DTAa%8 8:$Q-	P$zz$E*"a??		VA3c"2B7718??3qt9b!C

9ad34a8 r   c                 D   U R                  S5      n[        R                  " U[        R                  R                  [        SSS9S9nU R                  U R                  U5      / SQ5        [        R                  " U[        SSS9S9nU R                  X#5        U R                  U R                  U5      / SQ5        [        R                  " US[        SSS	S	S
9S9nU R                  X$5        U R                  X45        U R                  U R                  U5      / SQ5        g )Na  
			similique-natus: 1
			similique-commodi:
				aperiam-libero: 2
			'vel praesentium quo':
				exercitationem debitis: porro beatae id
				rerum commodi ipsum: nesciunt veritatis
				amet quaerat:
					assumenda: odio tenetur saepe
			"111": digit-string
			deserunt-est-2: asdasd
			deserunt-est-1: |
				line1
				line2
			culpa-quia: 1234
			deserunt-est-3: asdasd
			10: test1
			200: test
			30: test2r   rn   )
sort_dictsrr   )   rt      rE  rq   )r   r    r"   	   r2  ru   r_     r3  rF  rv   rG     FT)ro   rp   oneline_groupr=  )r6   rr   )r   r    r^  r2        )	r1   r`   ra   	PYAMLSortrc  rB   ri   rZ   r   )r.   rF   ys1ys2ys3s        r   test_group_oneline_values#DumpTests.test_group_oneline_values.  s    	  
$( 	

Doo++QA.	1# 4'',o>

4$1!"DE#cD((-36 	

454at44J 	K#cc4'',.CDr   c           	          " S S5      n " S S5      n[        S[        4[        SS95      " 5       n[        S5       n[        S	U" 5       U" 5       X4S
9nS S S 5        U R	                  [
        R                  5         [        R                  " W5      nS S S 5        U R	                  [
        R                  5         [        R                  " U5      nS S S 5        U R                  S[        R                  " WSS95        [        R                  " USS9nU R                  [        UR                  5       5      S5        U R                  SU5        U R                  SU5        [        R                  " USSS9nU R                  [        UR                  5       5      S5        U R                  SU5        U R                  SU5        U R                  SU5        g ! , (       d  f       GN= f! , (       d  f       GN\= f! , (       d  f       GN0= f)Nc                       \ rS rSrS rSrg)0DumpTests.test_repr_undefined.<locals>.TestType1iT  c                 *    [         R                  5       $ rR   )r~   decoder.   s    r   __repr__9DumpTests.test_repr_undefined.<locals>.TestType1.__repr__U  s    j//11r   r	   Nr
   r   r   r   rr  r   r	   r   r   	TestType1rn  T  s    1r   ru  c                       \ rS rSrS rSrg)0DumpTests.test_repr_undefined.<locals>.TestType2iV  c                     g)Nzz# should end up quoted                                                                                                    r	   rq  s    r   rr  9DumpTests.test_repr_undefined.<locals>.TestType2.__repr__W  s    @r   r	   Nrt  r	   r   r   	TestType2rw  V  s    @r   rz  	TestType3r   r   z	/dev/nullr   )knownunknown1unknown2unknown3unknown4z ...[1/r   )repr_unknownTr!   z.test_dump.TestType3TextIOWrapperrU  )r  r  z ...[30/z unknown2: # should end up quoted)typeobjectrB   openr*  r,   	YAMLErrorr`   ra   r   ri   r   rY   r   )r.   ru  rz  r  r  rF   r/   s          r   test_repr_undefinedDumpTests.test_repr_undefinedS  sq   2 2A A+y$+68(KH
eik[8A4  (uzz$/?"((uzz(/C"(--	5::d;<zz$T*"3r}}'+--&+--$zz$br2"3r}}'+--
B5r:--&+  )(((s#   G<G(:G:
G%(
G7:
H	c           	         [        [        [        SS S3S9S9S[        SS90/S9n[        R                  " U5      nU R                  [	        UR                  5       5      S	5        U R                  [        R                  " U5      U5        g )
Nzssh-rsa t  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXz
 user@host)__XML__value)__XML__PARAM__linez#__XML__PARAM__vlan-id-create-deletea  1, 30, 50, 110, 121-126, 999-1001, 1010, 1012, 1014, 1016, 1018, 1020-1022, 1060-1063, 1080-1083, 1111-1113, 2000, 2201-2202, 2206, 2208, 2210, 2254, 3000, 3002, 3006, 3008, 3021, 3100-3102, 3106, 3108, 3121, 3322, 3326, 3328, 3448-3452, 3455-3458, 3950, 3955, 3960, 3965-3966)sshkeyvlanr`  )rB   r`   ra   ri   r   rY   r,   r-   rI  s      r   test_long_value_splitDumpTests.test_long_value_spliti  s    	
$hwiz4R"S
T
/ D. 2/ 
0 	1
3$ zz$"3r}}'+4>>"%t,r   r	   N)F)rs   )(r
   r   r   r   r1   r?   rA   rN   rZ   rf   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r.  r@  rJ  rZ  rj  r  r  r   r	   r   r   r%   r%      s    + $g IG87
 OA!
5+7 ''L.4"(29
	4=( )*28X@9.#EJ,,
-r   r%   __main__)ossysr]   rV  unittestr7   enumr)   collectionsr   r,   r`   r   r   insertjoin__file__r   r~   IntEnumr   rB   r   r   rF   r   r   TestCaser%   r
   mainr	   r   r   <module>r     ss   I I I I I 
 N
`  NN ! "
 ^^3$*2E2E^^Xx()	,  - &/U" #'+E{3I'JU# $~~x&:;^   , 8;*W-!! W-t z	 a  BGGLL5TF1H56
  $I $s#   D E AEEEE