Copy disabled (too large)
Download .txt
Showing preview only (55,230K chars total). Download the full file to get everything.
Repository: Southpaw-TACTIC/TACTIC
Branch: 5.0
Commit: 0fb59c01b9bc
Files: 3369
Total size: 51.9 MB
Directory structure:
gitextract_cd4nlga1/
├── .github/
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ ├── feature_request.md
│ └── question.md
├── .gitignore
├── 3rd_party/
│ ├── babel/
│ │ ├── .babelrc
│ │ ├── babel.py
│ │ ├── package.json
│ │ └── test.jsx
│ ├── common/
│ │ └── site-packages/
│ │ ├── mako/
│ │ │ ├── __init__.py
│ │ │ ├── _ast_util.py
│ │ │ ├── ast.py
│ │ │ ├── cache.py
│ │ │ ├── cmd.py
│ │ │ ├── codegen.py
│ │ │ ├── compat.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── autohandler.py
│ │ │ │ ├── babelplugin.py
│ │ │ │ ├── beaker_cache.py
│ │ │ │ ├── extract.py
│ │ │ │ ├── linguaplugin.py
│ │ │ │ ├── preprocessors.py
│ │ │ │ ├── pygmentplugin.py
│ │ │ │ └── turbogears.py
│ │ │ ├── filters.py
│ │ │ ├── lexer.py
│ │ │ ├── lookup.py
│ │ │ ├── parsetree.py
│ │ │ ├── pygen.py
│ │ │ ├── pyparser.py
│ │ │ ├── runtime.py
│ │ │ ├── template.py
│ │ │ └── util.py
│ │ ├── more_itertools/
│ │ │ ├── __init__.py
│ │ │ ├── more.py
│ │ │ ├── recipes.py
│ │ │ └── tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_more.py
│ │ │ └── test_recipes.py
│ │ └── tzlocal_olson/
│ │ ├── __init__.py
│ │ ├── darwin.py
│ │ ├── test_data/
│ │ │ ├── Harare
│ │ │ ├── localtime/
│ │ │ │ └── etc/
│ │ │ │ └── localtime
│ │ │ ├── symlink_localtime/
│ │ │ │ ├── etc/
│ │ │ │ │ └── localtime
│ │ │ │ └── usr/
│ │ │ │ └── share/
│ │ │ │ └── zoneinfo/
│ │ │ │ └── Africa/
│ │ │ │ └── Harare
│ │ │ ├── timezone/
│ │ │ │ └── etc/
│ │ │ │ └── timezone
│ │ │ ├── timezone_setting/
│ │ │ │ └── etc/
│ │ │ │ └── conf.d/
│ │ │ │ └── clock
│ │ │ └── zone_setting/
│ │ │ └── etc/
│ │ │ └── sysconfig/
│ │ │ └── clock
│ │ ├── tests.py
│ │ ├── unix.py
│ │ ├── win32.py
│ │ └── windows_tz.py
│ ├── mooRainbow/
│ │ ├── mooRainbow.1.2b2.js
│ │ ├── mooRainbow.css
│ │ └── mooRainbow.js
│ ├── python2/
│ │ └── site-packages/
│ │ ├── cheroot/
│ │ │ ├── __init__.py
│ │ │ ├── _compat.py
│ │ │ ├── errors.py
│ │ │ ├── makefile.py
│ │ │ ├── server.py
│ │ │ ├── ssl/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── builtin.py
│ │ │ │ └── pyopenssl.py
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── helper.py
│ │ │ │ ├── test.pem
│ │ │ │ ├── test_config_server.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_wsgiapps.py
│ │ │ │ └── webtest.py
│ │ │ ├── workers/
│ │ │ │ ├── __init__.py
│ │ │ │ └── threadpool.py
│ │ │ └── wsgi.py
│ │ ├── cherrypy/
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _cpchecker.py
│ │ │ ├── _cpcompat.py
│ │ │ ├── _cpconfig.py
│ │ │ ├── _cpdispatch.py
│ │ │ ├── _cperror.py
│ │ │ ├── _cplogging.py
│ │ │ ├── _cpmodpy.py
│ │ │ ├── _cpnative_server.py
│ │ │ ├── _cpreqbody.py
│ │ │ ├── _cprequest.py
│ │ │ ├── _cpserver.py
│ │ │ ├── _cptools.py
│ │ │ ├── _cptree.py
│ │ │ ├── _cpwsgi.py
│ │ │ ├── _cpwsgi_server.py
│ │ │ ├── _helper.py
│ │ │ ├── daemon.py
│ │ │ ├── lib/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth.py
│ │ │ │ ├── auth_basic.py
│ │ │ │ ├── auth_digest.py
│ │ │ │ ├── caching.py
│ │ │ │ ├── covercp.py
│ │ │ │ ├── cpstats.py
│ │ │ │ ├── cptools.py
│ │ │ │ ├── encoding.py
│ │ │ │ ├── gctools.py
│ │ │ │ ├── httpauth.py
│ │ │ │ ├── httputil.py
│ │ │ │ ├── jsontools.py
│ │ │ │ ├── lockfile.py
│ │ │ │ ├── locking.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── reprconf.py
│ │ │ │ ├── sessions.py
│ │ │ │ ├── static.py
│ │ │ │ └── xmlrpcutil.py
│ │ │ ├── process/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── plugins.py
│ │ │ │ ├── servers.py
│ │ │ │ ├── win32.py
│ │ │ │ └── wspbus.py
│ │ │ ├── scaffold/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── apache-fcgi.conf
│ │ │ │ ├── example.conf
│ │ │ │ └── site.conf
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _test_decorators.py
│ │ │ │ ├── _test_states_demo.py
│ │ │ │ ├── benchmark.py
│ │ │ │ ├── checkerdemo.py
│ │ │ │ ├── fastcgi.conf
│ │ │ │ ├── fcgi.conf
│ │ │ │ ├── helper.py
│ │ │ │ ├── logtest.py
│ │ │ │ ├── modfastcgi.py
│ │ │ │ ├── modfcgid.py
│ │ │ │ ├── modpy.py
│ │ │ │ ├── modwsgi.py
│ │ │ │ ├── sessiondemo.py
│ │ │ │ ├── static/
│ │ │ │ │ ├── 404.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── style.css
│ │ │ │ ├── test.pem
│ │ │ │ ├── test_auth_basic.py
│ │ │ │ ├── test_auth_digest.py
│ │ │ │ ├── test_bus.py
│ │ │ │ ├── test_caching.py
│ │ │ │ ├── test_compat.py
│ │ │ │ ├── test_config.py
│ │ │ │ ├── test_config_server.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_dynamicobjectmapping.py
│ │ │ │ ├── test_encoding.py
│ │ │ │ ├── test_etags.py
│ │ │ │ ├── test_http.py
│ │ │ │ ├── test_httpauth.py
│ │ │ │ ├── test_httputil.py
│ │ │ │ ├── test_iterator.py
│ │ │ │ ├── test_json.py
│ │ │ │ ├── test_logging.py
│ │ │ │ ├── test_mime.py
│ │ │ │ ├── test_misc_tools.py
│ │ │ │ ├── test_objectmapping.py
│ │ │ │ ├── test_params.py
│ │ │ │ ├── test_proxy.py
│ │ │ │ ├── test_refleaks.py
│ │ │ │ ├── test_request_obj.py
│ │ │ │ ├── test_routes.py
│ │ │ │ ├── test_session.py
│ │ │ │ ├── test_sessionauthenticate.py
│ │ │ │ ├── test_states.py
│ │ │ │ ├── test_static.py
│ │ │ │ ├── test_tools.py
│ │ │ │ ├── test_tutorials.py
│ │ │ │ ├── test_virtualhost.py
│ │ │ │ ├── test_wsgi_ns.py
│ │ │ │ ├── test_wsgi_unix_socket.py
│ │ │ │ ├── test_wsgi_vhost.py
│ │ │ │ ├── test_wsgiapps.py
│ │ │ │ ├── test_xmlrpc.py
│ │ │ │ └── webtest.py
│ │ │ └── tutorial/
│ │ │ ├── README.rst
│ │ │ ├── __init__.py
│ │ │ ├── custom_error.html
│ │ │ ├── tut01_helloworld.py
│ │ │ ├── tut02_expose_methods.py
│ │ │ ├── tut03_get_and_post.py
│ │ │ ├── tut04_complex_site.py
│ │ │ ├── tut05_derived_objects.py
│ │ │ ├── tut06_default_method.py
│ │ │ ├── tut07_sessions.py
│ │ │ ├── tut08_generators_and_yield.py
│ │ │ ├── tut09_files.py
│ │ │ ├── tut10_http_errors.py
│ │ │ └── tutorial.conf
│ │ ├── dateutil/
│ │ │ ├── __init__.py
│ │ │ ├── easter.py
│ │ │ ├── parser.py
│ │ │ ├── relativedelta.py
│ │ │ ├── rrule.py
│ │ │ ├── tz.py
│ │ │ ├── tzwin.py
│ │ │ └── zoneinfo/
│ │ │ └── __init__.py
│ │ ├── portend.py
│ │ ├── pytz/
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── lazy.py
│ │ │ ├── reference.py
│ │ │ ├── tzfile.py
│ │ │ ├── tzinfo.py
│ │ │ └── zoneinfo/
│ │ │ ├── Africa/
│ │ │ │ ├── Abidjan
│ │ │ │ ├── Accra
│ │ │ │ ├── Addis_Ababa
│ │ │ │ ├── Algiers
│ │ │ │ ├── Asmara
│ │ │ │ ├── Asmera
│ │ │ │ ├── Bamako
│ │ │ │ ├── Bangui
│ │ │ │ ├── Banjul
│ │ │ │ ├── Bissau
│ │ │ │ ├── Blantyre
│ │ │ │ ├── Brazzaville
│ │ │ │ ├── Bujumbura
│ │ │ │ ├── Cairo
│ │ │ │ ├── Casablanca
│ │ │ │ ├── Ceuta
│ │ │ │ ├── Conakry
│ │ │ │ ├── Dakar
│ │ │ │ ├── Dar_es_Salaam
│ │ │ │ ├── Djibouti
│ │ │ │ ├── Douala
│ │ │ │ ├── El_Aaiun
│ │ │ │ ├── Freetown
│ │ │ │ ├── Gaborone
│ │ │ │ ├── Harare
│ │ │ │ ├── Johannesburg
│ │ │ │ ├── Juba
│ │ │ │ ├── Kampala
│ │ │ │ ├── Khartoum
│ │ │ │ ├── Kigali
│ │ │ │ ├── Kinshasa
│ │ │ │ ├── Lagos
│ │ │ │ ├── Libreville
│ │ │ │ ├── Lome
│ │ │ │ ├── Luanda
│ │ │ │ ├── Lubumbashi
│ │ │ │ ├── Lusaka
│ │ │ │ ├── Malabo
│ │ │ │ ├── Maputo
│ │ │ │ ├── Maseru
│ │ │ │ ├── Mbabane
│ │ │ │ ├── Mogadishu
│ │ │ │ ├── Monrovia
│ │ │ │ ├── Nairobi
│ │ │ │ ├── Ndjamena
│ │ │ │ ├── Niamey
│ │ │ │ ├── Nouakchott
│ │ │ │ ├── Ouagadougou
│ │ │ │ ├── Porto-Novo
│ │ │ │ ├── Sao_Tome
│ │ │ │ ├── Timbuktu
│ │ │ │ ├── Tripoli
│ │ │ │ ├── Tunis
│ │ │ │ └── Windhoek
│ │ │ ├── America/
│ │ │ │ ├── Adak
│ │ │ │ ├── Anchorage
│ │ │ │ ├── Anguilla
│ │ │ │ ├── Antigua
│ │ │ │ ├── Araguaina
│ │ │ │ ├── Argentina/
│ │ │ │ │ ├── Buenos_Aires
│ │ │ │ │ ├── Catamarca
│ │ │ │ │ ├── ComodRivadavia
│ │ │ │ │ ├── Cordoba
│ │ │ │ │ ├── Jujuy
│ │ │ │ │ ├── La_Rioja
│ │ │ │ │ ├── Mendoza
│ │ │ │ │ ├── Rio_Gallegos
│ │ │ │ │ ├── Salta
│ │ │ │ │ ├── San_Juan
│ │ │ │ │ ├── San_Luis
│ │ │ │ │ ├── Tucuman
│ │ │ │ │ └── Ushuaia
│ │ │ │ ├── Aruba
│ │ │ │ ├── Asuncion
│ │ │ │ ├── Atikokan
│ │ │ │ ├── Atka
│ │ │ │ ├── Bahia
│ │ │ │ ├── Bahia_Banderas
│ │ │ │ ├── Barbados
│ │ │ │ ├── Belem
│ │ │ │ ├── Belize
│ │ │ │ ├── Blanc-Sablon
│ │ │ │ ├── Boa_Vista
│ │ │ │ ├── Bogota
│ │ │ │ ├── Boise
│ │ │ │ ├── Buenos_Aires
│ │ │ │ ├── Cambridge_Bay
│ │ │ │ ├── Campo_Grande
│ │ │ │ ├── Cancun
│ │ │ │ ├── Caracas
│ │ │ │ ├── Catamarca
│ │ │ │ ├── Cayenne
│ │ │ │ ├── Cayman
│ │ │ │ ├── Chicago
│ │ │ │ ├── Chihuahua
│ │ │ │ ├── Coral_Harbour
│ │ │ │ ├── Cordoba
│ │ │ │ ├── Costa_Rica
│ │ │ │ ├── Creston
│ │ │ │ ├── Cuiaba
│ │ │ │ ├── Curacao
│ │ │ │ ├── Danmarkshavn
│ │ │ │ ├── Dawson
│ │ │ │ ├── Dawson_Creek
│ │ │ │ ├── Denver
│ │ │ │ ├── Detroit
│ │ │ │ ├── Dominica
│ │ │ │ ├── Edmonton
│ │ │ │ ├── Eirunepe
│ │ │ │ ├── El_Salvador
│ │ │ │ ├── Ensenada
│ │ │ │ ├── Fort_Nelson
│ │ │ │ ├── Fort_Wayne
│ │ │ │ ├── Fortaleza
│ │ │ │ ├── Glace_Bay
│ │ │ │ ├── Godthab
│ │ │ │ ├── Goose_Bay
│ │ │ │ ├── Grand_Turk
│ │ │ │ ├── Grenada
│ │ │ │ ├── Guadeloupe
│ │ │ │ ├── Guatemala
│ │ │ │ ├── Guayaquil
│ │ │ │ ├── Guyana
│ │ │ │ ├── Halifax
│ │ │ │ ├── Havana
│ │ │ │ ├── Hermosillo
│ │ │ │ ├── Indiana/
│ │ │ │ │ ├── Indianapolis
│ │ │ │ │ ├── Knox
│ │ │ │ │ ├── Marengo
│ │ │ │ │ ├── Petersburg
│ │ │ │ │ ├── Tell_City
│ │ │ │ │ ├── Vevay
│ │ │ │ │ ├── Vincennes
│ │ │ │ │ └── Winamac
│ │ │ │ ├── Indianapolis
│ │ │ │ ├── Inuvik
│ │ │ │ ├── Iqaluit
│ │ │ │ ├── Jamaica
│ │ │ │ ├── Jujuy
│ │ │ │ ├── Juneau
│ │ │ │ ├── Kentucky/
│ │ │ │ │ ├── Louisville
│ │ │ │ │ └── Monticello
│ │ │ │ ├── Knox_IN
│ │ │ │ ├── Kralendijk
│ │ │ │ ├── La_Paz
│ │ │ │ ├── Lima
│ │ │ │ ├── Los_Angeles
│ │ │ │ ├── Louisville
│ │ │ │ ├── Lower_Princes
│ │ │ │ ├── Maceio
│ │ │ │ ├── Managua
│ │ │ │ ├── Manaus
│ │ │ │ ├── Marigot
│ │ │ │ ├── Martinique
│ │ │ │ ├── Matamoros
│ │ │ │ ├── Mazatlan
│ │ │ │ ├── Mendoza
│ │ │ │ ├── Menominee
│ │ │ │ ├── Merida
│ │ │ │ ├── Metlakatla
│ │ │ │ ├── Mexico_City
│ │ │ │ ├── Miquelon
│ │ │ │ ├── Moncton
│ │ │ │ ├── Monterrey
│ │ │ │ ├── Montevideo
│ │ │ │ ├── Montreal
│ │ │ │ ├── Montserrat
│ │ │ │ ├── Nassau
│ │ │ │ ├── New_York
│ │ │ │ ├── Nipigon
│ │ │ │ ├── Nome
│ │ │ │ ├── Noronha
│ │ │ │ ├── North_Dakota/
│ │ │ │ │ ├── Beulah
│ │ │ │ │ ├── Center
│ │ │ │ │ └── New_Salem
│ │ │ │ ├── Ojinaga
│ │ │ │ ├── Panama
│ │ │ │ ├── Pangnirtung
│ │ │ │ ├── Paramaribo
│ │ │ │ ├── Phoenix
│ │ │ │ ├── Port-au-Prince
│ │ │ │ ├── Port_of_Spain
│ │ │ │ ├── Porto_Acre
│ │ │ │ ├── Porto_Velho
│ │ │ │ ├── Puerto_Rico
│ │ │ │ ├── Punta_Arenas
│ │ │ │ ├── Rainy_River
│ │ │ │ ├── Rankin_Inlet
│ │ │ │ ├── Recife
│ │ │ │ ├── Regina
│ │ │ │ ├── Resolute
│ │ │ │ ├── Rio_Branco
│ │ │ │ ├── Rosario
│ │ │ │ ├── Santa_Isabel
│ │ │ │ ├── Santarem
│ │ │ │ ├── Santiago
│ │ │ │ ├── Santo_Domingo
│ │ │ │ ├── Sao_Paulo
│ │ │ │ ├── Scoresbysund
│ │ │ │ ├── Shiprock
│ │ │ │ ├── Sitka
│ │ │ │ ├── St_Barthelemy
│ │ │ │ ├── St_Johns
│ │ │ │ ├── St_Kitts
│ │ │ │ ├── St_Lucia
│ │ │ │ ├── St_Thomas
│ │ │ │ ├── St_Vincent
│ │ │ │ ├── Swift_Current
│ │ │ │ ├── Tegucigalpa
│ │ │ │ ├── Thule
│ │ │ │ ├── Thunder_Bay
│ │ │ │ ├── Tijuana
│ │ │ │ ├── Toronto
│ │ │ │ ├── Tortola
│ │ │ │ ├── Vancouver
│ │ │ │ ├── Virgin
│ │ │ │ ├── Whitehorse
│ │ │ │ ├── Winnipeg
│ │ │ │ ├── Yakutat
│ │ │ │ └── Yellowknife
│ │ │ ├── Antarctica/
│ │ │ │ ├── Casey
│ │ │ │ ├── Davis
│ │ │ │ ├── DumontDUrville
│ │ │ │ ├── Macquarie
│ │ │ │ ├── Mawson
│ │ │ │ ├── McMurdo
│ │ │ │ ├── Palmer
│ │ │ │ ├── Rothera
│ │ │ │ ├── South_Pole
│ │ │ │ ├── Syowa
│ │ │ │ ├── Troll
│ │ │ │ └── Vostok
│ │ │ ├── Arctic/
│ │ │ │ └── Longyearbyen
│ │ │ ├── Asia/
│ │ │ │ ├── Aden
│ │ │ │ ├── Almaty
│ │ │ │ ├── Amman
│ │ │ │ ├── Anadyr
│ │ │ │ ├── Aqtau
│ │ │ │ ├── Aqtobe
│ │ │ │ ├── Ashgabat
│ │ │ │ ├── Ashkhabad
│ │ │ │ ├── Atyrau
│ │ │ │ ├── Baghdad
│ │ │ │ ├── Bahrain
│ │ │ │ ├── Baku
│ │ │ │ ├── Bangkok
│ │ │ │ ├── Barnaul
│ │ │ │ ├── Beirut
│ │ │ │ ├── Bishkek
│ │ │ │ ├── Brunei
│ │ │ │ ├── Calcutta
│ │ │ │ ├── Chita
│ │ │ │ ├── Choibalsan
│ │ │ │ ├── Chongqing
│ │ │ │ ├── Chungking
│ │ │ │ ├── Colombo
│ │ │ │ ├── Dacca
│ │ │ │ ├── Damascus
│ │ │ │ ├── Dhaka
│ │ │ │ ├── Dili
│ │ │ │ ├── Dubai
│ │ │ │ ├── Dushanbe
│ │ │ │ ├── Famagusta
│ │ │ │ ├── Gaza
│ │ │ │ ├── Harbin
│ │ │ │ ├── Hebron
│ │ │ │ ├── Ho_Chi_Minh
│ │ │ │ ├── Hong_Kong
│ │ │ │ ├── Hovd
│ │ │ │ ├── Irkutsk
│ │ │ │ ├── Istanbul
│ │ │ │ ├── Jakarta
│ │ │ │ ├── Jayapura
│ │ │ │ ├── Jerusalem
│ │ │ │ ├── Kabul
│ │ │ │ ├── Kamchatka
│ │ │ │ ├── Karachi
│ │ │ │ ├── Kashgar
│ │ │ │ ├── Kathmandu
│ │ │ │ ├── Katmandu
│ │ │ │ ├── Khandyga
│ │ │ │ ├── Kolkata
│ │ │ │ ├── Krasnoyarsk
│ │ │ │ ├── Kuala_Lumpur
│ │ │ │ ├── Kuching
│ │ │ │ ├── Kuwait
│ │ │ │ ├── Macao
│ │ │ │ ├── Macau
│ │ │ │ ├── Magadan
│ │ │ │ ├── Makassar
│ │ │ │ ├── Manila
│ │ │ │ ├── Muscat
│ │ │ │ ├── Nicosia
│ │ │ │ ├── Novokuznetsk
│ │ │ │ ├── Novosibirsk
│ │ │ │ ├── Omsk
│ │ │ │ ├── Oral
│ │ │ │ ├── Phnom_Penh
│ │ │ │ ├── Pontianak
│ │ │ │ ├── Pyongyang
│ │ │ │ ├── Qatar
│ │ │ │ ├── Qyzylorda
│ │ │ │ ├── Rangoon
│ │ │ │ ├── Riyadh
│ │ │ │ ├── Saigon
│ │ │ │ ├── Sakhalin
│ │ │ │ ├── Samarkand
│ │ │ │ ├── Seoul
│ │ │ │ ├── Shanghai
│ │ │ │ ├── Singapore
│ │ │ │ ├── Srednekolymsk
│ │ │ │ ├── Taipei
│ │ │ │ ├── Tashkent
│ │ │ │ ├── Tbilisi
│ │ │ │ ├── Tehran
│ │ │ │ ├── Tel_Aviv
│ │ │ │ ├── Thimbu
│ │ │ │ ├── Thimphu
│ │ │ │ ├── Tokyo
│ │ │ │ ├── Tomsk
│ │ │ │ ├── Ujung_Pandang
│ │ │ │ ├── Ulaanbaatar
│ │ │ │ ├── Ulan_Bator
│ │ │ │ ├── Urumqi
│ │ │ │ ├── Ust-Nera
│ │ │ │ ├── Vientiane
│ │ │ │ ├── Vladivostok
│ │ │ │ ├── Yakutsk
│ │ │ │ ├── Yangon
│ │ │ │ ├── Yekaterinburg
│ │ │ │ └── Yerevan
│ │ │ ├── Atlantic/
│ │ │ │ ├── Azores
│ │ │ │ ├── Bermuda
│ │ │ │ ├── Canary
│ │ │ │ ├── Cape_Verde
│ │ │ │ ├── Faeroe
│ │ │ │ ├── Faroe
│ │ │ │ ├── Jan_Mayen
│ │ │ │ ├── Madeira
│ │ │ │ ├── Reykjavik
│ │ │ │ ├── South_Georgia
│ │ │ │ ├── St_Helena
│ │ │ │ └── Stanley
│ │ │ ├── Australia/
│ │ │ │ ├── ACT
│ │ │ │ ├── Adelaide
│ │ │ │ ├── Brisbane
│ │ │ │ ├── Broken_Hill
│ │ │ │ ├── Canberra
│ │ │ │ ├── Currie
│ │ │ │ ├── Darwin
│ │ │ │ ├── Eucla
│ │ │ │ ├── Hobart
│ │ │ │ ├── LHI
│ │ │ │ ├── Lindeman
│ │ │ │ ├── Lord_Howe
│ │ │ │ ├── Melbourne
│ │ │ │ ├── NSW
│ │ │ │ ├── North
│ │ │ │ ├── Perth
│ │ │ │ ├── Queensland
│ │ │ │ ├── South
│ │ │ │ ├── Sydney
│ │ │ │ ├── Tasmania
│ │ │ │ ├── Victoria
│ │ │ │ ├── West
│ │ │ │ └── Yancowinna
│ │ │ ├── Brazil/
│ │ │ │ ├── Acre
│ │ │ │ ├── DeNoronha
│ │ │ │ ├── East
│ │ │ │ └── West
│ │ │ ├── CET
│ │ │ ├── CST6CDT
│ │ │ ├── Canada/
│ │ │ │ ├── Atlantic
│ │ │ │ ├── Central
│ │ │ │ ├── Eastern
│ │ │ │ ├── Mountain
│ │ │ │ ├── Newfoundland
│ │ │ │ ├── Pacific
│ │ │ │ ├── Saskatchewan
│ │ │ │ └── Yukon
│ │ │ ├── Chile/
│ │ │ │ ├── Continental
│ │ │ │ └── EasterIsland
│ │ │ ├── Cuba
│ │ │ ├── EET
│ │ │ ├── EST
│ │ │ ├── EST5EDT
│ │ │ ├── Egypt
│ │ │ ├── Eire
│ │ │ ├── Etc/
│ │ │ │ ├── GMT
│ │ │ │ ├── GMT+0
│ │ │ │ ├── GMT+1
│ │ │ │ ├── GMT+10
│ │ │ │ ├── GMT+11
│ │ │ │ ├── GMT+12
│ │ │ │ ├── GMT+2
│ │ │ │ ├── GMT+3
│ │ │ │ ├── GMT+4
│ │ │ │ ├── GMT+5
│ │ │ │ ├── GMT+6
│ │ │ │ ├── GMT+7
│ │ │ │ ├── GMT+8
│ │ │ │ ├── GMT+9
│ │ │ │ ├── GMT-0
│ │ │ │ ├── GMT-1
│ │ │ │ ├── GMT-10
│ │ │ │ ├── GMT-11
│ │ │ │ ├── GMT-12
│ │ │ │ ├── GMT-13
│ │ │ │ ├── GMT-14
│ │ │ │ ├── GMT-2
│ │ │ │ ├── GMT-3
│ │ │ │ ├── GMT-4
│ │ │ │ ├── GMT-5
│ │ │ │ ├── GMT-6
│ │ │ │ ├── GMT-7
│ │ │ │ ├── GMT-8
│ │ │ │ ├── GMT-9
│ │ │ │ ├── GMT0
│ │ │ │ ├── Greenwich
│ │ │ │ ├── UCT
│ │ │ │ ├── UTC
│ │ │ │ ├── Universal
│ │ │ │ └── Zulu
│ │ │ ├── Europe/
│ │ │ │ ├── Amsterdam
│ │ │ │ ├── Andorra
│ │ │ │ ├── Astrakhan
│ │ │ │ ├── Athens
│ │ │ │ ├── Belfast
│ │ │ │ ├── Belgrade
│ │ │ │ ├── Berlin
│ │ │ │ ├── Bratislava
│ │ │ │ ├── Brussels
│ │ │ │ ├── Bucharest
│ │ │ │ ├── Budapest
│ │ │ │ ├── Busingen
│ │ │ │ ├── Chisinau
│ │ │ │ ├── Copenhagen
│ │ │ │ ├── Dublin
│ │ │ │ ├── Gibraltar
│ │ │ │ ├── Guernsey
│ │ │ │ ├── Helsinki
│ │ │ │ ├── Isle_of_Man
│ │ │ │ ├── Istanbul
│ │ │ │ ├── Jersey
│ │ │ │ ├── Kaliningrad
│ │ │ │ ├── Kiev
│ │ │ │ ├── Kirov
│ │ │ │ ├── Lisbon
│ │ │ │ ├── Ljubljana
│ │ │ │ ├── London
│ │ │ │ ├── Luxembourg
│ │ │ │ ├── Madrid
│ │ │ │ ├── Malta
│ │ │ │ ├── Mariehamn
│ │ │ │ ├── Minsk
│ │ │ │ ├── Monaco
│ │ │ │ ├── Moscow
│ │ │ │ ├── Nicosia
│ │ │ │ ├── Oslo
│ │ │ │ ├── Paris
│ │ │ │ ├── Podgorica
│ │ │ │ ├── Prague
│ │ │ │ ├── Riga
│ │ │ │ ├── Rome
│ │ │ │ ├── Samara
│ │ │ │ ├── San_Marino
│ │ │ │ ├── Sarajevo
│ │ │ │ ├── Saratov
│ │ │ │ ├── Simferopol
│ │ │ │ ├── Skopje
│ │ │ │ ├── Sofia
│ │ │ │ ├── Stockholm
│ │ │ │ ├── Tallinn
│ │ │ │ ├── Tirane
│ │ │ │ ├── Tiraspol
│ │ │ │ ├── Ulyanovsk
│ │ │ │ ├── Uzhgorod
│ │ │ │ ├── Vaduz
│ │ │ │ ├── Vatican
│ │ │ │ ├── Vienna
│ │ │ │ ├── Vilnius
│ │ │ │ ├── Volgograd
│ │ │ │ ├── Warsaw
│ │ │ │ ├── Zagreb
│ │ │ │ ├── Zaporozhye
│ │ │ │ └── Zurich
│ │ │ ├── Factory
│ │ │ ├── GB
│ │ │ ├── GB-Eire
│ │ │ ├── GMT
│ │ │ ├── GMT+0
│ │ │ ├── GMT-0
│ │ │ ├── GMT0
│ │ │ ├── Greenwich
│ │ │ ├── HST
│ │ │ ├── Hongkong
│ │ │ ├── Iceland
│ │ │ ├── Indian/
│ │ │ │ ├── Antananarivo
│ │ │ │ ├── Chagos
│ │ │ │ ├── Christmas
│ │ │ │ ├── Cocos
│ │ │ │ ├── Comoro
│ │ │ │ ├── Kerguelen
│ │ │ │ ├── Mahe
│ │ │ │ ├── Maldives
│ │ │ │ ├── Mauritius
│ │ │ │ ├── Mayotte
│ │ │ │ └── Reunion
│ │ │ ├── Iran
│ │ │ ├── Israel
│ │ │ ├── Jamaica
│ │ │ ├── Japan
│ │ │ ├── Kwajalein
│ │ │ ├── Libya
│ │ │ ├── MET
│ │ │ ├── MST
│ │ │ ├── MST7MDT
│ │ │ ├── Mexico/
│ │ │ │ ├── BajaNorte
│ │ │ │ ├── BajaSur
│ │ │ │ └── General
│ │ │ ├── NZ
│ │ │ ├── NZ-CHAT
│ │ │ ├── Navajo
│ │ │ ├── PRC
│ │ │ ├── PST8PDT
│ │ │ ├── Pacific/
│ │ │ │ ├── Apia
│ │ │ │ ├── Auckland
│ │ │ │ ├── Bougainville
│ │ │ │ ├── Chatham
│ │ │ │ ├── Chuuk
│ │ │ │ ├── Easter
│ │ │ │ ├── Efate
│ │ │ │ ├── Enderbury
│ │ │ │ ├── Fakaofo
│ │ │ │ ├── Fiji
│ │ │ │ ├── Funafuti
│ │ │ │ ├── Galapagos
│ │ │ │ ├── Gambier
│ │ │ │ ├── Guadalcanal
│ │ │ │ ├── Guam
│ │ │ │ ├── Honolulu
│ │ │ │ ├── Johnston
│ │ │ │ ├── Kiritimati
│ │ │ │ ├── Kosrae
│ │ │ │ ├── Kwajalein
│ │ │ │ ├── Majuro
│ │ │ │ ├── Marquesas
│ │ │ │ ├── Midway
│ │ │ │ ├── Nauru
│ │ │ │ ├── Niue
│ │ │ │ ├── Norfolk
│ │ │ │ ├── Noumea
│ │ │ │ ├── Pago_Pago
│ │ │ │ ├── Palau
│ │ │ │ ├── Pitcairn
│ │ │ │ ├── Pohnpei
│ │ │ │ ├── Ponape
│ │ │ │ ├── Port_Moresby
│ │ │ │ ├── Rarotonga
│ │ │ │ ├── Saipan
│ │ │ │ ├── Samoa
│ │ │ │ ├── Tahiti
│ │ │ │ ├── Tarawa
│ │ │ │ ├── Tongatapu
│ │ │ │ ├── Truk
│ │ │ │ ├── Wake
│ │ │ │ ├── Wallis
│ │ │ │ └── Yap
│ │ │ ├── Poland
│ │ │ ├── Portugal
│ │ │ ├── ROC
│ │ │ ├── ROK
│ │ │ ├── Singapore
│ │ │ ├── Turkey
│ │ │ ├── UCT
│ │ │ ├── US/
│ │ │ │ ├── Alaska
│ │ │ │ ├── Aleutian
│ │ │ │ ├── Arizona
│ │ │ │ ├── Central
│ │ │ │ ├── East-Indiana
│ │ │ │ ├── Eastern
│ │ │ │ ├── Hawaii
│ │ │ │ ├── Indiana-Starke
│ │ │ │ ├── Michigan
│ │ │ │ ├── Mountain
│ │ │ │ ├── Pacific
│ │ │ │ └── Samoa
│ │ │ ├── UTC
│ │ │ ├── Universal
│ │ │ ├── W-SU
│ │ │ ├── WET
│ │ │ ├── Zulu
│ │ │ ├── iso3166.tab
│ │ │ ├── leapseconds
│ │ │ ├── posixrules
│ │ │ ├── tzdata.zi
│ │ │ ├── zone.tab
│ │ │ └── zone1970.tab
│ │ ├── six.py
│ │ └── tempora/
│ │ ├── __init__.py
│ │ ├── schedule.py
│ │ ├── tests/
│ │ │ └── test_schedule.py
│ │ └── timing.py
│ ├── python3/
│ │ └── site-packages/
│ │ ├── __init__.py
│ │ ├── cheroot/
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _compat.py
│ │ │ ├── cli.py
│ │ │ ├── connections.py
│ │ │ ├── errors.py
│ │ │ ├── makefile.py
│ │ │ ├── server.py
│ │ │ ├── ssl/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── builtin.py
│ │ │ │ └── pyopenssl.py
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conftest.py
│ │ │ │ ├── helper.py
│ │ │ │ ├── test__compat.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_dispatch.py
│ │ │ │ ├── test_errors.py
│ │ │ │ ├── test_makefile.py
│ │ │ │ ├── test_server.py
│ │ │ │ ├── test_ssl.py
│ │ │ │ └── webtest.py
│ │ │ ├── testing.py
│ │ │ ├── workers/
│ │ │ │ ├── __init__.py
│ │ │ │ └── threadpool.py
│ │ │ └── wsgi.py
│ │ ├── cherrypy/
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _cpchecker.py
│ │ │ ├── _cpcompat.py
│ │ │ ├── _cpconfig.py
│ │ │ ├── _cpdispatch.py
│ │ │ ├── _cperror.py
│ │ │ ├── _cplogging.py
│ │ │ ├── _cpmodpy.py
│ │ │ ├── _cpnative_server.py
│ │ │ ├── _cpreqbody.py
│ │ │ ├── _cprequest.py
│ │ │ ├── _cpserver.py
│ │ │ ├── _cptools.py
│ │ │ ├── _cptree.py
│ │ │ ├── _cpwsgi.py
│ │ │ ├── _cpwsgi_server.py
│ │ │ ├── _helper.py
│ │ │ ├── _json.py
│ │ │ ├── daemon.py
│ │ │ ├── lib/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth_basic.py
│ │ │ │ ├── auth_digest.py
│ │ │ │ ├── caching.py
│ │ │ │ ├── covercp.py
│ │ │ │ ├── cpstats.py
│ │ │ │ ├── cptools.py
│ │ │ │ ├── encoding.py
│ │ │ │ ├── gctools.py
│ │ │ │ ├── httputil.py
│ │ │ │ ├── jsontools.py
│ │ │ │ ├── locking.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── reprconf.py
│ │ │ │ ├── sessions.py
│ │ │ │ ├── static.py
│ │ │ │ └── xmlrpcutil.py
│ │ │ ├── process/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── plugins.py
│ │ │ │ ├── servers.py
│ │ │ │ ├── win32.py
│ │ │ │ └── wspbus.py
│ │ │ ├── scaffold/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── apache-fcgi.conf
│ │ │ │ ├── example.conf
│ │ │ │ └── site.conf
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _test_decorators.py
│ │ │ │ ├── _test_states_demo.py
│ │ │ │ ├── benchmark.py
│ │ │ │ ├── checkerdemo.py
│ │ │ │ ├── fastcgi.conf
│ │ │ │ ├── fcgi.conf
│ │ │ │ ├── helper.py
│ │ │ │ ├── logtest.py
│ │ │ │ ├── modfastcgi.py
│ │ │ │ ├── modfcgid.py
│ │ │ │ ├── modpy.py
│ │ │ │ ├── modwsgi.py
│ │ │ │ ├── sessiondemo.py
│ │ │ │ ├── static/
│ │ │ │ │ ├── 404.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── style.css
│ │ │ │ ├── test.pem
│ │ │ │ ├── test_auth_basic.py
│ │ │ │ ├── test_auth_digest.py
│ │ │ │ ├── test_bus.py
│ │ │ │ ├── test_caching.py
│ │ │ │ ├── test_config.py
│ │ │ │ ├── test_config_server.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_dynamicobjectmapping.py
│ │ │ │ ├── test_encoding.py
│ │ │ │ ├── test_etags.py
│ │ │ │ ├── test_http.py
│ │ │ │ ├── test_httputil.py
│ │ │ │ ├── test_iterator.py
│ │ │ │ ├── test_json.py
│ │ │ │ ├── test_logging.py
│ │ │ │ ├── test_mime.py
│ │ │ │ ├── test_misc_tools.py
│ │ │ │ ├── test_native.py
│ │ │ │ ├── test_objectmapping.py
│ │ │ │ ├── test_params.py
│ │ │ │ ├── test_plugins.py
│ │ │ │ ├── test_proxy.py
│ │ │ │ ├── test_refleaks.py
│ │ │ │ ├── test_request_obj.py
│ │ │ │ ├── test_routes.py
│ │ │ │ ├── test_session.py
│ │ │ │ ├── test_sessionauthenticate.py
│ │ │ │ ├── test_states.py
│ │ │ │ ├── test_static.py
│ │ │ │ ├── test_tools.py
│ │ │ │ ├── test_tutorials.py
│ │ │ │ ├── test_virtualhost.py
│ │ │ │ ├── test_wsgi_ns.py
│ │ │ │ ├── test_wsgi_unix_socket.py
│ │ │ │ ├── test_wsgi_vhost.py
│ │ │ │ ├── test_wsgiapps.py
│ │ │ │ ├── test_xmlrpc.py
│ │ │ │ └── webtest.py
│ │ │ └── tutorial/
│ │ │ ├── README.rst
│ │ │ ├── __init__.py
│ │ │ ├── custom_error.html
│ │ │ ├── tut01_helloworld.py
│ │ │ ├── tut02_expose_methods.py
│ │ │ ├── tut03_get_and_post.py
│ │ │ ├── tut04_complex_site.py
│ │ │ ├── tut05_derived_objects.py
│ │ │ ├── tut06_default_method.py
│ │ │ ├── tut07_sessions.py
│ │ │ ├── tut08_generators_and_yield.py
│ │ │ ├── tut09_files.py
│ │ │ ├── tut10_http_errors.py
│ │ │ └── tutorial.conf
│ │ ├── dateutil/
│ │ │ ├── __init__.py
│ │ │ ├── _common.py
│ │ │ ├── _version.py
│ │ │ ├── easter.py
│ │ │ ├── parser/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _parser.py
│ │ │ │ └── isoparser.py
│ │ │ ├── relativedelta.py
│ │ │ ├── rrule.py
│ │ │ ├── tz/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _common.py
│ │ │ │ ├── _factories.py
│ │ │ │ ├── tz.py
│ │ │ │ └── win.py
│ │ │ ├── tzwin.py
│ │ │ ├── utils.py
│ │ │ └── zoneinfo/
│ │ │ ├── __init__.py
│ │ │ └── rebuild.py
│ │ ├── jaraco/
│ │ │ ├── __init__.py
│ │ │ ├── collections.py
│ │ │ ├── context.py
│ │ │ ├── functools.py
│ │ │ └── text/
│ │ │ ├── Lorem ipsum.txt
│ │ │ ├── __init__.py
│ │ │ ├── layouts.py
│ │ │ ├── show-newlines.py
│ │ │ ├── strip-prefix.py
│ │ │ ├── to-dvorak.py
│ │ │ └── to-qwerty.py
│ │ ├── portend.py
│ │ ├── tempora/
│ │ │ ├── __init__.py
│ │ │ ├── schedule.py
│ │ │ ├── tests/
│ │ │ │ └── test_schedule.py
│ │ │ ├── timing.py
│ │ │ └── utc.py
│ │ └── zc/
│ │ └── lockfile/
│ │ ├── __init__.py
│ │ └── tests.py
│ └── python3.6/
│ └── site-packages/
│ ├── __init__.py
│ ├── cheroot/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── _compat.py
│ │ ├── cli.py
│ │ ├── connections.py
│ │ ├── errors.py
│ │ ├── makefile.py
│ │ ├── server.py
│ │ ├── ssl/
│ │ │ ├── __init__.py
│ │ │ ├── builtin.py
│ │ │ └── pyopenssl.py
│ │ ├── test/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── helper.py
│ │ │ ├── test__compat.py
│ │ │ ├── test_conn.py
│ │ │ ├── test_core.py
│ │ │ ├── test_dispatch.py
│ │ │ ├── test_errors.py
│ │ │ ├── test_makefile.py
│ │ │ ├── test_server.py
│ │ │ ├── test_ssl.py
│ │ │ └── webtest.py
│ │ ├── testing.py
│ │ ├── workers/
│ │ │ ├── __init__.py
│ │ │ └── threadpool.py
│ │ └── wsgi.py
│ ├── cherrypy/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── _cpchecker.py
│ │ ├── _cpcompat.py
│ │ ├── _cpconfig.py
│ │ ├── _cpdispatch.py
│ │ ├── _cperror.py
│ │ ├── _cplogging.py
│ │ ├── _cpmodpy.py
│ │ ├── _cpnative_server.py
│ │ ├── _cpreqbody.py
│ │ ├── _cprequest.py
│ │ ├── _cpserver.py
│ │ ├── _cptools.py
│ │ ├── _cptree.py
│ │ ├── _cpwsgi.py
│ │ ├── _cpwsgi_server.py
│ │ ├── _helper.py
│ │ ├── _json.py
│ │ ├── daemon.py
│ │ ├── lib/
│ │ │ ├── __init__.py
│ │ │ ├── auth_basic.py
│ │ │ ├── auth_digest.py
│ │ │ ├── caching.py
│ │ │ ├── covercp.py
│ │ │ ├── cpstats.py
│ │ │ ├── cptools.py
│ │ │ ├── encoding.py
│ │ │ ├── gctools.py
│ │ │ ├── httputil.py
│ │ │ ├── jsontools.py
│ │ │ ├── locking.py
│ │ │ ├── profiler.py
│ │ │ ├── reprconf.py
│ │ │ ├── sessions.py
│ │ │ ├── static.py
│ │ │ └── xmlrpcutil.py
│ │ ├── process/
│ │ │ ├── __init__.py
│ │ │ ├── plugins.py
│ │ │ ├── servers.py
│ │ │ ├── win32.py
│ │ │ └── wspbus.py
│ │ ├── scaffold/
│ │ │ ├── __init__.py
│ │ │ ├── apache-fcgi.conf
│ │ │ ├── example.conf
│ │ │ └── site.conf
│ │ ├── test/
│ │ │ ├── __init__.py
│ │ │ ├── _test_decorators.py
│ │ │ ├── _test_states_demo.py
│ │ │ ├── benchmark.py
│ │ │ ├── checkerdemo.py
│ │ │ ├── fastcgi.conf
│ │ │ ├── fcgi.conf
│ │ │ ├── helper.py
│ │ │ ├── logtest.py
│ │ │ ├── modfastcgi.py
│ │ │ ├── modfcgid.py
│ │ │ ├── modpy.py
│ │ │ ├── modwsgi.py
│ │ │ ├── sessiondemo.py
│ │ │ ├── static/
│ │ │ │ ├── 404.html
│ │ │ │ └── index.html
│ │ │ ├── style.css
│ │ │ ├── test.pem
│ │ │ ├── test_auth_basic.py
│ │ │ ├── test_auth_digest.py
│ │ │ ├── test_bus.py
│ │ │ ├── test_caching.py
│ │ │ ├── test_config.py
│ │ │ ├── test_config_server.py
│ │ │ ├── test_conn.py
│ │ │ ├── test_core.py
│ │ │ ├── test_dynamicobjectmapping.py
│ │ │ ├── test_encoding.py
│ │ │ ├── test_etags.py
│ │ │ ├── test_http.py
│ │ │ ├── test_httputil.py
│ │ │ ├── test_iterator.py
│ │ │ ├── test_json.py
│ │ │ ├── test_logging.py
│ │ │ ├── test_mime.py
│ │ │ ├── test_misc_tools.py
│ │ │ ├── test_native.py
│ │ │ ├── test_objectmapping.py
│ │ │ ├── test_params.py
│ │ │ ├── test_plugins.py
│ │ │ ├── test_proxy.py
│ │ │ ├── test_refleaks.py
│ │ │ ├── test_request_obj.py
│ │ │ ├── test_routes.py
│ │ │ ├── test_session.py
│ │ │ ├── test_sessionauthenticate.py
│ │ │ ├── test_states.py
│ │ │ ├── test_static.py
│ │ │ ├── test_tools.py
│ │ │ ├── test_tutorials.py
│ │ │ ├── test_virtualhost.py
│ │ │ ├── test_wsgi_ns.py
│ │ │ ├── test_wsgi_unix_socket.py
│ │ │ ├── test_wsgi_vhost.py
│ │ │ ├── test_wsgiapps.py
│ │ │ ├── test_xmlrpc.py
│ │ │ └── webtest.py
│ │ └── tutorial/
│ │ ├── README.rst
│ │ ├── __init__.py
│ │ ├── custom_error.html
│ │ ├── tut01_helloworld.py
│ │ ├── tut02_expose_methods.py
│ │ ├── tut03_get_and_post.py
│ │ ├── tut04_complex_site.py
│ │ ├── tut05_derived_objects.py
│ │ ├── tut06_default_method.py
│ │ ├── tut07_sessions.py
│ │ ├── tut08_generators_and_yield.py
│ │ ├── tut09_files.py
│ │ ├── tut10_http_errors.py
│ │ └── tutorial.conf
│ ├── dateutil/
│ │ ├── __init__.py
│ │ ├── _common.py
│ │ ├── _version.py
│ │ ├── easter.py
│ │ ├── parser/
│ │ │ ├── __init__.py
│ │ │ ├── _parser.py
│ │ │ └── isoparser.py
│ │ ├── relativedelta.py
│ │ ├── rrule.py
│ │ ├── tz/
│ │ │ ├── __init__.py
│ │ │ ├── _common.py
│ │ │ ├── _factories.py
│ │ │ ├── tz.py
│ │ │ └── win.py
│ │ ├── tzwin.py
│ │ ├── utils.py
│ │ └── zoneinfo/
│ │ ├── __init__.py
│ │ └── rebuild.py
│ ├── jaraco/
│ │ ├── __init__.py
│ │ └── functools.py
│ ├── portend.py
│ ├── tempora/
│ │ ├── __init__.py
│ │ ├── schedule.py
│ │ ├── tests/
│ │ │ └── test_schedule.py
│ │ ├── timing.py
│ │ └── utc.py
│ └── zc/
│ └── lockfile/
│ ├── __init__.py
│ └── tests.py
├── LICENSE
├── README.md
├── VERSION
├── doc/
│ ├── alias.json
│ ├── book/
│ │ └── doc/
│ │ ├── doc_tactic-developer/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── ar01s07.html
│ │ │ ├── ar01s08.html
│ │ │ ├── ar01s09.html
│ │ │ ├── ar01s10.html
│ │ │ ├── ar01s11.html
│ │ │ ├── ar01s12.html
│ │ │ ├── ar01s13.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ ├── doc_tactic-end-user/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── ar01s07.html
│ │ │ ├── ar01s08.html
│ │ │ ├── ar01s09.html
│ │ │ ├── ar01s10.html
│ │ │ ├── ar01s11.html
│ │ │ ├── ar01s12.html
│ │ │ ├── ar01s13.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ ├── doc_tactic-quickstart/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ ├── doc_tactic-setup/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── ar01s07.html
│ │ │ ├── ar01s08.html
│ │ │ ├── ar01s09.html
│ │ │ ├── ar01s10.html
│ │ │ ├── ar01s11.html
│ │ │ ├── ar01s12.html
│ │ │ ├── ar01s13.html
│ │ │ ├── ar01s14.html
│ │ │ ├── ar01s15.html
│ │ │ ├── ar01s16.html
│ │ │ ├── ar01s17.html
│ │ │ ├── ar01s18.html
│ │ │ ├── ar01s19.html
│ │ │ ├── ar01s20.html
│ │ │ ├── ar01s21.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ └── doc_tactic-sys-admin/
│ │ └── html/
│ │ ├── ar01s01.html
│ │ ├── ar01s02.html
│ │ ├── ar01s03.html
│ │ ├── ar01s04.html
│ │ ├── ar01s05.html
│ │ ├── ar01s06.html
│ │ ├── ar01s07.html
│ │ ├── ar01s08.html
│ │ ├── ar01s09.html
│ │ ├── ar01s10.html
│ │ ├── ar01s11.html
│ │ ├── ar01s12.html
│ │ ├── docbook-xsl.css
│ │ └── index.html
│ ├── epl-v10.html
│ ├── main.html
│ ├── pdf.html
│ └── verify_aliases.py
└── src/
├── __init__.py
├── asset_security.py
├── client/
│ ├── __init__.py
│ ├── examples/
│ │ ├── bootstrap_get_tactic_server_example.py
│ │ ├── checkin.py
│ │ ├── checkin_pipeline.py
│ │ ├── checkin_plates.py
│ │ ├── checkin_render.py
│ │ ├── checkin_render_layer.py
│ │ ├── checkin_shot.py
│ │ ├── checkout.py
│ │ ├── ping.py
│ │ ├── query.py
│ │ ├── query_shot.py
│ │ └── submit_dailies.py
│ ├── tactic_client_lib/
│ │ ├── VERSION
│ │ ├── VERSION_API
│ │ ├── __init__.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ └── upload_multipart.py
│ │ ├── interpreter/
│ │ │ ├── __init__.py
│ │ │ ├── callback.py
│ │ │ ├── examples.py
│ │ │ ├── handler.py
│ │ │ ├── interpreter.py
│ │ │ └── pipeline.py
│ │ ├── scm/
│ │ │ ├── __init__.py
│ │ │ ├── delegate.py
│ │ │ ├── perforce.py
│ │ │ ├── scm_impl.py
│ │ │ ├── scm_test.py
│ │ │ ├── subversion.py
│ │ │ └── tactic_impl.py
│ │ ├── tactic_server_stub.py
│ │ └── test/
│ │ ├── __init__.py
│ │ └── handler.py
│ └── test/
│ ├── application_api_test.py
│ ├── client_api_test.py
│ ├── expression_test.py
│ ├── maya_test.py
│ ├── pipeline_test.py
│ ├── sample3d_test.py
│ └── transaction_test.py
├── config/
│ ├── design/
│ │ └── sobject/
│ │ ├── design-conf.xml
│ │ └── product-conf.xml
│ ├── effects/
│ │ └── sobject/
│ │ └── plate-conf.xml
│ ├── game/
│ │ └── sobject/
│ │ └── storyboard-conf.xml
│ ├── prod/
│ │ └── sobject/
│ │ ├── art_reference-conf.xml
│ │ ├── asset-conf.xml
│ │ ├── asset_library-conf.xml
│ │ ├── camera-conf.xml
│ │ ├── episode-conf.xml
│ │ ├── instance-conf.xml
│ │ ├── naming-conf.xml
│ │ ├── prod_setting-conf.xml
│ │ ├── render-conf.xml
│ │ ├── script-conf.xml
│ │ ├── sequence-conf.xml
│ │ ├── series-conf.xml
│ │ ├── shot-conf.xml
│ │ ├── storyboard-conf.xml
│ │ └── template-conf.xml
│ └── sthpw/
│ ├── sobject/
│ │ ├── access_rule-conf.xml
│ │ ├── login-conf.xml
│ │ ├── login_group-conf.xml
│ │ ├── note-conf.xml
│ │ ├── notification-conf.xml
│ │ ├── notification_log-conf.xml
│ │ ├── person-conf.xml
│ │ ├── pipeline-conf.xml
│ │ ├── project-conf.xml
│ │ ├── project_type-conf.xml
│ │ ├── queue-conf.xml
│ │ ├── snapshot-conf.xml
│ │ ├── task-conf.xml
│ │ ├── ticket-conf.xml
│ │ ├── timecard-conf.xml
│ │ ├── transaction_log-conf.xml
│ │ └── unittest/
│ │ └── person-conf.xml
│ └── webapp/
│ ├── remko-wdg.xml
│ └── sample.xml
├── config2/
│ └── search_type/
│ ├── search/
│ │ └── DEFAULT-conf.xml
│ └── widget/
│ ├── config/
│ │ ├── bid-conf.xml
│ │ ├── client_trigger-conf.xml
│ │ ├── custom_script-conf.xml
│ │ ├── naming-conf.xml
│ │ ├── pipeline-conf.xml
│ │ ├── plugin-conf.xml
│ │ ├── process-conf.xml
│ │ ├── prod_setting-conf.xml
│ │ ├── translation-conf.xml
│ │ ├── trigger-conf.xml
│ │ ├── url-conf.xml
│ │ └── widget_config-conf.xml
│ ├── prod/
│ │ ├── DEFAULT-conf.xml
│ │ ├── art_reference-conf.xml
│ │ ├── asset-conf.xml
│ │ ├── asset_library-conf.xml
│ │ ├── bin-conf.xml
│ │ ├── camera-conf.xml
│ │ ├── composite-conf.xml
│ │ ├── cut_sequence-conf.xml
│ │ ├── layer-conf.xml
│ │ ├── plate-conf.xml
│ │ ├── prod_setting-conf.xml
│ │ ├── render-conf.xml
│ │ ├── script-conf.xml
│ │ ├── sequence-conf.xml
│ │ ├── shot-conf.xml
│ │ ├── shot_instance-conf.xml
│ │ ├── storyboard-conf.xml
│ │ └── submission-conf.xml
│ ├── sthpw/
│ │ ├── DEFAULT-conf.xml
│ │ ├── access_rule-conf.xml
│ │ ├── custom_property-conf.xml
│ │ ├── custom_script-conf.xml
│ │ ├── db_resource-conf.xml
│ │ ├── debug_log-conf.xml
│ │ ├── exception_log-conf.xml
│ │ ├── file-conf.xml
│ │ ├── login-conf.xml
│ │ ├── login_group-conf.xml
│ │ ├── message_log-conf.xml
│ │ ├── milestone-conf.xml
│ │ ├── note-conf.xml
│ │ ├── notification-conf.xml
│ │ ├── notification_log-conf.xml
│ │ ├── pipeline-conf.xml
│ │ ├── plugin-conf.xml
│ │ ├── pref_list-conf.xml
│ │ ├── project-conf.xml
│ │ ├── project_type-conf.xml
│ │ ├── queue-conf.xml
│ │ ├── schema-conf.xml
│ │ ├── search_object-conf.xml
│ │ ├── search_type-conf.xml
│ │ ├── snapshot-conf.xml
│ │ ├── sobject_list-conf.xml
│ │ ├── sobject_log-conf.xml
│ │ ├── status_log-conf.xml
│ │ ├── sync_job-conf.xml
│ │ ├── sync_server-conf.xml
│ │ ├── task-conf.xml
│ │ ├── template-conf.xml
│ │ ├── ticket-conf.xml
│ │ ├── timecard-conf.xml
│ │ ├── transaction_log-conf.xml
│ │ ├── translation-conf.xml
│ │ ├── trigger-conf.xml
│ │ └── work_hour-conf.xml
│ └── unittest/
│ └── person-conf.xml
├── context/
│ ├── VERSION
│ ├── VERSION_API
│ ├── api/
│ │ ├── README
│ │ ├── tactic.js
│ │ └── upload.js
│ ├── icons/
│ │ └── common/
│ │ └── loading_anim.xcf
│ ├── javascript/
│ │ ├── Common.js
│ │ ├── DynamicLoader.js
│ │ ├── EventContainer.js
│ │ ├── MayaWebTools.js
│ │ ├── Overlay.js
│ │ ├── PopupWindow.js
│ │ ├── PyFlash.js
│ │ ├── PyHoudini.js
│ │ ├── PyMaya.js
│ │ ├── PyPerforce.js
│ │ └── PyXSI.js
│ ├── react/
│ │ ├── ag-grid-community.min.noStyle.js
│ │ ├── ag-grid.css
│ │ ├── ag-theme-alpine.css
│ │ ├── react-dom.development.js
│ │ ├── react.development.js
│ │ └── redux.js
│ ├── spt_js/
│ │ ├── UnityObject.js
│ │ ├── ace/
│ │ │ └── ace-1.4.7/
│ │ │ └── src/
│ │ │ ├── ace.js
│ │ │ ├── ext-beautify.js
│ │ │ ├── ext-elastic_tabstops_lite.js
│ │ │ ├── ext-emmet.js
│ │ │ ├── ext-error_marker.js
│ │ │ ├── ext-keybinding_menu.js
│ │ │ ├── ext-language_tools.js
│ │ │ ├── ext-linking.js
│ │ │ ├── ext-modelist.js
│ │ │ ├── ext-options.js
│ │ │ ├── ext-prompt.js
│ │ │ ├── ext-rtl.js
│ │ │ ├── ext-searchbox.js
│ │ │ ├── ext-settings_menu.js
│ │ │ ├── ext-spellcheck.js
│ │ │ ├── ext-split.js
│ │ │ ├── ext-static_highlight.js
│ │ │ ├── ext-statusbar.js
│ │ │ ├── ext-textarea.js
│ │ │ ├── ext-themelist.js
│ │ │ ├── ext-whitespace.js
│ │ │ ├── keybinding-emacs.js
│ │ │ ├── keybinding-sublime.js
│ │ │ ├── keybinding-vim.js
│ │ │ ├── mode-abap.js
│ │ │ ├── mode-abc.js
│ │ │ ├── mode-actionscript.js
│ │ │ ├── mode-ada.js
│ │ │ ├── mode-apache_conf.js
│ │ │ ├── mode-apex.js
│ │ │ ├── mode-applescript.js
│ │ │ ├── mode-aql.js
│ │ │ ├── mode-asciidoc.js
│ │ │ ├── mode-asl.js
│ │ │ ├── mode-assembly_x86.js
│ │ │ ├── mode-autohotkey.js
│ │ │ ├── mode-batchfile.js
│ │ │ ├── mode-bro.js
│ │ │ ├── mode-c9search.js
│ │ │ ├── mode-c_cpp.js
│ │ │ ├── mode-cirru.js
│ │ │ ├── mode-clojure.js
│ │ │ ├── mode-cobol.js
│ │ │ ├── mode-coffee.js
│ │ │ ├── mode-coldfusion.js
│ │ │ ├── mode-crystal.js
│ │ │ ├── mode-csharp.js
│ │ │ ├── mode-csound_document.js
│ │ │ ├── mode-csound_orchestra.js
│ │ │ ├── mode-csound_score.js
│ │ │ ├── mode-csp.js
│ │ │ ├── mode-css.js
│ │ │ ├── mode-curly.js
│ │ │ ├── mode-d.js
│ │ │ ├── mode-dart.js
│ │ │ ├── mode-diff.js
│ │ │ ├── mode-django.js
│ │ │ ├── mode-dockerfile.js
│ │ │ ├── mode-dot.js
│ │ │ ├── mode-drools.js
│ │ │ ├── mode-edifact.js
│ │ │ ├── mode-eiffel.js
│ │ │ ├── mode-ejs.js
│ │ │ ├── mode-elixir.js
│ │ │ ├── mode-elm.js
│ │ │ ├── mode-erlang.js
│ │ │ ├── mode-forth.js
│ │ │ ├── mode-fortran.js
│ │ │ ├── mode-fsharp.js
│ │ │ ├── mode-fsl.js
│ │ │ ├── mode-ftl.js
│ │ │ ├── mode-gcode.js
│ │ │ ├── mode-gherkin.js
│ │ │ ├── mode-gitignore.js
│ │ │ ├── mode-glsl.js
│ │ │ ├── mode-gobstones.js
│ │ │ ├── mode-golang.js
│ │ │ ├── mode-graphqlschema.js
│ │ │ ├── mode-groovy.js
│ │ │ ├── mode-haml.js
│ │ │ ├── mode-handlebars.js
│ │ │ ├── mode-haskell.js
│ │ │ ├── mode-haskell_cabal.js
│ │ │ ├── mode-haxe.js
│ │ │ ├── mode-hjson.js
│ │ │ ├── mode-html.js
│ │ │ ├── mode-html_elixir.js
│ │ │ ├── mode-html_ruby.js
│ │ │ ├── mode-ini.js
│ │ │ ├── mode-io.js
│ │ │ ├── mode-jack.js
│ │ │ ├── mode-jade.js
│ │ │ ├── mode-java.js
│ │ │ ├── mode-javascript.js
│ │ │ ├── mode-json.js
│ │ │ ├── mode-jsoniq.js
│ │ │ ├── mode-jsp.js
│ │ │ ├── mode-jssm.js
│ │ │ ├── mode-jsx.js
│ │ │ ├── mode-julia.js
│ │ │ ├── mode-kotlin.js
│ │ │ ├── mode-latex.js
│ │ │ ├── mode-less.js
│ │ │ ├── mode-liquid.js
│ │ │ ├── mode-lisp.js
│ │ │ ├── mode-livescript.js
│ │ │ ├── mode-logiql.js
│ │ │ ├── mode-logtalk.js
│ │ │ ├── mode-lsl.js
│ │ │ ├── mode-lua.js
│ │ │ ├── mode-luapage.js
│ │ │ ├── mode-lucene.js
│ │ │ ├── mode-makefile.js
│ │ │ ├── mode-markdown.js
│ │ │ ├── mode-mask.js
│ │ │ ├── mode-matlab.js
│ │ │ ├── mode-maze.js
│ │ │ ├── mode-mel.js
│ │ │ ├── mode-mixal.js
│ │ │ ├── mode-mushcode.js
│ │ │ ├── mode-mysql.js
│ │ │ ├── mode-nginx.js
│ │ │ ├── mode-nim.js
│ │ │ ├── mode-nix.js
│ │ │ ├── mode-nsis.js
│ │ │ ├── mode-objectivec.js
│ │ │ ├── mode-ocaml.js
│ │ │ ├── mode-pascal.js
│ │ │ ├── mode-perl.js
│ │ │ ├── mode-perl6.js
│ │ │ ├── mode-pgsql.js
│ │ │ ├── mode-php.js
│ │ │ ├── mode-php_laravel_blade.js
│ │ │ ├── mode-pig.js
│ │ │ ├── mode-plain_text.js
│ │ │ ├── mode-powershell.js
│ │ │ ├── mode-praat.js
│ │ │ ├── mode-prolog.js
│ │ │ ├── mode-properties.js
│ │ │ ├── mode-protobuf.js
│ │ │ ├── mode-puppet.js
│ │ │ ├── mode-python.js
│ │ │ ├── mode-r.js
│ │ │ ├── mode-razor.js
│ │ │ ├── mode-rdoc.js
│ │ │ ├── mode-red.js
│ │ │ ├── mode-redshift.js
│ │ │ ├── mode-rhtml.js
│ │ │ ├── mode-rst.js
│ │ │ ├── mode-ruby.js
│ │ │ ├── mode-rust.js
│ │ │ ├── mode-sass.js
│ │ │ ├── mode-scad.js
│ │ │ ├── mode-scala.js
│ │ │ ├── mode-scheme.js
│ │ │ ├── mode-scss.js
│ │ │ ├── mode-sh.js
│ │ │ ├── mode-sjs.js
│ │ │ ├── mode-slim.js
│ │ │ ├── mode-smarty.js
│ │ │ ├── mode-snippets.js
│ │ │ ├── mode-soy_template.js
│ │ │ ├── mode-space.js
│ │ │ ├── mode-sparql.js
│ │ │ ├── mode-sql.js
│ │ │ ├── mode-sqlserver.js
│ │ │ ├── mode-stylus.js
│ │ │ ├── mode-svg.js
│ │ │ ├── mode-swift.js
│ │ │ ├── mode-tcl.js
│ │ │ ├── mode-terraform.js
│ │ │ ├── mode-tex.js
│ │ │ ├── mode-text.js
│ │ │ ├── mode-textile.js
│ │ │ ├── mode-toml.js
│ │ │ ├── mode-tsx.js
│ │ │ ├── mode-turtle.js
│ │ │ ├── mode-twig.js
│ │ │ ├── mode-typescript.js
│ │ │ ├── mode-vala.js
│ │ │ ├── mode-vbscript.js
│ │ │ ├── mode-velocity.js
│ │ │ ├── mode-verilog.js
│ │ │ ├── mode-vhdl.js
│ │ │ ├── mode-visualforce.js
│ │ │ ├── mode-wollok.js
│ │ │ ├── mode-xml.js
│ │ │ ├── mode-xquery.js
│ │ │ ├── mode-yaml.js
│ │ │ ├── mode-zeek.js
│ │ │ ├── snippets/
│ │ │ │ ├── abap.js
│ │ │ │ ├── abc.js
│ │ │ │ ├── actionscript.js
│ │ │ │ ├── ada.js
│ │ │ │ ├── apache_conf.js
│ │ │ │ ├── apex.js
│ │ │ │ ├── applescript.js
│ │ │ │ ├── aql.js
│ │ │ │ ├── asciidoc.js
│ │ │ │ ├── asl.js
│ │ │ │ ├── assembly_x86.js
│ │ │ │ ├── autohotkey.js
│ │ │ │ ├── batchfile.js
│ │ │ │ ├── bro.js
│ │ │ │ ├── c9search.js
│ │ │ │ ├── c_cpp.js
│ │ │ │ ├── cirru.js
│ │ │ │ ├── clojure.js
│ │ │ │ ├── cobol.js
│ │ │ │ ├── coffee.js
│ │ │ │ ├── coldfusion.js
│ │ │ │ ├── crystal.js
│ │ │ │ ├── csharp.js
│ │ │ │ ├── csound_document.js
│ │ │ │ ├── csound_orchestra.js
│ │ │ │ ├── csound_score.js
│ │ │ │ ├── csp.js
│ │ │ │ ├── css.js
│ │ │ │ ├── curly.js
│ │ │ │ ├── d.js
│ │ │ │ ├── dart.js
│ │ │ │ ├── diff.js
│ │ │ │ ├── django.js
│ │ │ │ ├── dockerfile.js
│ │ │ │ ├── dot.js
│ │ │ │ ├── drools.js
│ │ │ │ ├── edifact.js
│ │ │ │ ├── eiffel.js
│ │ │ │ ├── ejs.js
│ │ │ │ ├── elixir.js
│ │ │ │ ├── elm.js
│ │ │ │ ├── erlang.js
│ │ │ │ ├── forth.js
│ │ │ │ ├── fortran.js
│ │ │ │ ├── fsharp.js
│ │ │ │ ├── fsl.js
│ │ │ │ ├── ftl.js
│ │ │ │ ├── gcode.js
│ │ │ │ ├── gherkin.js
│ │ │ │ ├── gitignore.js
│ │ │ │ ├── glsl.js
│ │ │ │ ├── gobstones.js
│ │ │ │ ├── golang.js
│ │ │ │ ├── graphqlschema.js
│ │ │ │ ├── groovy.js
│ │ │ │ ├── haml.js
│ │ │ │ ├── handlebars.js
│ │ │ │ ├── haskell.js
│ │ │ │ ├── haskell_cabal.js
│ │ │ │ ├── haxe.js
│ │ │ │ ├── hjson.js
│ │ │ │ ├── html.js
│ │ │ │ ├── html_elixir.js
│ │ │ │ ├── html_ruby.js
│ │ │ │ ├── ini.js
│ │ │ │ ├── io.js
│ │ │ │ ├── jack.js
│ │ │ │ ├── jade.js
│ │ │ │ ├── java.js
│ │ │ │ ├── javascript.js
│ │ │ │ ├── json.js
│ │ │ │ ├── jsoniq.js
│ │ │ │ ├── jsp.js
│ │ │ │ ├── jssm.js
│ │ │ │ ├── jsx.js
│ │ │ │ ├── julia.js
│ │ │ │ ├── kotlin.js
│ │ │ │ ├── latex.js
│ │ │ │ ├── less.js
│ │ │ │ ├── liquid.js
│ │ │ │ ├── lisp.js
│ │ │ │ ├── livescript.js
│ │ │ │ ├── logiql.js
│ │ │ │ ├── logtalk.js
│ │ │ │ ├── lsl.js
│ │ │ │ ├── lua.js
│ │ │ │ ├── luapage.js
│ │ │ │ ├── lucene.js
│ │ │ │ ├── makefile.js
│ │ │ │ ├── markdown.js
│ │ │ │ ├── mask.js
│ │ │ │ ├── matlab.js
│ │ │ │ ├── maze.js
│ │ │ │ ├── mel.js
│ │ │ │ ├── mixal.js
│ │ │ │ ├── mushcode.js
│ │ │ │ ├── mysql.js
│ │ │ │ ├── nginx.js
│ │ │ │ ├── nim.js
│ │ │ │ ├── nix.js
│ │ │ │ ├── nsis.js
│ │ │ │ ├── objectivec.js
│ │ │ │ ├── ocaml.js
│ │ │ │ ├── pascal.js
│ │ │ │ ├── perl.js
│ │ │ │ ├── perl6.js
│ │ │ │ ├── pgsql.js
│ │ │ │ ├── php.js
│ │ │ │ ├── php_laravel_blade.js
│ │ │ │ ├── pig.js
│ │ │ │ ├── plain_text.js
│ │ │ │ ├── powershell.js
│ │ │ │ ├── praat.js
│ │ │ │ ├── prolog.js
│ │ │ │ ├── properties.js
│ │ │ │ ├── protobuf.js
│ │ │ │ ├── puppet.js
│ │ │ │ ├── python.js
│ │ │ │ ├── r.js
│ │ │ │ ├── razor.js
│ │ │ │ ├── rdoc.js
│ │ │ │ ├── red.js
│ │ │ │ ├── redshift.js
│ │ │ │ ├── rhtml.js
│ │ │ │ ├── rst.js
│ │ │ │ ├── ruby.js
│ │ │ │ ├── rust.js
│ │ │ │ ├── sass.js
│ │ │ │ ├── scad.js
│ │ │ │ ├── scala.js
│ │ │ │ ├── scheme.js
│ │ │ │ ├── scss.js
│ │ │ │ ├── sh.js
│ │ │ │ ├── sjs.js
│ │ │ │ ├── slim.js
│ │ │ │ ├── smarty.js
│ │ │ │ ├── snippets.js
│ │ │ │ ├── soy_template.js
│ │ │ │ ├── space.js
│ │ │ │ ├── sparql.js
│ │ │ │ ├── sql.js
│ │ │ │ ├── sqlserver.js
│ │ │ │ ├── stylus.js
│ │ │ │ ├── svg.js
│ │ │ │ ├── swift.js
│ │ │ │ ├── tcl.js
│ │ │ │ ├── terraform.js
│ │ │ │ ├── tex.js
│ │ │ │ ├── text.js
│ │ │ │ ├── textile.js
│ │ │ │ ├── toml.js
│ │ │ │ ├── tsx.js
│ │ │ │ ├── turtle.js
│ │ │ │ ├── twig.js
│ │ │ │ ├── typescript.js
│ │ │ │ ├── vala.js
│ │ │ │ ├── vbscript.js
│ │ │ │ ├── velocity.js
│ │ │ │ ├── verilog.js
│ │ │ │ ├── vhdl.js
│ │ │ │ ├── visualforce.js
│ │ │ │ ├── wollok.js
│ │ │ │ ├── xml.js
│ │ │ │ ├── xquery.js
│ │ │ │ ├── yaml.js
│ │ │ │ └── zeek.js
│ │ │ ├── theme-ambiance.js
│ │ │ ├── theme-chaos.js
│ │ │ ├── theme-chrome.js
│ │ │ ├── theme-clouds.js
│ │ │ ├── theme-clouds_midnight.js
│ │ │ ├── theme-cobalt.js
│ │ │ ├── theme-crimson_editor.js
│ │ │ ├── theme-dawn.js
│ │ │ ├── theme-dracula.js
│ │ │ ├── theme-dreamweaver.js
│ │ │ ├── theme-eclipse.js
│ │ │ ├── theme-github.js
│ │ │ ├── theme-gob.js
│ │ │ ├── theme-gruvbox.js
│ │ │ ├── theme-idle_fingers.js
│ │ │ ├── theme-iplastic.js
│ │ │ ├── theme-katzenmilch.js
│ │ │ ├── theme-kr_theme.js
│ │ │ ├── theme-kuroir.js
│ │ │ ├── theme-merbivore.js
│ │ │ ├── theme-merbivore_soft.js
│ │ │ ├── theme-mono_industrial.js
│ │ │ ├── theme-monokai.js
│ │ │ ├── theme-pastel_on_dark.js
│ │ │ ├── theme-solarized_dark.js
│ │ │ ├── theme-solarized_light.js
│ │ │ ├── theme-sqlserver.js
│ │ │ ├── theme-terminal.js
│ │ │ ├── theme-textmate.js
│ │ │ ├── theme-tomorrow.js
│ │ │ ├── theme-tomorrow_night.js
│ │ │ ├── theme-tomorrow_night_blue.js
│ │ │ ├── theme-tomorrow_night_bright.js
│ │ │ ├── theme-tomorrow_night_eighties.js
│ │ │ ├── theme-twilight.js
│ │ │ ├── theme-vibrant_ink.js
│ │ │ ├── theme-xcode.js
│ │ │ ├── worker-coffee.js
│ │ │ ├── worker-css.js
│ │ │ ├── worker-html.js
│ │ │ ├── worker-javascript.js
│ │ │ ├── worker-json.js
│ │ │ ├── worker-lua.js
│ │ │ ├── worker-php.js
│ │ │ ├── worker-xml.js
│ │ │ └── worker-xquery.js
│ │ ├── api/
│ │ │ ├── api.js
│ │ │ ├── client_api_test.js
│ │ │ └── utility.js
│ │ ├── applet.js
│ │ ├── behavior.js
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-theme.css
│ │ │ │ └── bootstrap.css
│ │ │ └── js/
│ │ │ ├── bootstrap.js
│ │ │ └── npm.js
│ │ ├── bootstrap_material_design/
│ │ │ ├── bmd-bs-dark.css
│ │ │ ├── bmd-bs-light.css
│ │ │ └── bootstrap-material-design-4.1.1.js
│ │ ├── chart/
│ │ │ └── utils.js
│ │ ├── ckeditor/
│ │ │ ├── CHANGES.md
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── adapters/
│ │ │ │ └── jquery.js
│ │ │ ├── build-config.js
│ │ │ ├── ckeditor.js
│ │ │ ├── config.js
│ │ │ ├── contents.css
│ │ │ ├── lang/
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── bn.js
│ │ │ │ ├── bs.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── cy.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de-ch.js
│ │ │ │ ├── de.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en-au.js
│ │ │ │ ├── en-ca.js
│ │ │ │ ├── en-gb.js
│ │ │ │ ├── en.js
│ │ │ │ ├── eo.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fo.js
│ │ │ │ ├── fr-ca.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── gu.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── ka.js
│ │ │ │ ├── km.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── ku.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── mn.js
│ │ │ │ ├── ms.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── no.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-br.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── si.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sq.js
│ │ │ │ ├── sr-latn.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── tt.js
│ │ │ │ ├── ug.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-cn.js
│ │ │ │ └── zh.js
│ │ │ ├── plugins/
│ │ │ │ ├── a11yhelp/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── a11yhelp.js
│ │ │ │ │ └── lang/
│ │ │ │ │ ├── _translationstatus.txt
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fo.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── gu.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mk.js
│ │ │ │ │ ├── mn.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ ├── about/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── about.js
│ │ │ │ ├── clipboard/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── paste.js
│ │ │ │ ├── dialog/
│ │ │ │ │ └── dialogDefinition.js
│ │ │ │ ├── image/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── image.js
│ │ │ │ ├── link/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── anchor.js
│ │ │ │ │ └── link.js
│ │ │ │ ├── pastefromword/
│ │ │ │ │ └── filter/
│ │ │ │ │ └── default.js
│ │ │ │ ├── print/
│ │ │ │ │ ├── lang/
│ │ │ │ │ │ ├── af.js
│ │ │ │ │ │ ├── ar.js
│ │ │ │ │ │ ├── bg.js
│ │ │ │ │ │ ├── bn.js
│ │ │ │ │ │ ├── bs.js
│ │ │ │ │ │ ├── ca.js
│ │ │ │ │ │ ├── cs.js
│ │ │ │ │ │ ├── cy.js
│ │ │ │ │ │ ├── da.js
│ │ │ │ │ │ ├── de-ch.js
│ │ │ │ │ │ ├── de.js
│ │ │ │ │ │ ├── el.js
│ │ │ │ │ │ ├── en-au.js
│ │ │ │ │ │ ├── en-ca.js
│ │ │ │ │ │ ├── en-gb.js
│ │ │ │ │ │ ├── en.js
│ │ │ │ │ │ ├── eo.js
│ │ │ │ │ │ ├── es.js
│ │ │ │ │ │ ├── et.js
│ │ │ │ │ │ ├── eu.js
│ │ │ │ │ │ ├── fa.js
│ │ │ │ │ │ ├── fi.js
│ │ │ │ │ │ ├── fo.js
│ │ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ │ ├── fr.js
│ │ │ │ │ │ ├── gl.js
│ │ │ │ │ │ ├── gu.js
│ │ │ │ │ │ ├── he.js
│ │ │ │ │ │ ├── hi.js
│ │ │ │ │ │ ├── hr.js
│ │ │ │ │ │ ├── hu.js
│ │ │ │ │ │ ├── id.js
│ │ │ │ │ │ ├── is.js
│ │ │ │ │ │ ├── it.js
│ │ │ │ │ │ ├── ja.js
│ │ │ │ │ │ ├── ka.js
│ │ │ │ │ │ ├── km.js
│ │ │ │ │ │ ├── ko.js
│ │ │ │ │ │ ├── ku.js
│ │ │ │ │ │ ├── lt.js
│ │ │ │ │ │ ├── lv.js
│ │ │ │ │ │ ├── mk.js
│ │ │ │ │ │ ├── mn.js
│ │ │ │ │ │ ├── ms.js
│ │ │ │ │ │ ├── nb.js
│ │ │ │ │ │ ├── nl.js
│ │ │ │ │ │ ├── no.js
│ │ │ │ │ │ ├── oc.js
│ │ │ │ │ │ ├── pl.js
│ │ │ │ │ │ ├── pt-br.js
│ │ │ │ │ │ ├── pt.js
│ │ │ │ │ │ ├── ro.js
│ │ │ │ │ │ ├── ru.js
│ │ │ │ │ │ ├── si.js
│ │ │ │ │ │ ├── sk.js
│ │ │ │ │ │ ├── sl.js
│ │ │ │ │ │ ├── sq.js
│ │ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ │ ├── sr.js
│ │ │ │ │ │ ├── sv.js
│ │ │ │ │ │ ├── th.js
│ │ │ │ │ │ ├── tr.js
│ │ │ │ │ │ ├── tt.js
│ │ │ │ │ │ ├── ug.js
│ │ │ │ │ │ ├── uk.js
│ │ │ │ │ │ ├── vi.js
│ │ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ │ └── zh.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── scayt/
│ │ │ │ │ ├── CHANGELOG.md
│ │ │ │ │ ├── LICENSE.md
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── options.js
│ │ │ │ │ └── toolbar.css
│ │ │ │ ├── specialchar/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── lang/
│ │ │ │ │ │ ├── _translationstatus.txt
│ │ │ │ │ │ ├── af.js
│ │ │ │ │ │ ├── ar.js
│ │ │ │ │ │ ├── bg.js
│ │ │ │ │ │ ├── ca.js
│ │ │ │ │ │ ├── cs.js
│ │ │ │ │ │ ├── cy.js
│ │ │ │ │ │ ├── da.js
│ │ │ │ │ │ ├── de-ch.js
│ │ │ │ │ │ ├── de.js
│ │ │ │ │ │ ├── el.js
│ │ │ │ │ │ ├── en-gb.js
│ │ │ │ │ │ ├── en.js
│ │ │ │ │ │ ├── eo.js
│ │ │ │ │ │ ├── es.js
│ │ │ │ │ │ ├── et.js
│ │ │ │ │ │ ├── eu.js
│ │ │ │ │ │ ├── fa.js
│ │ │ │ │ │ ├── fi.js
│ │ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ │ ├── fr.js
│ │ │ │ │ │ ├── gl.js
│ │ │ │ │ │ ├── he.js
│ │ │ │ │ │ ├── hr.js
│ │ │ │ │ │ ├── hu.js
│ │ │ │ │ │ ├── id.js
│ │ │ │ │ │ ├── it.js
│ │ │ │ │ │ ├── ja.js
│ │ │ │ │ │ ├── km.js
│ │ │ │ │ │ ├── ko.js
│ │ │ │ │ │ ├── ku.js
│ │ │ │ │ │ ├── lt.js
│ │ │ │ │ │ ├── lv.js
│ │ │ │ │ │ ├── nb.js
│ │ │ │ │ │ ├── nl.js
│ │ │ │ │ │ ├── no.js
│ │ │ │ │ │ ├── pl.js
│ │ │ │ │ │ ├── pt-br.js
│ │ │ │ │ │ ├── pt.js
│ │ │ │ │ │ ├── ru.js
│ │ │ │ │ │ ├── si.js
│ │ │ │ │ │ ├── sk.js
│ │ │ │ │ │ ├── sl.js
│ │ │ │ │ │ ├── sq.js
│ │ │ │ │ │ ├── sv.js
│ │ │ │ │ │ ├── th.js
│ │ │ │ │ │ ├── tr.js
│ │ │ │ │ │ ├── tt.js
│ │ │ │ │ │ ├── ug.js
│ │ │ │ │ │ ├── uk.js
│ │ │ │ │ │ ├── vi.js
│ │ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ │ └── zh.js
│ │ │ │ │ └── specialchar.js
│ │ │ │ ├── table/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── table.js
│ │ │ │ ├── tabletools/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── tableCell.js
│ │ │ │ └── wsc/
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ └── dialogs/
│ │ │ │ ├── ciframe.html
│ │ │ │ ├── tmpFrameset.html
│ │ │ │ ├── wsc.css
│ │ │ │ ├── wsc.js
│ │ │ │ └── wsc_ie.js
│ │ │ ├── samples/
│ │ │ │ ├── css/
│ │ │ │ │ └── samples.css
│ │ │ │ ├── index.html
│ │ │ │ ├── js/
│ │ │ │ │ ├── sample.js
│ │ │ │ │ └── sf.js
│ │ │ │ ├── old/
│ │ │ │ │ ├── ajax.html
│ │ │ │ │ ├── api.html
│ │ │ │ │ ├── appendto.html
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ ├── outputxhtml/
│ │ │ │ │ │ │ └── outputxhtml.css
│ │ │ │ │ │ ├── posteddata.php
│ │ │ │ │ │ └── uilanguages/
│ │ │ │ │ │ └── languages.js
│ │ │ │ │ ├── datafiltering.html
│ │ │ │ │ ├── dialog/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── my_dialog.js
│ │ │ │ │ │ └── dialog.html
│ │ │ │ │ ├── divreplace.html
│ │ │ │ │ ├── enterkey/
│ │ │ │ │ │ └── enterkey.html
│ │ │ │ │ ├── htmlwriter/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── outputforflash/
│ │ │ │ │ │ │ ├── outputforflash.fla
│ │ │ │ │ │ │ ├── outputforflash.swf
│ │ │ │ │ │ │ └── swfobject.js
│ │ │ │ │ │ ├── outputforflash.html
│ │ │ │ │ │ └── outputhtml.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── inlineall.html
│ │ │ │ │ ├── inlinebycode.html
│ │ │ │ │ ├── inlinetextarea.html
│ │ │ │ │ ├── jquery.html
│ │ │ │ │ ├── magicline/
│ │ │ │ │ │ └── magicline.html
│ │ │ │ │ ├── readonly.html
│ │ │ │ │ ├── replacebyclass.html
│ │ │ │ │ ├── replacebycode.html
│ │ │ │ │ ├── sample.css
│ │ │ │ │ ├── sample.js
│ │ │ │ │ ├── sample_posteddata.php
│ │ │ │ │ ├── tabindex.html
│ │ │ │ │ ├── toolbar/
│ │ │ │ │ │ └── toolbar.html
│ │ │ │ │ ├── uicolor.html
│ │ │ │ │ ├── uilanguages.html
│ │ │ │ │ ├── wysiwygarea/
│ │ │ │ │ │ └── fullpage.html
│ │ │ │ │ └── xhtmlstyle.html
│ │ │ │ └── toolbarconfigurator/
│ │ │ │ ├── css/
│ │ │ │ │ └── fontello.css
│ │ │ │ ├── font/
│ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ └── config.json
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ ├── abstracttoolbarmodifier.js
│ │ │ │ ├── fulltoolbareditor.js
│ │ │ │ ├── toolbarmodifier.js
│ │ │ │ └── toolbartextmodifier.js
│ │ │ ├── skins/
│ │ │ │ └── moono/
│ │ │ │ ├── dialog.css
│ │ │ │ ├── dialog_ie.css
│ │ │ │ ├── dialog_ie7.css
│ │ │ │ ├── dialog_ie8.css
│ │ │ │ ├── dialog_iequirks.css
│ │ │ │ ├── editor.css
│ │ │ │ ├── editor_gecko.css
│ │ │ │ ├── editor_ie.css
│ │ │ │ ├── editor_ie7.css
│ │ │ │ ├── editor_ie8.css
│ │ │ │ ├── editor_iequirks.css
│ │ │ │ └── readme.md
│ │ │ └── styles.js
│ │ ├── client_api.js
│ │ ├── compat.js
│ │ ├── ctx_menu.js
│ │ ├── custom_project.js
│ │ ├── date_util.js
│ │ ├── dg_table.js
│ │ ├── dg_table_action.js
│ │ ├── dg_table_editors.js
│ │ ├── dynamic_css.js
│ │ ├── effects.js
│ │ ├── environment.js
│ │ ├── events.js
│ │ ├── font-awesome-5.12.0/
│ │ │ ├── LICENSE.txt
│ │ │ ├── css/
│ │ │ │ ├── all.css
│ │ │ │ ├── brands.css
│ │ │ │ ├── fontawesome.css
│ │ │ │ ├── regular.css
│ │ │ │ ├── solid.css
│ │ │ │ ├── svg-with-js.css
│ │ │ │ └── v4-shims.css
│ │ │ ├── js/
│ │ │ │ ├── all.js
│ │ │ │ ├── brands.js
│ │ │ │ ├── conflict-detection.js
│ │ │ │ ├── fontawesome.js
│ │ │ │ ├── regular.js
│ │ │ │ ├── solid.js
│ │ │ │ └── v4-shims.js
│ │ │ ├── less/
│ │ │ │ ├── _animated.less
│ │ │ │ ├── _bordered-pulled.less
│ │ │ │ ├── _core.less
│ │ │ │ ├── _fixed-width.less
│ │ │ │ ├── _icons.less
│ │ │ │ ├── _larger.less
│ │ │ │ ├── _list.less
│ │ │ │ ├── _mixins.less
│ │ │ │ ├── _rotated-flipped.less
│ │ │ │ ├── _screen-reader.less
│ │ │ │ ├── _shims.less
│ │ │ │ ├── _stacked.less
│ │ │ │ ├── _variables.less
│ │ │ │ ├── brands.less
│ │ │ │ ├── fontawesome.less
│ │ │ │ ├── regular.less
│ │ │ │ ├── solid.less
│ │ │ │ └── v4-shims.less
│ │ │ ├── metadata/
│ │ │ │ ├── categories.yml
│ │ │ │ ├── icons.json
│ │ │ │ ├── icons.yml
│ │ │ │ ├── shims.json
│ │ │ │ ├── shims.yml
│ │ │ │ └── sponsors.yml
│ │ │ └── scss/
│ │ │ ├── _animated.scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _screen-reader.scss
│ │ │ ├── _shims.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ ├── brands.scss
│ │ │ ├── fontawesome.scss
│ │ │ ├── regular.scss
│ │ │ ├── solid.scss
│ │ │ └── v4-shims.scss
│ │ ├── fx_anim.js
│ │ ├── gantt.js
│ │ ├── html2canvas.js
│ │ ├── jquery.js
│ │ ├── js_logger.js
│ │ ├── json2.js
│ │ ├── keyboard.js
│ │ ├── mooDialog/
│ │ │ ├── MooDialog.Extra.js
│ │ │ ├── MooDialog.js
│ │ │ ├── Overlay.js
│ │ │ └── css/
│ │ │ └── MooDialog.css
│ │ ├── mooRainbow/
│ │ │ ├── Assets/
│ │ │ │ └── mooRainbow.css
│ │ │ └── Source/
│ │ │ └── mooRainbow.js
│ │ ├── mooScrollable/
│ │ │ ├── Scrollable.css
│ │ │ └── Scrollable.js
│ │ ├── mootools/
│ │ │ ├── MooTools-Core-1.6.0.js
│ │ │ ├── MooTools-More-1.6.0.js
│ │ │ ├── MooTools-Readme-1.6.0.txt
│ │ │ ├── mootools-1.2.5-core-nc.js
│ │ │ ├── mootools-1.2.5.1-more.js
│ │ │ ├── mootools-core-1.4.1-full-nocompat-yc.js
│ │ │ ├── mootools-core-1.4.1-full-nocompat.js
│ │ │ ├── mootools-more-1.4.0.1-yc.js
│ │ │ └── mootools-more-1.4.0.1.js
│ │ ├── mouse.js
│ │ ├── page_utility_widgets.js
│ │ ├── panel.js
│ │ ├── require.js
│ │ ├── rrule/
│ │ │ ├── nlp.js
│ │ │ └── rrule.js
│ │ ├── smart_menu.js
│ │ ├── spt_init.js
│ │ ├── spt_onload_startup.js
│ │ ├── tactic.js
│ │ ├── ui_playground.js
│ │ ├── upload.js
│ │ ├── utility.js
│ │ ├── validation.js
│ │ ├── video/
│ │ │ ├── video-js.css
│ │ │ ├── video.dev.js
│ │ │ └── video.js
│ │ └── xmlrpc.js
│ ├── style/
│ │ └── layout.css
│ ├── test/
│ │ └── index.html
│ └── utility/
│ ├── print_custom_page.html
│ ├── print_table_items.html
│ └── templates/
│ └── print_custom_page_TEMPLATE_body_contents.html
├── contrib/
│ ├── README.txt
│ ├── script/
│ │ ├── quicktime_sequence_script/
│ │ │ └── quicktime_sequence_script.txt
│ │ └── web_snapshot_download_script/
│ │ └── web_snapshot_download_script.txt
│ └── widget/
│ ├── add_snapshot_to_bin_wdg/
│ │ ├── add_snapshot_to_bin_btn.txt
│ │ └── add_snapshot_to_bin_wdg.txt
│ ├── adobe_photoshop_popup_wdg/
│ │ ├── adobe_photoshop_button.txt
│ │ └── adobe_photoshop_wdg.txt
│ ├── completion_expression_wdg/
│ │ ├── README.txt
│ │ ├── completion_expression_wdg.txt
│ │ └── example_element_definition.txt
│ ├── nuke_popup_wdg/
│ │ ├── README.txt
│ │ ├── init.py
│ │ ├── nuke_wdg_button.txt
│ │ ├── nuke_wdg_panel.txt
│ │ └── tactic_nuke_server.py
│ └── work_hours_insert_wdg/
│ ├── README.txt
│ ├── work_hours_insert_button.txt
│ └── work_hours_insert_wdg.txt
├── install/
│ ├── apache/
│ │ ├── load_balance.py
│ │ ├── tactic.conf
│ │ └── tactic_win32.conf
│ ├── backup/
│ │ ├── database_backup.py
│ │ └── tactic_backup.py
│ ├── config/
│ │ ├── standalone_linux-conf.xml
│ │ └── standalone_win32-conf.xml
│ ├── data/
│ │ ├── __init__.py
│ │ └── tactic_paths.py
│ ├── install.py
│ ├── postgresql/
│ │ └── pg_hba.conf
│ ├── rpm/
│ │ ├── prepare.py
│ │ ├── tactic-4.7.spec
│ │ └── tactic-4.9.spec
│ ├── service/
│ │ ├── tactic
│ │ ├── tactic.service
│ │ ├── tactic_python2
│ │ └── win32_service.py
│ ├── start/
│ │ └── config/
│ │ └── tactic-license.xml
│ └── template/
│ ├── config/
│ │ ├── load_balance.txt
│ │ ├── tactic-license.xml
│ │ ├── tactic_linux-conf.xml
│ │ ├── tactic_linux-conf_python3.xml
│ │ └── tactic_win32-conf.xml
│ └── sites/
│ ├── __init__.py
│ └── example/
│ ├── __init__.py
│ ├── context/
│ │ ├── Index.py
│ │ ├── Sthpw.py
│ │ └── __init__.py
│ └── modules/
│ ├── __init__.py
│ ├── base_index_wdg.py
│ ├── header_wdg.py
│ ├── main_tab_wdg.py
│ └── site_page.py
├── plugins/
│ ├── TACTIC/
│ │ ├── default_theme/
│ │ │ ├── config/
│ │ │ │ ├── config_url.spt
│ │ │ │ └── config_widget_config.spt
│ │ │ └── manifest.xml
│ │ ├── empty_theme/
│ │ │ ├── config/
│ │ │ │ ├── config_url.spt
│ │ │ │ └── config_widget_config.spt
│ │ │ └── manifest.xml
│ │ ├── internal/
│ │ │ ├── sample3d/
│ │ │ │ ├── manifest.xml
│ │ │ │ ├── prod_asset.spt
│ │ │ │ ├── prod_sequence.spt
│ │ │ │ ├── prod_shot.spt
│ │ │ │ └── sthpw_schema.spt
│ │ │ └── unittest/
│ │ │ ├── config_custom_script.spt
│ │ │ ├── manifest.xml
│ │ │ ├── unittest_car.spt
│ │ │ ├── unittest_city.spt
│ │ │ ├── unittest_country.spt
│ │ │ ├── unittest_no_id.spt
│ │ │ ├── unittest_person.spt
│ │ │ └── unittest_person_in_car.spt
│ │ ├── scrum/
│ │ │ ├── config/
│ │ │ │ ├── config_custom_script.spt
│ │ │ │ ├── config_trigger.spt
│ │ │ │ ├── config_url.spt
│ │ │ │ ├── config_widget_config.spt
│ │ │ │ ├── manifest.xml
│ │ │ │ ├── sthpw_pipeline.spt
│ │ │ │ ├── sthpw_project_type.spt
│ │ │ │ └── sthpw_schema.spt
│ │ │ ├── manifest.xml
│ │ │ └── stypes/
│ │ │ ├── manifest.xml
│ │ │ ├── scrum_feature.spt
│ │ │ ├── scrum_plan.spt
│ │ │ ├── scrum_plan_item.spt
│ │ │ ├── scrum_product.spt
│ │ │ ├── scrum_product_version.spt
│ │ │ ├── scrum_release_note.spt
│ │ │ ├── scrum_sprint.spt
│ │ │ ├── scrum_ticket.spt
│ │ │ ├── scrum_ticket_log.spt
│ │ │ └── scrum_ticket_status.spt
│ │ ├── themes/
│ │ │ ├── sample01_theme/
│ │ │ │ ├── config/
│ │ │ │ │ ├── config_url.spt
│ │ │ │ │ └── widget_config.spt
│ │ │ │ └── manifest.xml
│ │ │ └── sample02_theme/
│ │ │ ├── config/
│ │ │ │ ├── config_url.spt
│ │ │ │ └── widget_config.spt
│ │ │ └── manifest.xml
│ │ └── vfx/
│ │ ├── __init__.py
│ │ ├── config/
│ │ │ ├── config_custom_script.spt
│ │ │ ├── config_naming.spt
│ │ │ ├── config_process.spt
│ │ │ ├── config_prod_setting.spt
│ │ │ ├── config_sidebar.spt
│ │ │ ├── config_trigger.spt
│ │ │ ├── config_url.spt
│ │ │ ├── config_view/
│ │ │ │ ├── add_snapshot_to_review_wdg.spt
│ │ │ │ ├── sequence_planner_wdg.spt
│ │ │ │ ├── shot_planner_wdg.spt
│ │ │ │ ├── shot_sheet_wdg.spt
│ │ │ │ ├── single_shot_planner_wdg.spt
│ │ │ │ └── vfx/
│ │ │ │ ├── art_reference/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── asset/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── dashboard/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── episode/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── leica/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── script/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── sequence/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── shot/
│ │ │ │ │ └── main.spt
│ │ │ │ └── storyboard/
│ │ │ │ └── main.spt
│ │ │ ├── config_widget.spt
│ │ │ ├── manifest.xml
│ │ │ ├── sthpw_pipeline.spt
│ │ │ └── sthpw_schema.spt
│ │ ├── lib/
│ │ │ ├── __init__.py
│ │ │ └── index_wdg.py
│ │ ├── manifest.xml
│ │ └── stypes/
│ │ ├── manifest.xml
│ │ ├── prod_session_contents.spt
│ │ ├── vfx_art_reference.spt
│ │ ├── vfx_asset.spt
│ │ ├── vfx_asset_category.spt
│ │ ├── vfx_asset_in_episode.spt
│ │ ├── vfx_asset_in_sequence.spt
│ │ ├── vfx_asset_in_shot.spt
│ │ ├── vfx_asset_type.spt
│ │ ├── vfx_camera.spt
│ │ ├── vfx_episode.spt
│ │ ├── vfx_layer.spt
│ │ ├── vfx_leica.spt
│ │ ├── vfx_naming.spt
│ │ ├── vfx_node_data.spt
│ │ ├── vfx_plate.spt
│ │ ├── vfx_render.spt
│ │ ├── vfx_review.spt
│ │ ├── vfx_schedule.spt
│ │ ├── vfx_script.spt
│ │ ├── vfx_sequence.spt
│ │ ├── vfx_shot.spt
│ │ ├── vfx_shot_texture.spt
│ │ ├── vfx_storyboard.spt
│ │ ├── vfx_submission.spt
│ │ └── vfx_texture.spt
│ └── __init__.py
├── pyasm/
│ ├── __init__.py
│ ├── application/
│ │ ├── __init__.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── app_environment.py
│ │ │ ├── application.py
│ │ │ ├── base_app_info.py
│ │ │ ├── client_trigger.py
│ │ │ ├── dependency.py
│ │ │ ├── interpreter/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── callback.py
│ │ │ │ ├── examples.py
│ │ │ │ ├── handler.py
│ │ │ │ ├── interpreter.py
│ │ │ │ └── tactic_client_lib/
│ │ │ │ ├── VERSION
│ │ │ │ ├── VERSION_API
│ │ │ │ ├── __init__.py
│ │ │ │ └── tactic_server_stub.py
│ │ │ ├── node_data.py
│ │ │ ├── session_builder.py
│ │ │ └── upload_multipart.py
│ │ ├── flash/
│ │ │ ├── __init__.py
│ │ │ ├── flash.py
│ │ │ ├── flash_builder.py
│ │ │ ├── flash_environment.py
│ │ │ ├── flash_info.py
│ │ │ └── flash_test.py
│ │ ├── houdini/
│ │ │ ├── __init__.py
│ │ │ ├── houdini.py
│ │ │ ├── houdini9.py
│ │ │ ├── houdini_builder.py
│ │ │ ├── houdini_environment.py
│ │ │ ├── houdini_impl.py
│ │ │ ├── houdini_socket.py
│ │ │ └── houdini_test.py
│ │ ├── maya/
│ │ │ ├── __init__.py
│ │ │ ├── maya_anim_file.py
│ │ │ ├── maya_app.py
│ │ │ ├── maya_builder.py
│ │ │ ├── maya_builder_exec.py
│ │ │ ├── maya_environment.py
│ │ │ ├── maya_impl.py
│ │ │ ├── maya_introspect.py
│ │ │ ├── maya_parser.py
│ │ │ ├── maya_parser_test.py
│ │ │ └── maya_test.py
│ │ ├── perforce/
│ │ │ ├── __init__.py
│ │ │ └── perforce.py
│ │ └── xsi/
│ │ ├── __init__.py
│ │ ├── xsi.py
│ │ ├── xsi_builder.py
│ │ ├── xsi_environment.py
│ │ ├── xsi_impl.py
│ │ └── xsi_parser.py
│ ├── biz/
│ │ ├── __init__.py
│ │ ├── biz_test.py
│ │ ├── cache.py
│ │ ├── clipboard.py
│ │ ├── code_naming.py
│ │ ├── command_trigger.py
│ │ ├── csv_import.py
│ │ ├── custom_property.py
│ │ ├── custom_script.py
│ │ ├── debug_log.py
│ │ ├── dir_naming.py
│ │ ├── expression.py
│ │ ├── expression_test.py
│ │ ├── file.py
│ │ ├── file_naming.py
│ │ ├── file_test.py
│ │ ├── folder.py
│ │ ├── hierarchical_status_attr.py
│ │ ├── naming.py
│ │ ├── naming_test.py
│ │ ├── note.py
│ │ ├── notification.py
│ │ ├── notification_test.py
│ │ ├── pipeline.py
│ │ ├── pipeline_test.py
│ │ ├── plugin_util.py
│ │ ├── preference.py
│ │ ├── prod_setting.py
│ │ ├── project.py
│ │ ├── repo_handler.py
│ │ ├── schema.py
│ │ ├── schema_test.py
│ │ ├── simple_status_attr.py
│ │ ├── snapshot.py
│ │ ├── snapshot_test.py
│ │ ├── sobject_connection.py
│ │ ├── sobject_instance.py
│ │ ├── status.py
│ │ ├── status_attr.py
│ │ ├── subscription.py
│ │ ├── task.py
│ │ ├── template.py
│ │ ├── timezone_test.py
│ │ ├── translation.py
│ │ └── work_hour.py
│ ├── checkin/
│ │ ├── __init__.py
│ │ ├── checkin.py
│ │ ├── checkin_test.py
│ │ ├── exifread/
│ │ │ ├── __init__.py
│ │ │ ├── classes.py
│ │ │ ├── tags/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── exif.py
│ │ │ │ └── makernote.py
│ │ │ └── utils.py
│ │ ├── file_checkin.py
│ │ ├── iptcinfo.py
│ │ ├── metadata.py
│ │ ├── repo.py
│ │ ├── snapshot_builder.py
│ │ ├── snapshot_builder_test.py
│ │ ├── snapshot_checkin.py
│ │ └── sync_snapshots.py
│ ├── command/
│ │ ├── __init__.py
│ │ ├── add_user_to_group_cmd.py
│ │ ├── command.py
│ │ ├── command_test.py
│ │ ├── csv_export_cmd.py
│ │ ├── csv_import_cmd.py
│ │ ├── database_cmd.py
│ │ ├── dataflow_test.py
│ │ ├── delete_cmd.py
│ │ ├── edit_cmd.py
│ │ ├── edit_wdg_action.py
│ │ ├── email_handler.py
│ │ ├── email_trigger.py
│ │ ├── file_upload.py
│ │ ├── kronos.py
│ │ ├── pickup_trigger.py
│ │ ├── remote_command.py
│ │ ├── scheduler.py
│ │ ├── sign_out_cmd.py
│ │ ├── site_upgrade.py
│ │ ├── status_trigger.py
│ │ ├── subprocess_trigger.py
│ │ ├── trigger.py
│ │ ├── undo_cmd.py
│ │ ├── widget_settings_cmd.py
│ │ ├── workflow.py
│ │ └── workflow_test.py
│ ├── common/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── common.py
│ │ ├── common_exception.py
│ │ ├── common_test.py
│ │ ├── config.py
│ │ ├── config_test.py
│ │ ├── container.py
│ │ ├── date.py
│ │ ├── directory.py
│ │ ├── encrypt_util.py
│ │ ├── environment.py
│ │ ├── format_value.py
│ │ ├── js_wrapper.py
│ │ ├── lxml_wrapper.py
│ │ ├── spt_date.py
│ │ ├── spt_date_test.py
│ │ ├── system.py
│ │ ├── system_test.py
│ │ ├── test.xml
│ │ ├── timecode.py
│ │ ├── watch_folder.py
│ │ ├── xml_test.py
│ │ ├── xml_wrapper.py
│ │ └── zip_util.py
│ ├── config/
│ │ ├── standalone_linux-conf.xml
│ │ └── standalone_win32-conf.xml
│ ├── prod/
│ │ ├── __init__.py
│ │ ├── biz/
│ │ │ ├── __init__.py
│ │ │ ├── asset.py
│ │ │ ├── biz_test.py
│ │ │ ├── episode.py
│ │ │ ├── naming.py
│ │ │ ├── prod_app_naming.py
│ │ │ ├── prod_dir_naming.py
│ │ │ ├── prod_file_naming.py
│ │ │ ├── prod_setting.py
│ │ │ ├── prod_task_filter.py
│ │ │ ├── render.py
│ │ │ ├── sequence.py
│ │ │ ├── session.py
│ │ │ ├── shot.py
│ │ │ ├── shot_test.py
│ │ │ ├── submission.py
│ │ │ └── texture.py
│ │ ├── checkin/
│ │ │ ├── __init__.py
│ │ │ ├── comp_checkin.py
│ │ │ ├── comp_test.py
│ │ │ ├── maya_checkin.py
│ │ │ ├── maya_checkin_test.py
│ │ │ ├── publisher.py
│ │ │ ├── submission_checkin.py
│ │ │ └── test/
│ │ │ ├── fusion_sample.comp
│ │ │ └── shake_sample.shk
│ │ ├── command/
│ │ │ ├── __init__.py
│ │ │ ├── code_update.py
│ │ │ ├── snapshot_action.py
│ │ │ └── task_create_action.py
│ │ ├── load/
│ │ │ ├── __init__.py
│ │ │ ├── loader.py
│ │ │ ├── loader_context.py
│ │ │ └── loader_test.py
│ │ ├── prod_test.py
│ │ ├── queue/
│ │ │ ├── __init__.py
│ │ │ ├── linux_service
│ │ │ ├── queue.py
│ │ │ ├── queue_index.py
│ │ │ ├── queue_wdg.py
│ │ │ ├── slave_startup.py
│ │ │ └── win32_service.py
│ │ ├── render/
│ │ │ ├── __init__.py
│ │ │ ├── qube_render_submit.py
│ │ │ ├── render_cmd.py
│ │ │ ├── render_cmd_builder.py
│ │ │ ├── render_context.py
│ │ │ └── render_package.py
│ │ ├── service/
│ │ │ ├── __init__.py
│ │ │ ├── api_xmlrpc.py
│ │ │ ├── api_xmlrpc_test.py
│ │ │ ├── base_sthpw_wdg.py
│ │ │ ├── base_xmlrpc.py
│ │ │ ├── tactic_remote.py
│ │ │ └── tactic_slave.py
│ │ ├── site/
│ │ │ ├── __init__.py
│ │ │ ├── admin_tab_wdg.py
│ │ │ ├── asset_tab_wdg.py
│ │ │ ├── client_tab_wdg.py
│ │ │ ├── concept_tab_wdg.py
│ │ │ ├── custom_project_tab_wdg.py
│ │ │ ├── editorial_tab_wdg.py
│ │ │ ├── main_tab_wdg.py
│ │ │ ├── maya_tab_wdg.py
│ │ │ ├── my_tactic_tab_wdg.py
│ │ │ ├── overview_tab_wdg.py
│ │ │ ├── preprod_tab_wdg.py
│ │ │ ├── setup_tab_wdg.py
│ │ │ ├── shot_tab_wdg.py
│ │ │ └── texture_tab_wdg.py
│ │ └── web/
│ │ ├── __init__.py
│ │ ├── app_load_wdg.py
│ │ ├── approval_manager_wdg.py
│ │ ├── artist_view_wdg.py
│ │ ├── asset_data_wdg.py
│ │ ├── asset_detail_wdg.py
│ │ ├── asset_filter_wdg.py
│ │ ├── asset_history_wdg.py
│ │ ├── asset_info_wdg.py
│ │ ├── asset_library_wdg.py
│ │ ├── asset_loader_wdg.py
│ │ ├── asset_task_creator_wdg.py
│ │ ├── camera_info_wdg.py
│ │ ├── composite_wdg.py
│ │ ├── csv_import_wdg.py
│ │ ├── frame_info_wdg.py
│ │ ├── layout_summary_wdg.py
│ │ ├── maya_set_wdg.py
│ │ ├── prod_checkin_cbk.py
│ │ ├── prod_checkin_wdg.py
│ │ ├── prod_context.py
│ │ ├── prod_input_wdg.py
│ │ ├── prod_setup_wdg.py
│ │ ├── prod_table_element_wdg.py
│ │ ├── prod_wdg.py
│ │ ├── publish_log_wdg.py
│ │ ├── render_wdg.py
│ │ ├── shot_instance_adder_wdg.py
│ │ ├── shot_navigator_wdg.py
│ │ ├── sobject_checkin_wdg.py
│ │ ├── sobject_planner_wdg.py
│ │ ├── sobject_task_wdg.py
│ │ ├── sobject_upload_wdg.py
│ │ ├── statistics_wdg.py
│ │ ├── submission_wdg.py
│ │ ├── task_manager_wdg.py
│ │ ├── texture_wdg.py
│ │ └── version_wdg.py
│ ├── requirements.txt
│ ├── search/
│ │ ├── __init__.py
│ │ ├── cache.py
│ │ ├── database_impl.py
│ │ ├── database_test.py
│ │ ├── db_introspect.py
│ │ ├── exception_log.py
│ │ ├── mongodb.py
│ │ ├── mongodb_test.py
│ │ ├── relationship_test.py
│ │ ├── search.py
│ │ ├── search_template_test.py
│ │ ├── search_test.py
│ │ ├── sobject_config.py
│ │ ├── sobject_default_config.py
│ │ ├── sobject_log.py
│ │ ├── sobject_mapping.py
│ │ ├── sql.py
│ │ ├── sql_dumper.py
│ │ ├── sql_test.py
│ │ ├── transaction.py
│ │ ├── transaction_log.py
│ │ ├── transaction_state.py
│ │ ├── transaction_test.py
│ │ ├── upgrade/
│ │ │ ├── __init__.py
│ │ │ ├── data/
│ │ │ │ ├── sthpw_access_rule.sql
│ │ │ │ ├── sthpw_notification.sql
│ │ │ │ ├── sthpw_pref_list.sql
│ │ │ │ ├── sthpw_project_type.sql
│ │ │ │ ├── sthpw_search_object.sql
│ │ │ │ └── sthpw_translation.sql
│ │ │ ├── data_dumper.py
│ │ │ ├── data_summary.py
│ │ │ ├── mysql/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ └── unittest_schema.sql
│ │ │ ├── oracle/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ └── unittest_schema.sql
│ │ │ ├── postgresql/
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ └── unittest_schema.sql
│ │ │ ├── project/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base_upgrade.py
│ │ │ │ ├── config_upgrade.py
│ │ │ │ ├── default_upgrade.py
│ │ │ │ ├── design_upgrade.py
│ │ │ │ ├── effects_upgrade.py
│ │ │ │ ├── game_upgrade.py
│ │ │ │ ├── prod_upgrade.py
│ │ │ │ ├── simple_upgrade.py
│ │ │ │ ├── sthpw_upgrade.py
│ │ │ │ └── unittest_upgrade.py
│ │ │ ├── schema/
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── config_schema_SQLServer.sql
│ │ │ │ ├── design_schema.sql
│ │ │ │ ├── effects_schema.sql
│ │ │ │ ├── game_schema.sql
│ │ │ │ ├── initial_sthpw_creation_SQLServer.sql
│ │ │ │ ├── prod_data.sql
│ │ │ │ ├── prod_schema.sql
│ │ │ │ ├── simple_schema.sql
│ │ │ │ ├── sthpw_data.sql
│ │ │ │ ├── sthpw_data_SQLServer.sql
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ ├── sthpw_schema_SQLServer.sql
│ │ │ │ ├── unittest_schema.sql
│ │ │ │ └── unittest_schema_SQLServer.sql
│ │ │ ├── schema_dumper.py
│ │ │ ├── sql_convert.py
│ │ │ ├── sql_parser.py
│ │ │ ├── sql_reporter.py
│ │ │ ├── sqlite/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── deprecated/
│ │ │ │ │ ├── flash_data.sql
│ │ │ │ │ └── prod_data.sql
│ │ │ │ ├── schema_dump_cmd.py
│ │ │ │ ├── simple_data.sql
│ │ │ │ ├── simple_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ ├── sthpw_data.sql
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ ├── unittest_schema.sql
│ │ │ │ ├── upgrade_convert.py
│ │ │ │ └── upgrade_output.txt
│ │ │ ├── sqlserver/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ └── sthpw_schema.sql
│ │ │ ├── summary.py
│ │ │ └── upgrade_db.py
│ │ └── widget_db_config.py
│ ├── security/
│ │ ├── __init__.py
│ │ ├── access_manager.py
│ │ ├── access_rule.py
│ │ ├── authenticate.py
│ │ ├── authenticate_test.py
│ │ ├── batch.py
│ │ ├── crypto_key.py
│ │ ├── drupal_password_hasher.py
│ │ ├── external_service.py
│ │ ├── external_service_test.py
│ │ ├── ldap_ad_authenticate.py
│ │ ├── security.py
│ │ ├── security_test.py
│ │ ├── tactic-license.xml
│ │ └── watermark.py
│ ├── unittest/
│ │ ├── __init__.py
│ │ ├── environment.py
│ │ ├── person.py
│ │ ├── schema.sql
│ │ ├── test_trigger.py
│ │ └── testsuite.py
│ ├── web/
│ │ ├── __init__.py
│ │ ├── app_server.py
│ │ ├── cache_startup.py
│ │ ├── callback.py
│ │ ├── cherrypy30_adapter.py
│ │ ├── cherrypy30_startup.py
│ │ ├── cherrypy_adapter.py
│ │ ├── cherrypy_startup.py
│ │ ├── command_delegator.py
│ │ ├── event_container.py
│ │ ├── html_wdg.py
│ │ ├── html_wdg_test.py
│ │ ├── mod_python_wrapper.py
│ │ ├── monitor.py
│ │ ├── palette.py
│ │ ├── simple_app_server.py
│ │ ├── test-conf.xml
│ │ ├── url_security.py
│ │ ├── web_app.py
│ │ ├── web_app_test.py
│ │ ├── web_container.py
│ │ ├── web_environment.py
│ │ ├── web_init.py
│ │ ├── web_login_cmd.py
│ │ ├── web_state.py
│ │ ├── web_tools.py
│ │ ├── webware_adapter.py
│ │ ├── widget.py
│ │ ├── widget_app_server.py
│ │ └── widget_test.py
│ └── widget/
│ ├── __init__.py
│ ├── annotate_wdg.py
│ ├── applet.py
│ ├── base_tab_wdg.py
│ ├── clipboard_wdg.py
│ ├── creator_wdg.py
│ ├── custom_info_wdg.py
│ ├── custom_view_app_wdg.py
│ ├── custom_view_wdg.py
│ ├── dependency_wdg.py
│ ├── discussion_wdg.py
│ ├── dynamic_loader_page.py
│ ├── error_wdg.py
│ ├── file_wdg.py
│ ├── filter_wdg.py
│ ├── folder_wdg.py
│ ├── gantt_wdg.py
│ ├── header_wdg.py
│ ├── icon_wdg.py
│ ├── input_wdg.py
│ ├── layout_wdg.py
│ ├── menu.py
│ ├── my_tactic_summary_wdg.py
│ ├── naming_wdg.py
│ ├── parallel_status.py
│ ├── project_wdg.py
│ ├── search_limit_wdg.py
│ ├── serial_status.py
│ ├── shadowbox_wdg.py
│ ├── sobject_browser_wdg.py
│ ├── sobject_group_wdg.py
│ ├── statistic_wdg.py
│ ├── tab_wdg.py
│ ├── table_element_wdg.py
│ ├── task_wdg.py
│ ├── timecard_wdg.py
│ ├── upload_server_page.py
│ ├── web_attr.py
│ ├── web_wdg.py
│ ├── widget_config.py
│ └── widget_config_test.py
├── tactic/
│ ├── __init__.py
│ ├── active_directory/
│ │ ├── AD_group_export.ldif
│ │ ├── AD_user_export.ldif
│ │ ├── __init__.py
│ │ ├── active_directory.py
│ │ ├── ad_authenticate.py
│ │ ├── ad_connect.py
│ │ ├── ad_get_user_info.py
│ │ ├── ad_lookup.py
│ │ ├── ad_search_wdg.py
│ │ └── ad_test.py
│ ├── command/
│ │ ├── __init__.py
│ │ ├── clipboard_cmd.py
│ │ ├── copy_config_cmd.py
│ │ ├── create_project_cmd.py
│ │ ├── global_search_trigger.py
│ │ ├── ingestion_cmd.py
│ │ ├── js_cmd.py
│ │ ├── kronos.py
│ │ ├── login_group_trigger.py
│ │ ├── naming_migrator_cmd.py
│ │ ├── notification_cmd.py
│ │ ├── package.py
│ │ ├── pipeline_task_trigger.py
│ │ ├── plugin.py
│ │ ├── project_template_cmd.py
│ │ ├── python_cmd.py
│ │ ├── queue.py
│ │ ├── rsync.py
│ │ ├── run_transaction_cmd.py
│ │ ├── scheduler.py
│ │ ├── sobject_copy_cmd.py
│ │ ├── watch_drop_folder.py
│ │ └── watch_handoff_folder.py
│ ├── protocol/
│ │ ├── __init__.py
│ │ ├── api_test.php
│ │ ├── api_test.py
│ │ ├── create_tactic_js.py
│ │ ├── graphql_handler.py
│ │ ├── python_rest_handler.py
│ │ ├── rest_handler.py
│ │ └── rest_test.py
│ ├── react/
│ │ ├── __init__.py
│ │ ├── chart.js
│ │ ├── chart.jsx
│ │ ├── common.js
│ │ ├── common.jsx
│ │ ├── config.js
│ │ ├── config.jsx
│ │ ├── config.py
│ │ ├── data_grid.js
│ │ ├── data_grid.jsx
│ │ ├── import_data.js
│ │ ├── import_data.jsx
│ │ ├── import_data.py
│ │ ├── pages.js
│ │ ├── pages.jsx
│ │ ├── react.py
│ │ ├── table_layout.js
│ │ ├── table_layout.jsx
│ │ ├── table_layout.py
│ │ └── widget/
│ │ ├── modal.js
│ │ ├── modal.jsx
│ │ ├── notes.js
│ │ ├── notes.jsx
│ │ └── notes.py
│ ├── startup/
│ │ ├── __init__.py
│ │ └── first_run_init.py
│ ├── tactic_paths.py
│ ├── triggers/
│ │ ├── __init__.py
│ │ ├── checkin_trigger.py
│ │ └── data_trigger.py
│ ├── ui/
│ │ ├── __init__.py
│ │ ├── activator/
│ │ │ ├── __init__.py
│ │ │ └── click_activate_menu_wdg.py
│ │ ├── app/
│ │ │ ├── __init__.py
│ │ │ ├── advanced_search.py
│ │ │ ├── aggregate_wdg.py
│ │ │ ├── analytics_wdg.py
│ │ │ ├── app_sobject_checkin_wdg.py
│ │ │ ├── custom_print_view_wdg.py
│ │ │ ├── custom_property_wdg.py
│ │ │ ├── db_resource_wdg.py
│ │ │ ├── diagnostics_wdg.py
│ │ │ ├── dynamic_update_wdg.py
│ │ │ ├── help_wdg.py
│ │ │ ├── js_includes.py
│ │ │ ├── license_manager_wdg.py
│ │ │ ├── message_wdg.py
│ │ │ ├── naming_migrator_wdg.py
│ │ │ ├── note_wdg.py
│ │ │ ├── notify_wdg.py
│ │ │ ├── page_header_wdg.py
│ │ │ ├── page_nav_container_wdg.py
│ │ │ ├── plugin_wdg.py
│ │ │ ├── project_start_wdg.py
│ │ │ ├── project_template_wdg.py
│ │ │ ├── project_wdg.py
│ │ │ ├── quick_box_wdg.py
│ │ │ ├── search_limit_wdg.py
│ │ │ ├── search_type_creator_wdg.py
│ │ │ ├── search_type_element_wdg.py
│ │ │ ├── search_wdg.py
│ │ │ ├── setup_manager_wdg.py
│ │ │ ├── shelf_wdg.py
│ │ │ ├── simple_search_wdg.py
│ │ │ ├── system_info_wdg.py
│ │ │ ├── tactic_branding_wdg.py
│ │ │ ├── task_wdg.py
│ │ │ ├── top_container_wdg.py
│ │ │ ├── top_wdg.py
│ │ │ ├── undo_log_wdg.py
│ │ │ ├── update_wdg.py
│ │ │ └── validation.py
│ │ ├── bootstrap_app/
│ │ │ ├── __init__.py
│ │ │ ├── bootstrap_index_wdg.py
│ │ │ └── bootstrap_tab_wdg.py
│ │ ├── cgapp/
│ │ │ ├── __init__.py
│ │ │ ├── app_init_wdg.py
│ │ │ ├── app_panel_wdg.py
│ │ │ ├── checkin_wdg.py
│ │ │ ├── connection_select_wdg.py
│ │ │ ├── introspect.py
│ │ │ ├── load_options_wdg.py
│ │ │ ├── loader_button_wdg.py
│ │ │ ├── loader_element_wdg.py
│ │ │ ├── loader_wdg.py
│ │ │ ├── publish_element_wdg.py
│ │ │ ├── session_wdg.py
│ │ │ ├── sobject_load_wdg.py
│ │ │ └── version_wdg.py
│ │ ├── chart/
│ │ │ ├── __init__.py
│ │ │ ├── bar_chart_wdg.py
│ │ │ ├── chart_builder_wdg.py
│ │ │ ├── chart_data.py
│ │ │ ├── chart_js_wdg.py
│ │ │ ├── chart_wdg.py
│ │ │ ├── chart_wdg_old.py
│ │ │ ├── sample_chart_wdg.py
│ │ │ └── sobject_chart_wdg.py
│ │ ├── checkin/
│ │ │ ├── __init__.py
│ │ │ ├── branch_wdg.py
│ │ │ ├── changelist_wdg.py
│ │ │ ├── checkin_dir_list_wdg.py
│ │ │ ├── file_properties_wdg.py
│ │ │ ├── sandbox_select_wdg.py
│ │ │ ├── scm_dir_list_wdg.py
│ │ │ ├── simple_checkin_wdg.py
│ │ │ ├── snapshot_files_wdg.py
│ │ │ └── workspace_wdg.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── base_config_wdg.py
│ │ │ ├── base_refresh_wdg.py
│ │ │ ├── base_table_element_wdg.py
│ │ │ ├── corner_generator.py
│ │ │ └── widget_class_handler.py
│ │ ├── config/
│ │ │ ├── DEFAULT-conf.xml
│ │ │ ├── admin-conf.xml
│ │ │ ├── asset-conf.xml
│ │ │ ├── bookmarks-conf.xml
│ │ │ ├── children-conf.xml
│ │ │ ├── dashboard-conf.xml
│ │ │ ├── flash-conf.xml
│ │ │ ├── prod-conf.xml
│ │ │ ├── reports-conf.xml
│ │ │ ├── sample-conf.xml
│ │ │ └── simple-conf.xml
│ │ ├── container/
│ │ │ ├── __init__.py
│ │ │ ├── arrow_wdg.py
│ │ │ ├── container_wdg.py
│ │ │ ├── content_wdg.py
│ │ │ ├── context_menu_wdg.py
│ │ │ ├── dialog_wdg.py
│ │ │ ├── dynamic_list_wdg.py
│ │ │ ├── menu_wdg.py
│ │ │ ├── panel_wdg.py
│ │ │ ├── pop_window_wdg.py
│ │ │ ├── popup_wdg.py
│ │ │ ├── resizable_table_wdg.py
│ │ │ ├── smart_menu_wdg.py
│ │ │ ├── tab_wdg.py
│ │ │ └── wizard_wdg.py
│ │ ├── examples/
│ │ │ ├── __init__.py
│ │ │ ├── base_example_wdg.py
│ │ │ ├── dev_sandbox_01_wdg.py
│ │ │ ├── dev_sandbox_02_wdg.py
│ │ │ ├── dev_sandbox_03_wdg.py
│ │ │ ├── efficient_table_example_wdg.py
│ │ │ ├── event_examples_wdg.py
│ │ │ ├── font_palettes_example_wdg.py
│ │ │ ├── fx_anim_examples_wdg.py
│ │ │ ├── keyboard_handler_examples_wdg.py
│ │ │ ├── menu_examples_wdg.py
│ │ │ ├── misc_examples_wdg.py
│ │ │ ├── panning_scroll_example_wdg.py
│ │ │ ├── search_class_tag_examples_wdg.py
│ │ │ └── ui_playground_panel_wdg.py
│ │ ├── filter/
│ │ │ ├── __init__.py
│ │ │ ├── filter_data.py
│ │ │ ├── filter_element_wdg.py
│ │ │ ├── filter_wdg.py
│ │ │ └── type_filter_element_wdg.py
│ │ ├── gantt/
│ │ │ ├── __init__.py
│ │ │ ├── gantt_item_wdg.py
│ │ │ ├── gantt_task_item_wdg.py
│ │ │ └── gantt_wdg.py
│ │ ├── input/
│ │ │ ├── __init__.py
│ │ │ ├── color_input_wdg.py
│ │ │ ├── custom_select_wdg.py
│ │ │ ├── html5_upload_wdg.py
│ │ │ ├── icon_select_wdg.py
│ │ │ ├── multitext_input_wdg.py
│ │ │ ├── navigator_wdg.py
│ │ │ ├── note_input_wdg.py
│ │ │ ├── pipeline_input_wdg.py
│ │ │ ├── process_context_wdg.py
│ │ │ ├── process_group_select_wdg.py
│ │ │ ├── search_type_input_wdg.py
│ │ │ ├── task_input_wdg.py
│ │ │ ├── text_input_wdg.py
│ │ │ └── textarea_input_wdg.py
│ │ ├── manager/
│ │ │ ├── __init__.py
│ │ │ ├── base_section_wdg.py
│ │ │ ├── element_definition_wdg.py
│ │ │ ├── format_definition_wdg.py
│ │ │ ├── view_manager_wdg.py
│ │ │ └── view_section_wdg.py
│ │ ├── panel/
│ │ │ ├── __init__.py
│ │ │ ├── action_wdg.py
│ │ │ ├── base_table_layout_wdg.py
│ │ │ ├── collection_wdg.py
│ │ │ ├── custom_layout_wdg.py
│ │ │ ├── custom_search_wdg.py
│ │ │ ├── document_wdg.py
│ │ │ ├── edit_cmd.py
│ │ │ ├── edit_layout_wdg.py
│ │ │ ├── edit_wdg.py
│ │ │ ├── element_definition_wdg.py
│ │ │ ├── freeform_layout_wdg.py
│ │ │ ├── hash_panel_wdg.py
│ │ │ ├── layout_util.py
│ │ │ ├── layout_wdg.py
│ │ │ ├── manage_view_panel_wdg.py
│ │ │ ├── mobile_wdg.py
│ │ │ ├── panel_wdg.py
│ │ │ ├── planner_layout_wdg.py
│ │ │ ├── print_layout_wdg.py
│ │ │ ├── schema_section_wdg.py
│ │ │ ├── search_type_manager_wdg.py
│ │ │ ├── search_type_panel_wdg.py
│ │ │ ├── security_manager_wdg.py
│ │ │ ├── simple_side_bar_wdg.py
│ │ │ ├── sobject_panel_wdg.py
│ │ │ ├── sql_panel_wdg.py
│ │ │ ├── static_table_layout_wdg.py
│ │ │ ├── swf_wdg.py
│ │ │ ├── table_layout_wdg.py
│ │ │ ├── test_custom_wdg.py
│ │ │ ├── test_dynamic_load_wdg.py
│ │ │ ├── tile_layout_wdg.py
│ │ │ ├── tool_layout_wdg.py
│ │ │ └── view_manager_wdg.py
│ │ ├── popups/
│ │ │ ├── __init__.py
│ │ │ ├── action_bar_wdg.py
│ │ │ ├── help_popup_wdg.py
│ │ │ └── transaction_popup_wdg.py
│ │ ├── report/
│ │ │ ├── __init__.py
│ │ │ ├── stype_report_wdg.py
│ │ │ ├── task_status_report_wdg.py
│ │ │ └── yearly_report_wdg.py
│ │ ├── startup/
│ │ │ ├── __init__.py
│ │ │ ├── client_wdg.py
│ │ │ ├── column_edit_wdg.py
│ │ │ ├── content_creator_wdg.py
│ │ │ ├── dashboards_wdg.py
│ │ │ ├── db_config_wdg.py
│ │ │ ├── home_wdg.py
│ │ │ ├── main_wdg.py
│ │ │ ├── misc_wdg.py
│ │ │ ├── pipeline_edit_wdg.py
│ │ │ ├── project_config_wdg.py
│ │ │ ├── reports_wdg.py
│ │ │ ├── security_wdg.py
│ │ │ ├── share_wdg.py
│ │ │ └── themes_wdg.py
│ │ ├── sync/
│ │ │ ├── __init__.py
│ │ │ ├── sync_filter.py
│ │ │ ├── sync_filter_test.py
│ │ │ ├── sync_import_wdg.py
│ │ │ ├── sync_security_wdg.py
│ │ │ ├── sync_settings_wdg.py
│ │ │ └── sync_utils.py
│ │ ├── table/
│ │ │ ├── __init__.py
│ │ │ ├── button_wdg.py
│ │ │ ├── custom_layout_element_wdg.py
│ │ │ ├── delete_element_wdg.py
│ │ │ ├── drop_element_wdg.py
│ │ │ ├── explorer_wdg.py
│ │ │ ├── expression_element_wdg.py
│ │ │ ├── foreign_key_element_wdg.py
│ │ │ ├── format_element_wdg.py
│ │ │ ├── gantt_element_wdg.py
│ │ │ ├── group_element_wdg.py
│ │ │ ├── hidden_row_element_wdg.py
│ │ │ ├── html_element_wdg.py
│ │ │ ├── json_element_wdg.py
│ │ │ ├── link_element_wdg.py
│ │ │ ├── metadata_element_wdg.py
│ │ │ ├── preference_wdg.py
│ │ │ ├── project_wdg.py
│ │ │ ├── projected_schedule_wdg.py
│ │ │ ├── python_element_wdg.py
│ │ │ ├── related_element_wdg.py
│ │ │ ├── snapshot_element_wdg.py
│ │ │ ├── sobject_detail_wdg.py
│ │ │ ├── sobject_summary_wdg.py
│ │ │ ├── spreadsheet_element_wdg.py
│ │ │ ├── statistic_wdg.py
│ │ │ ├── subcontext_wdg.py
│ │ │ ├── table_element_wdg.py
│ │ │ ├── task_element_wdg.js
│ │ │ ├── task_element_wdg.py
│ │ │ └── work_hours_element_wdg.py
│ │ ├── tools/
│ │ │ ├── __init__.py
│ │ │ ├── checkout_wdg.py
│ │ │ ├── custom_layout_edit_wdg.py
│ │ │ ├── db_register_wdg.py
│ │ │ ├── delete_wdg.py
│ │ │ ├── dependency_wdg.py
│ │ │ ├── doc_tool_wdg.py
│ │ │ ├── file_detail_wdg.py
│ │ │ ├── freeform_layout_wdg.py
│ │ │ ├── ingest_wdg.py
│ │ │ ├── ingestion_wdg.py
│ │ │ ├── jsx_processor.py
│ │ │ ├── mail_templates.py
│ │ │ ├── pipeline_canvas_wdg.py
│ │ │ ├── pipeline_wdg.py
│ │ │ ├── repo_browser_wdg.py
│ │ │ ├── review_wdg.py
│ │ │ ├── schedule_wdg.py
│ │ │ ├── schema_wdg.py
│ │ │ ├── sobject_wdg.py
│ │ │ ├── tab_edit_wdg.py
│ │ │ └── trigger_wdg.py
│ │ └── widget/
│ │ ├── __init__.py
│ │ ├── button_new_wdg.py
│ │ ├── button_wdg.py
│ │ ├── calendar_wdg.py
│ │ ├── checkin_wdg.py
│ │ ├── chooser_wdg.py
│ │ ├── ckeditor_wdg.py
│ │ ├── color_input_wdg.py
│ │ ├── data_export_wdg.py
│ │ ├── discussion_wdg.py
│ │ ├── embed_wdg.py
│ │ ├── file_browser_wdg.py
│ │ ├── format_value_wdg.py
│ │ ├── gallery_wdg.py
│ │ ├── gear_menu_wdg.py
│ │ ├── layout_switcher_wdg.py
│ │ ├── misc_input_wdg.py
│ │ ├── overlay_stats_wdg.py
│ │ ├── plan_wdg.py
│ │ ├── progress_wdg.py
│ │ ├── proxy_wdg.py
│ │ ├── reset_password_wdg.py
│ │ ├── review_wdg.py
│ │ ├── serialize_wdg.py
│ │ ├── smart_select_wdg.py
│ │ ├── sobject_calendar_wdg.py
│ │ ├── sobject_group_wdg.py
│ │ ├── swap_display_wdg.py
│ │ ├── text_wdg.py
│ │ ├── title_wdg.py
│ │ ├── unity_wdg.py
│ │ ├── upload_wdg.py
│ │ ├── video_wdg.py
│ │ ├── visual_notes_wdg.py
│ │ ├── week_wdg.py
│ │ └── work_hour_wdg.py
│ └── utility/
│ ├── __init__.py
│ └── database.py
├── tactic_sites/
│ ├── __init__.py
│ ├── default/
│ │ ├── __init__.py
│ │ ├── context/
│ │ │ ├── Api.py
│ │ │ ├── Config.py
│ │ │ ├── CsvDownload.py
│ │ │ ├── Error403.py
│ │ │ ├── Error404.py
│ │ │ ├── Index.py
│ │ │ ├── TitlePage.py
│ │ │ ├── UploadServer.py
│ │ │ ├── WidgetServer.py
│ │ │ ├── XMLRPC.py
│ │ │ ├── __init__.py
│ │ │ └── browser.py
│ │ └── modules/
│ │ ├── __init__.py
│ │ └── index_wdg.py
│ └── template/
│ ├── __init__.py
│ ├── context/
│ │ ├── Houdini.py
│ │ ├── Index.py
│ │ ├── JSFL/
│ │ │ └── post_stage.jsfl
│ │ ├── Maya.py
│ │ ├── Sthpw.py
│ │ ├── XMLRPC.py
│ │ ├── XSI.py
│ │ └── __init__.py
│ └── modules/
│ ├── __init__.py
│ ├── base_index_wdg.py
│ └── site_page.py
└── test/
├── ad_test.py
├── api_test.py
├── authenticate_test.py
├── biz_test.py
├── checkin_test.py
├── command_test.py
├── common_test.py
├── config_test.py
├── database_test.py
├── dataflow_test.py
├── expression_test.py
├── file_test.py
├── html_wdg_test.py
├── naming_test.py
├── notification_test.py
├── pipeline_test.py
├── rest_test.py
├── run_tests.sh
├── schema_test.py
├── search_test.py
├── security_api_test.py
├── security_test.py
├── snapshot_builder_test.py
├── snapshot_test.py
├── spt_date_test.py
├── sql_test.py
├── system_test.py
├── transaction_test.py
├── widget_config_test.py
├── widget_test.py
├── workflow_test.py
└── xml_test.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question
about: Ask a question about the Source Code
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the question is. Describe in detail the part of the code you have a question about.
**NOTE**
*Please do not ask questions here on how to use or install TACTIC as these questions should be handled in the Forum (http://forum.southpawtech.com).*
================================================
FILE: .gitignore
================================================
*.py[cod]
# C extensions
*.so
# Packages
#*.egg
#*.egg-info
dist
build
eggs
parts
bin
var
sdist
develop-eggs
.installed.cfg
#lib
lib64
# Installer logs
pip-log.txt
# Unit test / coverage reports
.coverage
.tox
nosetests.xml
# Translations
*.mo
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# PyCharm
.idea
# VSCode
.vscode
# VI swp files
*.swp
# Metadata
._*
# Mac files
.DS_Store
================================================
FILE: 3rd_party/babel/.babelrc
================================================
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
================================================
FILE: 3rd_party/babel/babel.py
================================================
#!/usr/bin/python
from subprocess import Popen, PIPE
import os, sys
class JSXTranspileCmd():
def execute(self, text):
local_path = __file__
if not local_path:
dirname = "."
else:
dirname = os.path.dirname(local_path)
if not dirname:
dirname = "."
print("dirname: [%s]" % dirname)
# Need this to get the environment right.
# FIXME: there must be a better way to set the environment of node.js
os.chdir(dirname)
if isinstance(text, str):
text = text.encode()
executable = "%s/node_modules/.bin/babel" % dirname
cmds = [executable, "-f", "temp", "--no-comments"]
p = Popen(cmds, stdin=PIPE, stdout=PIPE, stderr=PIPE)
(o, e) = p.communicate(input=text)
if e:
sys.stderr.write(e.decode())
return o.decode()
if __name__ == "__main__":
text = sys.stdin.read()
cmd = JSXTranspileCmd()
js = cmd.execute(text)
print(js)
================================================
FILE: 3rd_party/babel/package.json
================================================
{
"name": "babel",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/cli": "^7.19.3",
"@babel/core": "^7.19.6"
},
"dependencies": {
"@babel/preset-env": "^7.19.4",
"@babel/preset-react": "^7.18.6",
"babel-plugin-anonymize": "^1.0.1"
},
"browserslist": "> 25%, not dead"
}
================================================
FILE: 3rd_party/babel/test.jsx
================================================
'use strict';
const e = React.createElement;
class LikeButton extends React.Component {
constructor(props) {
super(props);
this.state = { liked: false };
}
button_press = () => {
this.setState( {liked: true} )
}
whatever = () => {
return (
<div>Hello</div>
)
}
render() {
if (this.state.liked) {
return 'You liked this.';
}
return (
<div>
<div class="button" onClick={ () => {this.button_press() } }
className="btn btn-primary">Like</div>
</div>
);
}
}
const domContainer = document.querySelector('#react_container');
ReactDOM.render(e(LikeButton), domContainer);
================================================
FILE: 3rd_party/common/site-packages/mako/__init__.py
================================================
# mako/__init__.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
__version__ = '1.1.4'
================================================
FILE: 3rd_party/common/site-packages/mako/_ast_util.py
================================================
# mako/_ast_util.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""
ast
~~~
This is a stripped down version of Armin Ronacher's ast module.
:copyright: Copyright 2008 by Armin Ronacher.
:license: Python License.
"""
from _ast import Add
from _ast import And
from _ast import AST
from _ast import BitAnd
from _ast import BitOr
from _ast import BitXor
from _ast import Div
from _ast import Eq
from _ast import FloorDiv
from _ast import Gt
from _ast import GtE
from _ast import If
from _ast import In
from _ast import Invert
from _ast import Is
from _ast import IsNot
from _ast import LShift
from _ast import Lt
from _ast import LtE
from _ast import Mod
from _ast import Mult
from _ast import Name
from _ast import Not
from _ast import NotEq
from _ast import NotIn
from _ast import Or
from _ast import PyCF_ONLY_AST
from _ast import RShift
from _ast import Sub
from _ast import UAdd
from _ast import USub
from mako.compat import arg_stringname
BOOLOP_SYMBOLS = {And: "and", Or: "or"}
BINOP_SYMBOLS = {
Add: "+",
Sub: "-",
Mult: "*",
Div: "/",
FloorDiv: "//",
Mod: "%",
LShift: "<<",
RShift: ">>",
BitOr: "|",
BitAnd: "&",
BitXor: "^",
}
CMPOP_SYMBOLS = {
Eq: "==",
Gt: ">",
GtE: ">=",
In: "in",
Is: "is",
IsNot: "is not",
Lt: "<",
LtE: "<=",
NotEq: "!=",
NotIn: "not in",
}
UNARYOP_SYMBOLS = {Invert: "~", Not: "not", UAdd: "+", USub: "-"}
ALL_SYMBOLS = {}
ALL_SYMBOLS.update(BOOLOP_SYMBOLS)
ALL_SYMBOLS.update(BINOP_SYMBOLS)
ALL_SYMBOLS.update(CMPOP_SYMBOLS)
ALL_SYMBOLS.update(UNARYOP_SYMBOLS)
def parse(expr, filename="<unknown>", mode="exec"):
"""Parse an expression into an AST node."""
return compile(expr, filename, mode, PyCF_ONLY_AST)
def iter_fields(node):
"""Iterate over all fields of a node, only yielding existing fields."""
# CPython 2.5 compat
if not hasattr(node, "_fields") or not node._fields:
return
for field in node._fields:
try:
yield field, getattr(node, field)
except AttributeError:
pass
class NodeVisitor(object):
"""
Walks the abstract syntax tree and call visitor functions for every node
found. The visitor functions may return values which will be forwarded
by the `visit` method.
Per default the visitor functions for the nodes are ``'visit_'`` +
class name of the node. So a `TryFinally` node visit function would
be `visit_TryFinally`. This behavior can be changed by overriding
the `get_visitor` function. If no visitor function exists for a node
(return value `None`) the `generic_visit` visitor is used instead.
Don't use the `NodeVisitor` if you want to apply changes to nodes during
traversing. For this a special visitor exists (`NodeTransformer`) that
allows modifications.
"""
def get_visitor(self, node):
"""
Return the visitor function for this node or `None` if no visitor
exists for this node. In that case the generic visit function is
used instead.
"""
method = "visit_" + node.__class__.__name__
return getattr(self, method, None)
def visit(self, node):
"""Visit a node."""
f = self.get_visitor(node)
if f is not None:
return f(node)
return self.generic_visit(node)
def generic_visit(self, node):
"""Called if no explicit visitor function exists for a node."""
for field, value in iter_fields(node):
if isinstance(value, list):
for item in value:
if isinstance(item, AST):
self.visit(item)
elif isinstance(value, AST):
self.visit(value)
class NodeTransformer(NodeVisitor):
"""
Walks the abstract syntax tree and allows modifications of nodes.
The `NodeTransformer` will walk the AST and use the return value of the
visitor functions to replace or remove the old node. If the return
value of the visitor function is `None` the node will be removed
from the previous location otherwise it's replaced with the return
value. The return value may be the original node in which case no
replacement takes place.
Here an example transformer that rewrites all `foo` to `data['foo']`::
class RewriteName(NodeTransformer):
def visit_Name(self, node):
return copy_location(Subscript(
value=Name(id='data', ctx=Load()),
slice=Index(value=Str(s=node.id)),
ctx=node.ctx
), node)
Keep in mind that if the node you're operating on has child nodes
you must either transform the child nodes yourself or call the generic
visit function for the node first.
Nodes that were part of a collection of statements (that applies to
all statement nodes) may also return a list of nodes rather than just
a single node.
Usually you use the transformer like this::
node = YourTransformer().visit(node)
"""
def generic_visit(self, node):
for field, old_value in iter_fields(node):
old_value = getattr(node, field, None)
if isinstance(old_value, list):
new_values = []
for value in old_value:
if isinstance(value, AST):
value = self.visit(value)
if value is None:
continue
elif not isinstance(value, AST):
new_values.extend(value)
continue
new_values.append(value)
old_value[:] = new_values
elif isinstance(old_value, AST):
new_node = self.visit(old_value)
if new_node is None:
delattr(node, field)
else:
setattr(node, field, new_node)
return node
class SourceGenerator(NodeVisitor):
"""
This visitor is able to transform a well formed syntax tree into python
sourcecode. For more details have a look at the docstring of the
`node_to_source` function.
"""
def __init__(self, indent_with):
self.result = []
self.indent_with = indent_with
self.indentation = 0
self.new_lines = 0
def write(self, x):
if self.new_lines:
if self.result:
self.result.append("\n" * self.new_lines)
self.result.append(self.indent_with * self.indentation)
self.new_lines = 0
self.result.append(x)
def newline(self, n=1):
self.new_lines = max(self.new_lines, n)
def body(self, statements):
self.new_line = True
self.indentation += 1
for stmt in statements:
self.visit(stmt)
self.indentation -= 1
def body_or_else(self, node):
self.body(node.body)
if node.orelse:
self.newline()
self.write("else:")
self.body(node.orelse)
def signature(self, node):
want_comma = []
def write_comma():
if want_comma:
self.write(", ")
else:
want_comma.append(True)
padding = [None] * (len(node.args) - len(node.defaults))
for arg, default in zip(node.args, padding + node.defaults):
write_comma()
self.visit(arg)
if default is not None:
self.write("=")
self.visit(default)
if node.vararg is not None:
write_comma()
self.write("*" + arg_stringname(node.vararg))
if node.kwarg is not None:
write_comma()
self.write("**" + arg_stringname(node.kwarg))
def decorators(self, node):
for decorator in node.decorator_list:
self.newline()
self.write("@")
self.visit(decorator)
# Statements
def visit_Assign(self, node):
self.newline()
for idx, target in enumerate(node.targets):
if idx:
self.write(", ")
self.visit(target)
self.write(" = ")
self.visit(node.value)
def visit_AugAssign(self, node):
self.newline()
self.visit(node.target)
self.write(BINOP_SYMBOLS[type(node.op)] + "=")
self.visit(node.value)
def visit_ImportFrom(self, node):
self.newline()
self.write("from %s%s import " % ("." * node.level, node.module))
for idx, item in enumerate(node.names):
if idx:
self.write(", ")
self.write(item)
def visit_Import(self, node):
self.newline()
for item in node.names:
self.write("import ")
self.visit(item)
def visit_Expr(self, node):
self.newline()
self.generic_visit(node)
def visit_FunctionDef(self, node):
self.newline(n=2)
self.decorators(node)
self.newline()
self.write("def %s(" % node.name)
self.signature(node.args)
self.write("):")
self.body(node.body)
def visit_ClassDef(self, node):
have_args = []
def paren_or_comma():
if have_args:
self.write(", ")
else:
have_args.append(True)
self.write("(")
self.newline(n=3)
self.decorators(node)
self.newline()
self.write("class %s" % node.name)
for base in node.bases:
paren_or_comma()
self.visit(base)
# XXX: the if here is used to keep this module compatible
# with python 2.6.
if hasattr(node, "keywords"):
for keyword in node.keywords:
paren_or_comma()
self.write(keyword.arg + "=")
self.visit(keyword.value)
if getattr(node, "starargs", None):
paren_or_comma()
self.write("*")
self.visit(node.starargs)
if getattr(node, "kwargs", None):
paren_or_comma()
self.write("**")
self.visit(node.kwargs)
self.write(have_args and "):" or ":")
self.body(node.body)
def visit_If(self, node):
self.newline()
self.write("if ")
self.visit(node.test)
self.write(":")
self.body(node.body)
while True:
else_ = node.orelse
if len(else_) == 1 and isinstance(else_[0], If):
node = else_[0]
self.newline()
self.write("elif ")
self.visit(node.test)
self.write(":")
self.body(node.body)
else:
self.newline()
self.write("else:")
self.body(else_)
break
def visit_For(self, node):
self.newline()
self.write("for ")
self.visit(node.target)
self.write(" in ")
self.visit(node.iter)
self.write(":")
self.body_or_else(node)
def visit_While(self, node):
self.newline()
self.write("while ")
self.visit(node.test)
self.write(":")
self.body_or_else(node)
def visit_With(self, node):
self.newline()
self.write("with ")
self.visit(node.context_expr)
if node.optional_vars is not None:
self.write(" as ")
self.visit(node.optional_vars)
self.write(":")
self.body(node.body)
def visit_Pass(self, node):
self.newline()
self.write("pass")
def visit_Print(self, node):
# XXX: python 2.6 only
self.newline()
self.write("print ")
want_comma = False
if node.dest is not None:
self.write(" >> ")
self.visit(node.dest)
want_comma = True
for value in node.values:
if want_comma:
self.write(", ")
self.visit(value)
want_comma = True
if not node.nl:
self.write(",")
def visit_Delete(self, node):
self.newline()
self.write("del ")
for idx, target in enumerate(node):
if idx:
self.write(", ")
self.visit(target)
def visit_TryExcept(self, node):
self.newline()
self.write("try:")
self.body(node.body)
for handler in node.handlers:
self.visit(handler)
def visit_TryFinally(self, node):
self.newline()
self.write("try:")
self.body(node.body)
self.newline()
self.write("finally:")
self.body(node.finalbody)
def visit_Global(self, node):
self.newline()
self.write("global " + ", ".join(node.names))
def visit_Nonlocal(self, node):
self.newline()
self.write("nonlocal " + ", ".join(node.names))
def visit_Return(self, node):
self.newline()
self.write("return ")
self.visit(node.value)
def visit_Break(self, node):
self.newline()
self.write("break")
def visit_Continue(self, node):
self.newline()
self.write("continue")
def visit_Raise(self, node):
# XXX: Python 2.6 / 3.0 compatibility
self.newline()
self.write("raise")
if hasattr(node, "exc") and node.exc is not None:
self.write(" ")
self.visit(node.exc)
if node.cause is not None:
self.write(" from ")
self.visit(node.cause)
elif hasattr(node, "type") and node.type is not None:
self.visit(node.type)
if node.inst is not None:
self.write(", ")
self.visit(node.inst)
if node.tback is not None:
self.write(", ")
self.visit(node.tback)
# Expressions
def visit_Attribute(self, node):
self.visit(node.value)
self.write("." + node.attr)
def visit_Call(self, node):
want_comma = []
def write_comma():
if want_comma:
self.write(", ")
else:
want_comma.append(True)
self.visit(node.func)
self.write("(")
for arg in node.args:
write_comma()
self.visit(arg)
for keyword in node.keywords:
write_comma()
self.write(keyword.arg + "=")
self.visit(keyword.value)
if getattr(node, "starargs", None):
write_comma()
self.write("*")
self.visit(node.starargs)
if getattr(node, "kwargs", None):
write_comma()
self.write("**")
self.visit(node.kwargs)
self.write(")")
def visit_Name(self, node):
self.write(node.id)
def visit_NameConstant(self, node):
self.write(str(node.value))
def visit_arg(self, node):
self.write(node.arg)
def visit_Str(self, node):
self.write(repr(node.s))
def visit_Bytes(self, node):
self.write(repr(node.s))
def visit_Num(self, node):
self.write(repr(node.n))
# newly needed in Python 3.8
def visit_Constant(self, node):
self.write(repr(node.value))
def visit_Tuple(self, node):
self.write("(")
idx = -1
for idx, item in enumerate(node.elts):
if idx:
self.write(", ")
self.visit(item)
self.write(idx and ")" or ",)")
def sequence_visit(left, right):
def visit(self, node):
self.write(left)
for idx, item in enumerate(node.elts):
if idx:
self.write(", ")
self.visit(item)
self.write(right)
return visit
visit_List = sequence_visit("[", "]")
visit_Set = sequence_visit("{", "}")
del sequence_visit
def visit_Dict(self, node):
self.write("{")
for idx, (key, value) in enumerate(zip(node.keys, node.values)):
if idx:
self.write(", ")
self.visit(key)
self.write(": ")
self.visit(value)
self.write("}")
def visit_BinOp(self, node):
self.write("(")
self.visit(node.left)
self.write(" %s " % BINOP_SYMBOLS[type(node.op)])
self.visit(node.right)
self.write(")")
def visit_BoolOp(self, node):
self.write("(")
for idx, value in enumerate(node.values):
if idx:
self.write(" %s " % BOOLOP_SYMBOLS[type(node.op)])
self.visit(value)
self.write(")")
def visit_Compare(self, node):
self.write("(")
self.visit(node.left)
for op, right in zip(node.ops, node.comparators):
self.write(" %s " % CMPOP_SYMBOLS[type(op)])
self.visit(right)
self.write(")")
def visit_UnaryOp(self, node):
self.write("(")
op = UNARYOP_SYMBOLS[type(node.op)]
self.write(op)
if op == "not":
self.write(" ")
self.visit(node.operand)
self.write(")")
def visit_Subscript(self, node):
self.visit(node.value)
self.write("[")
self.visit(node.slice)
self.write("]")
def visit_Slice(self, node):
if node.lower is not None:
self.visit(node.lower)
self.write(":")
if node.upper is not None:
self.visit(node.upper)
if node.step is not None:
self.write(":")
if not (isinstance(node.step, Name) and node.step.id == "None"):
self.visit(node.step)
def visit_ExtSlice(self, node):
for idx, item in node.dims:
if idx:
self.write(", ")
self.visit(item)
def visit_Yield(self, node):
self.write("yield ")
self.visit(node.value)
def visit_Lambda(self, node):
self.write("lambda ")
self.signature(node.args)
self.write(": ")
self.visit(node.body)
def visit_Ellipsis(self, node):
self.write("Ellipsis")
def generator_visit(left, right):
def visit(self, node):
self.write(left)
self.visit(node.elt)
for comprehension in node.generators:
self.visit(comprehension)
self.write(right)
return visit
visit_ListComp = generator_visit("[", "]")
visit_GeneratorExp = generator_visit("(", ")")
visit_SetComp = generator_visit("{", "}")
del generator_visit
def visit_DictComp(self, node):
self.write("{")
self.visit(node.key)
self.write(": ")
self.visit(node.value)
for comprehension in node.generators:
self.visit(comprehension)
self.write("}")
def visit_IfExp(self, node):
self.visit(node.body)
self.write(" if ")
self.visit(node.test)
self.write(" else ")
self.visit(node.orelse)
def visit_Starred(self, node):
self.write("*")
self.visit(node.value)
def visit_Repr(self, node):
# XXX: python 2.6 only
self.write("`")
self.visit(node.value)
self.write("`")
# Helper Nodes
def visit_alias(self, node):
self.write(node.name)
if node.asname is not None:
self.write(" as " + node.asname)
def visit_comprehension(self, node):
self.write(" for ")
self.visit(node.target)
self.write(" in ")
self.visit(node.iter)
if node.ifs:
for if_ in node.ifs:
self.write(" if ")
self.visit(if_)
def visit_excepthandler(self, node):
self.newline()
self.write("except")
if node.type is not None:
self.write(" ")
self.visit(node.type)
if node.name is not None:
self.write(" as ")
self.visit(node.name)
self.write(":")
self.body(node.body)
================================================
FILE: 3rd_party/common/site-packages/mako/ast.py
================================================
# mako/ast.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""utilities for analyzing expressions and blocks of Python
code, as well as generating Python from AST nodes"""
import re
from mako import compat
from mako import exceptions
from mako import pyparser
class PythonCode(object):
"""represents information about a string containing Python code"""
def __init__(self, code, **exception_kwargs):
self.code = code
# represents all identifiers which are assigned to at some point in
# the code
self.declared_identifiers = set()
# represents all identifiers which are referenced before their
# assignment, if any
self.undeclared_identifiers = set()
# note that an identifier can be in both the undeclared and declared
# lists.
# using AST to parse instead of using code.co_varnames,
# code.co_names has several advantages:
# - we can locate an identifier as "undeclared" even if
# its declared later in the same block of code
# - AST is less likely to break with version changes
# (for example, the behavior of co_names changed a little bit
# in python version 2.5)
if isinstance(code, compat.string_types):
expr = pyparser.parse(code.lstrip(), "exec", **exception_kwargs)
else:
expr = code
f = pyparser.FindIdentifiers(self, **exception_kwargs)
f.visit(expr)
class ArgumentList(object):
"""parses a fragment of code as a comma-separated list of expressions"""
def __init__(self, code, **exception_kwargs):
self.codeargs = []
self.args = []
self.declared_identifiers = set()
self.undeclared_identifiers = set()
if isinstance(code, compat.string_types):
if re.match(r"\S", code) and not re.match(r",\s*$", code):
# if theres text and no trailing comma, insure its parsed
# as a tuple by adding a trailing comma
code += ","
expr = pyparser.parse(code, "exec", **exception_kwargs)
else:
expr = code
f = pyparser.FindTuple(self, PythonCode, **exception_kwargs)
f.visit(expr)
class PythonFragment(PythonCode):
"""extends PythonCode to provide identifier lookups in partial control
statements
e.g.::
for x in 5:
elif y==9:
except (MyException, e):
"""
def __init__(self, code, **exception_kwargs):
m = re.match(r"^(\w+)(?:\s+(.*?))?:\s*(#|$)", code.strip(), re.S)
if not m:
raise exceptions.CompileException(
"Fragment '%s' is not a partial control statement" % code,
**exception_kwargs
)
if m.group(3):
code = code[: m.start(3)]
(keyword, expr) = m.group(1, 2)
if keyword in ["for", "if", "while"]:
code = code + "pass"
elif keyword == "try":
code = code + "pass\nexcept:pass"
elif keyword == "elif" or keyword == "else":
code = "if False:pass\n" + code + "pass"
elif keyword == "except":
code = "try:pass\n" + code + "pass"
elif keyword == "with":
code = code + "pass"
else:
raise exceptions.CompileException(
"Unsupported control keyword: '%s'" % keyword,
**exception_kwargs
)
super(PythonFragment, self).__init__(code, **exception_kwargs)
class FunctionDecl(object):
"""function declaration"""
def __init__(self, code, allow_kwargs=True, **exception_kwargs):
self.code = code
expr = pyparser.parse(code, "exec", **exception_kwargs)
f = pyparser.ParseFunc(self, **exception_kwargs)
f.visit(expr)
if not hasattr(self, "funcname"):
raise exceptions.CompileException(
"Code '%s' is not a function declaration" % code,
**exception_kwargs
)
if not allow_kwargs and self.kwargs:
raise exceptions.CompileException(
"'**%s' keyword argument not allowed here"
% self.kwargnames[-1],
**exception_kwargs
)
def get_argument_expressions(self, as_call=False):
"""Return the argument declarations of this FunctionDecl as a printable
list.
By default the return value is appropriate for writing in a ``def``;
set `as_call` to true to build arguments to be passed to the function
instead (assuming locals with the same names as the arguments exist).
"""
namedecls = []
# Build in reverse order, since defaults and slurpy args come last
argnames = self.argnames[::-1]
kwargnames = self.kwargnames[::-1]
defaults = self.defaults[::-1]
kwdefaults = self.kwdefaults[::-1]
# Named arguments
if self.kwargs:
namedecls.append("**" + kwargnames.pop(0))
for name in kwargnames:
# Keyword-only arguments must always be used by name, so even if
# this is a call, print out `foo=foo`
if as_call:
namedecls.append("%s=%s" % (name, name))
elif kwdefaults:
default = kwdefaults.pop(0)
if default is None:
# The AST always gives kwargs a default, since you can do
# `def foo(*, a=1, b, c=3)`
namedecls.append(name)
else:
namedecls.append(
"%s=%s"
% (name, pyparser.ExpressionGenerator(default).value())
)
else:
namedecls.append(name)
# Positional arguments
if self.varargs:
namedecls.append("*" + argnames.pop(0))
for name in argnames:
if as_call or not defaults:
namedecls.append(name)
else:
default = defaults.pop(0)
namedecls.append(
"%s=%s"
% (name, pyparser.ExpressionGenerator(default).value())
)
namedecls.reverse()
return namedecls
@property
def allargnames(self):
return tuple(self.argnames) + tuple(self.kwargnames)
class FunctionArgs(FunctionDecl):
"""the argument portion of a function declaration"""
def __init__(self, code, **kwargs):
super(FunctionArgs, self).__init__(
"def ANON(%s):pass" % code, **kwargs
)
================================================
FILE: 3rd_party/common/site-packages/mako/cache.py
================================================
# mako/cache.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
from mako import compat
from mako import util
_cache_plugins = util.PluginLoader("mako.cache")
register_plugin = _cache_plugins.register
register_plugin("beaker", "mako.ext.beaker_cache", "BeakerCacheImpl")
class Cache(object):
"""Represents a data content cache made available to the module
space of a specific :class:`.Template` object.
.. versionadded:: 0.6
:class:`.Cache` by itself is mostly a
container for a :class:`.CacheImpl` object, which implements
a fixed API to provide caching services; specific subclasses exist to
implement different
caching strategies. Mako includes a backend that works with
the Beaker caching system. Beaker itself then supports
a number of backends (i.e. file, memory, memcached, etc.)
The construction of a :class:`.Cache` is part of the mechanics
of a :class:`.Template`, and programmatic access to this
cache is typically via the :attr:`.Template.cache` attribute.
"""
impl = None
"""Provide the :class:`.CacheImpl` in use by this :class:`.Cache`.
This accessor allows a :class:`.CacheImpl` with additional
methods beyond that of :class:`.Cache` to be used programmatically.
"""
id = None
"""Return the 'id' that identifies this cache.
This is a value that should be globally unique to the
:class:`.Template` associated with this cache, and can
be used by a caching system to name a local container
for data specific to this template.
"""
starttime = None
"""Epochal time value for when the owning :class:`.Template` was
first compiled.
A cache implementation may wish to invalidate data earlier than
this timestamp; this has the effect of the cache for a specific
:class:`.Template` starting clean any time the :class:`.Template`
is recompiled, such as when the original template file changed on
the filesystem.
"""
def __init__(self, template, *args):
# check for a stale template calling the
# constructor
if isinstance(template, compat.string_types) and args:
return
self.template = template
self.id = template.module.__name__
self.starttime = template.module._modified_time
self._def_regions = {}
self.impl = self._load_impl(self.template.cache_impl)
def _load_impl(self, name):
return _cache_plugins.load(name)(self)
def get_or_create(self, key, creation_function, **kw):
"""Retrieve a value from the cache, using the given creation function
to generate a new value."""
return self._ctx_get_or_create(key, creation_function, None, **kw)
def _ctx_get_or_create(self, key, creation_function, context, **kw):
"""Retrieve a value from the cache, using the given creation function
to generate a new value."""
if not self.template.cache_enabled:
return creation_function()
return self.impl.get_or_create(
key, creation_function, **self._get_cache_kw(kw, context)
)
def set(self, key, value, **kw):
r"""Place a value in the cache.
:param key: the value's key.
:param value: the value.
:param \**kw: cache configuration arguments.
"""
self.impl.set(key, value, **self._get_cache_kw(kw, None))
put = set
"""A synonym for :meth:`.Cache.set`.
This is here for backwards compatibility.
"""
def get(self, key, **kw):
r"""Retrieve a value from the cache.
:param key: the value's key.
:param \**kw: cache configuration arguments. The
backend is configured using these arguments upon first request.
Subsequent requests that use the same series of configuration
values will use that same backend.
"""
return self.impl.get(key, **self._get_cache_kw(kw, None))
def invalidate(self, key, **kw):
r"""Invalidate a value in the cache.
:param key: the value's key.
:param \**kw: cache configuration arguments. The
backend is configured using these arguments upon first request.
Subsequent requests that use the same series of configuration
values will use that same backend.
"""
self.impl.invalidate(key, **self._get_cache_kw(kw, None))
def invalidate_body(self):
"""Invalidate the cached content of the "body" method for this
template.
"""
self.invalidate("render_body", __M_defname="render_body")
def invalidate_def(self, name):
"""Invalidate the cached content of a particular ``<%def>`` within this
template.
"""
self.invalidate("render_%s" % name, __M_defname="render_%s" % name)
def invalidate_closure(self, name):
"""Invalidate a nested ``<%def>`` within this template.
Caching of nested defs is a blunt tool as there is no
management of scope -- nested defs that use cache tags
need to have names unique of all other nested defs in the
template, else their content will be overwritten by
each other.
"""
self.invalidate(name, __M_defname=name)
def _get_cache_kw(self, kw, context):
defname = kw.pop("__M_defname", None)
if not defname:
tmpl_kw = self.template.cache_args.copy()
tmpl_kw.update(kw)
elif defname in self._def_regions:
tmpl_kw = self._def_regions[defname]
else:
tmpl_kw = self.template.cache_args.copy()
tmpl_kw.update(kw)
self._def_regions[defname] = tmpl_kw
if context and self.impl.pass_context:
tmpl_kw = tmpl_kw.copy()
tmpl_kw.setdefault("context", context)
return tmpl_kw
class CacheImpl(object):
"""Provide a cache implementation for use by :class:`.Cache`."""
def __init__(self, cache):
self.cache = cache
pass_context = False
"""If ``True``, the :class:`.Context` will be passed to
:meth:`get_or_create <.CacheImpl.get_or_create>` as the name ``'context'``.
"""
def get_or_create(self, key, creation_function, **kw):
r"""Retrieve a value from the cache, using the given creation function
to generate a new value.
This function *must* return a value, either from
the cache, or via the given creation function.
If the creation function is called, the newly
created value should be populated into the cache
under the given key before being returned.
:param key: the value's key.
:param creation_function: function that when called generates
a new value.
:param \**kw: cache configuration arguments.
"""
raise NotImplementedError()
def set(self, key, value, **kw):
r"""Place a value in the cache.
:param key: the value's key.
:param value: the value.
:param \**kw: cache configuration arguments.
"""
raise NotImplementedError()
def get(self, key, **kw):
r"""Retrieve a value from the cache.
:param key: the value's key.
:param \**kw: cache configuration arguments.
"""
raise NotImplementedError()
def invalidate(self, key, **kw):
r"""Invalidate a value in the cache.
:param key: the value's key.
:param \**kw: cache configuration arguments.
"""
raise NotImplementedError()
================================================
FILE: 3rd_party/common/site-packages/mako/cmd.py
================================================
# mako/cmd.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
from argparse import ArgumentParser
import io
from os.path import dirname
from os.path import isfile
import sys
from mako import exceptions
from mako.lookup import TemplateLookup
from mako.template import Template
def varsplit(var):
if "=" not in var:
return (var, "")
return var.split("=", 1)
def _exit():
sys.stderr.write(exceptions.text_error_template().render())
sys.exit(1)
def cmdline(argv=None):
parser = ArgumentParser()
parser.add_argument(
"--var",
default=[],
action="append",
help="variable (can be used multiple times, use name=value)",
)
parser.add_argument(
"--template-dir",
default=[],
action="append",
help="Directory to use for template lookup (multiple "
"directories may be provided). If not given then if the "
"template is read from stdin, the value defaults to be "
"the current directory, otherwise it defaults to be the "
"parent directory of the file provided.",
)
parser.add_argument(
"--output-encoding", default=None, help="force output encoding"
)
parser.add_argument(
"--output-file",
default=None,
help="Write to file upon successful render instead of stdout",
)
parser.add_argument("input", nargs="?", default="-")
options = parser.parse_args(argv)
output_encoding = options.output_encoding
output_file = options.output_file
if options.input == "-":
lookup_dirs = options.template_dir or ["."]
lookup = TemplateLookup(lookup_dirs)
try:
template = Template(
sys.stdin.read(),
lookup=lookup,
output_encoding=output_encoding,
)
except:
_exit()
else:
filename = options.input
if not isfile(filename):
raise SystemExit("error: can't find %s" % filename)
lookup_dirs = options.template_dir or [dirname(filename)]
lookup = TemplateLookup(lookup_dirs)
try:
template = Template(
filename=filename,
lookup=lookup,
output_encoding=output_encoding,
)
except:
_exit()
kw = dict([varsplit(var) for var in options.var])
try:
rendered = template.render(**kw)
except:
_exit()
else:
if output_file:
io.open(output_file, "wt", encoding=output_encoding).write(
rendered
)
else:
sys.stdout.write(rendered)
if __name__ == "__main__":
cmdline()
================================================
FILE: 3rd_party/common/site-packages/mako/codegen.py
================================================
# mako/codegen.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""provides functionality for rendering a parsetree constructing into module
source code."""
import json
import re
import time
from mako import ast
from mako import compat
from mako import exceptions
from mako import filters
from mako import parsetree
from mako import util
from mako.pygen import PythonPrinter
MAGIC_NUMBER = 10
# names which are hardwired into the
# template and are not accessed via the
# context itself
TOPLEVEL_DECLARED = set(["UNDEFINED", "STOP_RENDERING"])
RESERVED_NAMES = set(["context", "loop"]).union(TOPLEVEL_DECLARED)
def compile( # noqa
node,
uri,
filename=None,
default_filters=None,
buffer_filters=None,
imports=None,
future_imports=None,
source_encoding=None,
generate_magic_comment=True,
disable_unicode=False,
strict_undefined=False,
enable_loop=True,
reserved_names=frozenset(),
):
"""Generate module source code given a parsetree node,
uri, and optional source filename"""
# if on Py2K, push the "source_encoding" string to be
# a bytestring itself, as we will be embedding it into
# the generated source and we don't want to coerce the
# result into a unicode object, in "disable_unicode" mode
if not compat.py3k and isinstance(source_encoding, compat.text_type):
source_encoding = source_encoding.encode(source_encoding)
buf = util.FastEncodingBuffer()
printer = PythonPrinter(buf)
_GenerateRenderMethod(
printer,
_CompileContext(
uri,
filename,
default_filters,
buffer_filters,
imports,
future_imports,
source_encoding,
generate_magic_comment,
disable_unicode,
strict_undefined,
enable_loop,
reserved_names,
),
node,
)
return buf.getvalue()
class _CompileContext(object):
def __init__(
self,
uri,
filename,
default_filters,
buffer_filters,
imports,
future_imports,
source_encoding,
generate_magic_comment,
disable_unicode,
strict_undefined,
enable_loop,
reserved_names,
):
self.uri = uri
self.filename = filename
self.default_filters = default_filters
self.buffer_filters = buffer_filters
self.imports = imports
self.future_imports = future_imports
self.source_encoding = source_encoding
self.generate_magic_comment = generate_magic_comment
self.disable_unicode = disable_unicode
self.strict_undefined = strict_undefined
self.enable_loop = enable_loop
self.reserved_names = reserved_names
class _GenerateRenderMethod(object):
"""A template visitor object which generates the
full module source for a template.
"""
def __init__(self, printer, compiler, node):
self.printer = printer
self.compiler = compiler
self.node = node
self.identifier_stack = [None]
self.in_def = isinstance(node, (parsetree.DefTag, parsetree.BlockTag))
if self.in_def:
name = "render_%s" % node.funcname
args = node.get_argument_expressions()
filtered = len(node.filter_args.args) > 0
buffered = eval(node.attributes.get("buffered", "False"))
cached = eval(node.attributes.get("cached", "False"))
defs = None
pagetag = None
if node.is_block and not node.is_anonymous:
args += ["**pageargs"]
else:
defs = self.write_toplevel()
pagetag = self.compiler.pagetag
name = "render_body"
if pagetag is not None:
args = pagetag.body_decl.get_argument_expressions()
if not pagetag.body_decl.kwargs:
args += ["**pageargs"]
cached = eval(pagetag.attributes.get("cached", "False"))
self.compiler.enable_loop = self.compiler.enable_loop or eval(
pagetag.attributes.get("enable_loop", "False")
)
else:
args = ["**pageargs"]
cached = False
buffered = filtered = False
if args is None:
args = ["context"]
else:
args = [a for a in ["context"] + args]
self.write_render_callable(
pagetag or node, name, args, buffered, filtered, cached
)
if defs is not None:
for node in defs:
_GenerateRenderMethod(printer, compiler, node)
if not self.in_def:
self.write_metadata_struct()
def write_metadata_struct(self):
self.printer.source_map[self.printer.lineno] = max(
self.printer.source_map
)
struct = {
"filename": self.compiler.filename,
"uri": self.compiler.uri,
"source_encoding": self.compiler.source_encoding,
"line_map": self.printer.source_map,
}
self.printer.writelines(
'"""',
"__M_BEGIN_METADATA",
json.dumps(struct),
"__M_END_METADATA\n" '"""',
)
@property
def identifiers(self):
return self.identifier_stack[-1]
def write_toplevel(self):
"""Traverse a template structure for module-level directives and
generate the start of module-level code.
"""
inherit = []
namespaces = {}
module_code = []
self.compiler.pagetag = None
class FindTopLevel(object):
def visitInheritTag(s, node):
inherit.append(node)
def visitNamespaceTag(s, node):
namespaces[node.name] = node
def visitPageTag(s, node):
self.compiler.pagetag = node
def visitCode(s, node):
if node.ismodule:
module_code.append(node)
f = FindTopLevel()
for n in self.node.nodes:
n.accept_visitor(f)
self.compiler.namespaces = namespaces
module_ident = set()
for n in module_code:
module_ident = module_ident.union(n.declared_identifiers())
module_identifiers = _Identifiers(self.compiler)
module_identifiers.declared = module_ident
# module-level names, python code
if (
self.compiler.generate_magic_comment
and self.compiler.source_encoding
):
self.printer.writeline(
"# -*- coding:%s -*-" % self.compiler.source_encoding
)
if self.compiler.future_imports:
self.printer.writeline(
"from __future__ import %s"
% (", ".join(self.compiler.future_imports),)
)
self.printer.writeline("from mako import runtime, filters, cache")
self.printer.writeline("UNDEFINED = runtime.UNDEFINED")
self.printer.writeline("STOP_RENDERING = runtime.STOP_RENDERING")
self.printer.writeline("__M_dict_builtin = dict")
self.printer.writeline("__M_locals_builtin = locals")
self.printer.writeline("_magic_number = %r" % MAGIC_NUMBER)
self.printer.writeline("_modified_time = %r" % time.time())
self.printer.writeline("_enable_loop = %r" % self.compiler.enable_loop)
self.printer.writeline(
"_template_filename = %r" % self.compiler.filename
)
self.printer.writeline("_template_uri = %r" % self.compiler.uri)
self.printer.writeline(
"_source_encoding = %r" % self.compiler.source_encoding
)
if self.compiler.imports:
buf = ""
for imp in self.compiler.imports:
buf += imp + "\n"
self.printer.writeline(imp)
impcode = ast.PythonCode(
buf,
source="",
lineno=0,
pos=0,
filename="template defined imports",
)
else:
impcode = None
main_identifiers = module_identifiers.branch(self.node)
mit = module_identifiers.topleveldefs
module_identifiers.topleveldefs = mit.union(
main_identifiers.topleveldefs
)
module_identifiers.declared.update(TOPLEVEL_DECLARED)
if impcode:
module_identifiers.declared.update(impcode.declared_identifiers)
self.compiler.identifiers = module_identifiers
self.printer.writeline(
"_exports = %r"
% [n.name for n in main_identifiers.topleveldefs.values()]
)
self.printer.write_blanks(2)
if len(module_code):
self.write_module_code(module_code)
if len(inherit):
self.write_namespaces(namespaces)
self.write_inherit(inherit[-1])
elif len(namespaces):
self.write_namespaces(namespaces)
return list(main_identifiers.topleveldefs.values())
def write_render_callable(
self, node, name, args, buffered, filtered, cached
):
"""write a top-level render callable.
this could be the main render() method or that of a top-level def."""
if self.in_def:
decorator = node.decorator
if decorator:
self.printer.writeline(
"@runtime._decorate_toplevel(%s)" % decorator
)
self.printer.start_source(node.lineno)
self.printer.writelines(
"def %s(%s):" % (name, ",".join(args)),
# push new frame, assign current frame to __M_caller
"__M_caller = context.caller_stack._push_frame()",
"try:",
)
if buffered or filtered or cached:
self.printer.writeline("context._push_buffer()")
self.identifier_stack.append(
self.compiler.identifiers.branch(self.node)
)
if (not self.in_def or self.node.is_block) and "**pageargs" in args:
self.identifier_stack[-1].argument_declared.add("pageargs")
if not self.in_def and (
len(self.identifiers.locally_assigned) > 0
or len(self.identifiers.argument_declared) > 0
):
self.printer.writeline(
"__M_locals = __M_dict_builtin(%s)"
% ",".join(
[
"%s=%s" % (x, x)
for x in self.identifiers.argument_declared
]
)
)
self.write_variable_declares(self.identifiers, toplevel=True)
for n in self.node.nodes:
n.accept_visitor(self)
self.write_def_finish(self.node, buffered, filtered, cached)
self.printer.writeline(None)
self.printer.write_blanks(2)
if cached:
self.write_cache_decorator(
node, name, args, buffered, self.identifiers, toplevel=True
)
def write_module_code(self, module_code):
"""write module-level template code, i.e. that which
is enclosed in <%! %> tags in the template."""
for n in module_code:
self.printer.write_indented_block(n.text, starting_lineno=n.lineno)
def write_inherit(self, node):
"""write the module-level inheritance-determination callable."""
self.printer.writelines(
"def _mako_inherit(template, context):",
"_mako_generate_namespaces(context)",
"return runtime._inherit_from(context, %s, _template_uri)"
% (node.parsed_attributes["file"]),
None,
)
def write_namespaces(self, namespaces):
"""write the module-level namespace-generating callable."""
self.printer.writelines(
"def _mako_get_namespace(context, name):",
"try:",
"return context.namespaces[(__name__, name)]",
"except KeyError:",
"_mako_generate_namespaces(context)",
"return context.namespaces[(__name__, name)]",
None,
None,
)
self.printer.writeline("def _mako_generate_namespaces(context):")
for node in namespaces.values():
if "import" in node.attributes:
self.compiler.has_ns_imports = True
self.printer.start_source(node.lineno)
if len(node.nodes):
self.printer.writeline("def make_namespace():")
export = []
identifiers = self.compiler.identifiers.branch(node)
self.in_def = True
class NSDefVisitor(object):
def visitDefTag(s, node):
s.visitDefOrBase(node)
def visitBlockTag(s, node):
s.visitDefOrBase(node)
def visitDefOrBase(s, node):
if node.is_anonymous:
raise exceptions.CompileException(
"Can't put anonymous blocks inside "
"<%namespace>",
**node.exception_kwargs
)
self.write_inline_def(node, identifiers, nested=False)
export.append(node.funcname)
vis = NSDefVisitor()
for n in node.nodes:
n.accept_visitor(vis)
self.printer.writeline("return [%s]" % (",".join(export)))
self.printer.writeline(None)
self.in_def = False
callable_name = "make_namespace()"
else:
callable_name = "None"
if "file" in node.parsed_attributes:
self.printer.writeline(
"ns = runtime.TemplateNamespace(%r,"
" context._clean_inheritance_tokens(),"
" templateuri=%s, callables=%s, "
" calling_uri=_template_uri)"
% (
node.name,
node.parsed_attributes.get("file", "None"),
callable_name,
)
)
elif "module" in node.parsed_attributes:
self.printer.writeline(
"ns = runtime.ModuleNamespace(%r,"
" context._clean_inheritance_tokens(),"
" callables=%s, calling_uri=_template_uri,"
" module=%s)"
% (
node.name,
callable_name,
node.parsed_attributes.get("module", "None"),
)
)
else:
self.printer.writeline(
"ns = runtime.Namespace(%r,"
" context._clean_inheritance_tokens(),"
" callables=%s, calling_uri=_template_uri)"
% (node.name, callable_name)
)
if eval(node.attributes.get("inheritable", "False")):
self.printer.writeline("context['self'].%s = ns" % (node.name))
self.printer.writeline(
"context.namespaces[(__name__, %s)] = ns" % repr(node.name)
)
self.printer.write_blanks(1)
if not len(namespaces):
self.printer.writeline("pass")
self.printer.writeline(None)
def write_variable_declares(self, identifiers, toplevel=False, limit=None):
"""write variable declarations at the top of a function.
the variable declarations are in the form of callable
definitions for defs and/or name lookup within the
function's context argument. the names declared are based
on the names that are referenced in the function body,
which don't otherwise have any explicit assignment
operation. names that are assigned within the body are
assumed to be locally-scoped variables and are not
separately declared.
for def callable definitions, if the def is a top-level
callable then a 'stub' callable is generated which wraps
the current Context into a closure. if the def is not
top-level, it is fully rendered as a local closure.
"""
# collection of all defs available to us in this scope
comp_idents = dict([(c.funcname, c) for c in identifiers.defs])
to_write = set()
# write "context.get()" for all variables we are going to
# need that arent in the namespace yet
to_write = to_write.union(identifiers.undeclared)
# write closure functions for closures that we define
# right here
to_write = to_write.union(
[c.funcname for c in identifiers.closuredefs.values()]
)
# remove identifiers that are declared in the argument
# signature of the callable
to_write = to_write.difference(identifiers.argument_declared)
# remove identifiers that we are going to assign to.
# in this way we mimic Python's behavior,
# i.e. assignment to a variable within a block
# means that variable is now a "locally declared" var,
# which cannot be referenced beforehand.
to_write = to_write.difference(identifiers.locally_declared)
if self.compiler.enable_loop:
has_loop = "loop" in to_write
to_write.discard("loop")
else:
has_loop = False
# if a limiting set was sent, constraint to those items in that list
# (this is used for the caching decorator)
if limit is not None:
to_write = to_write.intersection(limit)
if toplevel and getattr(self.compiler, "has_ns_imports", False):
self.printer.writeline("_import_ns = {}")
self.compiler.has_imports = True
for ident, ns in self.compiler.namespaces.items():
if "import" in ns.attributes:
self.printer.writeline(
"_mako_get_namespace(context, %r)."
"_populate(_import_ns, %r)"
% (
ident,
re.split(r"\s*,\s*", ns.attributes["import"]),
)
)
if has_loop:
self.printer.writeline("loop = __M_loop = runtime.LoopStack()")
for ident in to_write:
if ident in comp_idents:
comp = comp_idents[ident]
if comp.is_block:
if not comp.is_anonymous:
self.write_def_decl(comp, identifiers)
else:
self.write_inline_def(comp, identifiers, nested=True)
else:
if comp.is_root():
self.write_def_decl(comp, identifiers)
else:
self.write_inline_def(comp, identifiers, nested=True)
elif ident in self.compiler.namespaces:
self.printer.writeline(
"%s = _mako_get_namespace(context, %r)" % (ident, ident)
)
else:
if getattr(self.compiler, "has_ns_imports", False):
if self.compiler.strict_undefined:
self.printer.writelines(
"%s = _import_ns.get(%r, UNDEFINED)"
% (ident, ident),
"if %s is UNDEFINED:" % ident,
"try:",
"%s = context[%r]" % (ident, ident),
"except KeyError:",
"raise NameError(\"'%s' is not defined\")" % ident,
None,
None,
)
else:
self.printer.writeline(
"%s = _import_ns.get"
"(%r, context.get(%r, UNDEFINED))"
% (ident, ident, ident)
)
else:
if self.compiler.strict_undefined:
self.printer.writelines(
"try:",
"%s = context[%r]" % (ident, ident),
"except KeyError:",
"raise NameError(\"'%s' is not defined\")" % ident,
None,
)
else:
self.printer.writeline(
"%s = context.get(%r, UNDEFINED)" % (ident, ident)
)
self.printer.writeline("__M_writer = context.writer()")
def write_def_decl(self, node, identifiers):
"""write a locally-available callable referencing a top-level def"""
funcname = node.funcname
namedecls = node.get_argument_expressions()
nameargs = node.get_argument_expressions(as_call=True)
if not self.in_def and (
len(self.identifiers.locally_assigned) > 0
or len(self.identifiers.argument_declared) > 0
):
nameargs.insert(0, "context._locals(__M_locals)")
else:
nameargs.insert(0, "context")
self.printer.writeline("def %s(%s):" % (funcname, ",".join(namedecls)))
self.printer.writeline(
"return render_%s(%s)" % (funcname, ",".join(nameargs))
)
self.printer.writeline(None)
def write_inline_def(self, node, identifiers, nested):
"""write a locally-available def callable inside an enclosing def."""
namedecls = node.get_argument_expressions()
decorator = node.decorator
if decorator:
self.printer.writeline(
"@runtime._decorate_inline(context, %s)" % decorator
)
self.printer.writeline(
"def %s(%s):" % (node.funcname, ",".join(namedecls))
)
filtered = len(node.filter_args.args) > 0
buffered = eval(node.attributes.get("buffered", "False"))
cached = eval(node.attributes.get("cached", "False"))
self.printer.writelines(
# push new frame, assign current frame to __M_caller
"__M_caller = context.caller_stack._push_frame()",
"try:",
)
if buffered or filtered or cached:
self.printer.writelines("context._push_buffer()")
identifiers = identifiers.branch(node, nested=nested)
self.write_variable_declares(identifiers)
self.identifier_stack.append(identifiers)
for n in node.nodes:
n.accept_visitor(self)
self.identifier_stack.pop()
self.write_def_finish(node, buffered, filtered, cached)
self.printer.writeline(None)
if cached:
self.write_cache_decorator(
node,
node.funcname,
namedecls,
False,
identifiers,
inline=True,
toplevel=False,
)
def write_def_finish(
self, node, buffered, filtered, cached, callstack=True
):
"""write the end section of a rendering function, either outermost or
inline.
this takes into account if the rendering function was filtered,
buffered, etc. and closes the corresponding try: block if any, and
writes code to retrieve captured content, apply filters, send proper
return value."""
if not buffered and not cached and not filtered:
self.printer.writeline("return ''")
if callstack:
self.printer.writelines(
"finally:", "context.caller_stack._pop_frame()", None
)
if buffered or filtered or cached:
if buffered or cached:
# in a caching scenario, don't try to get a writer
# from the context after popping; assume the caching
# implemenation might be using a context with no
# extra buffers
self.printer.writelines(
"finally:", "__M_buf = context._pop_buffer()"
)
else:
self.printer.writelines(
"finally:",
"__M_buf, __M_writer = context._pop_buffer_and_writer()",
)
if callstack:
self.printer.writeline("context.caller_stack._pop_frame()")
s = "__M_buf.getvalue()"
if filtered:
s = self.create_filter_callable(
node.filter_args.args, s, False
)
self.printer.writeline(None)
if buffered and not cached:
s = self.create_filter_callable(
self.compiler.buffer_filters, s, False
)
if buffered or cached:
self.printer.writeline("return %s" % s)
else:
self.printer.writelines("__M_writer(%s)" % s, "return ''")
def write_cache_decorator(
self,
node_or_pagetag,
name,
args,
buffered,
identifiers,
inline=False,
toplevel=False,
):
"""write a post-function decorator to replace a rendering
callable with a cached version of itself."""
self.printer.writeline("__M_%s = %s" % (name, name))
cachekey = node_or_pagetag.parsed_attributes.get(
"cache_key", repr(name)
)
cache_args = {}
if self.compiler.pagetag is not None:
cache_args.update(
(pa[6:], self.compiler.pagetag.parsed_attributes[pa])
for pa in self.compiler.pagetag.parsed_attributes
if pa.startswith("cache_") and pa != "cache_key"
)
cache_args.update(
(pa[6:], node_or_pagetag.parsed_attributes[pa])
for pa in node_or_pagetag.parsed_attributes
if pa.startswith("cache_") and pa != "cache_key"
)
if "timeout" in cache_args:
cache_args["timeout"] = int(eval(cache_args["timeout"]))
self.printer.writeline("def %s(%s):" % (name, ",".join(args)))
# form "arg1, arg2, arg3=arg3, arg4=arg4", etc.
pass_args = [
"%s=%s" % ((a.split("=")[0],) * 2) if "=" in a else a for a in args
]
self.write_variable_declares(
identifiers,
toplevel=toplevel,
limit=node_or_pagetag.undeclared_identifiers(),
)
if buffered:
s = (
"context.get('local')."
"cache._ctx_get_or_create("
"%s, lambda:__M_%s(%s), context, %s__M_defname=%r)"
% (
cachekey,
name,
",".join(pass_args),
"".join(
["%s=%s, " % (k, v) for k, v in cache_args.items()]
),
name,
)
)
# apply buffer_filters
s = self.create_filter_callable(
self.compiler.buffer_filters, s, False
)
self.printer.writelines("return " + s, None)
else:
self.printer.writelines(
"__M_writer(context.get('local')."
"cache._ctx_get_or_create("
"%s, lambda:__M_%s(%s), context, %s__M_defname=%r))"
% (
cachekey,
name,
",".join(pass_args),
"".join(
["%s=%s, " % (k, v) for k, v in cache_args.items()]
),
name,
),
"return ''",
None,
)
def create_filter_callable(self, args, target, is_expression):
"""write a filter-applying expression based on the filters
present in the given filter names, adjusting for the global
'default' filter aliases as needed."""
def locate_encode(name):
if re.match(r"decode\..+", name):
return "filters." + name
elif self.compiler.disable_unicode:
return filters.NON_UNICODE_ESCAPES.get(name, name)
else:
return filters.DEFAULT_ESCAPES.get(name, name)
if "n" not in args:
if is_expression:
if self.compiler.pagetag:
args = self.compiler.pagetag.filter_args.args + args
if self.compiler.default_filters and "n" not in args:
args = self.compiler.default_filters + args
for e in args:
# if filter given as a function, get just the identifier portion
if e == "n":
continue
m = re.match(r"(.+?)(\(.*\))", e)
if m:
ident, fargs = m.group(1, 2)
f = locate_encode(ident)
e = f + fargs
else:
e = locate_encode(e)
assert e is not None
target = "%s(%s)" % (e, target)
return target
def visitExpression(self, node):
self.printer.start_source(node.lineno)
if (
len(node.escapes)
or (
self.compiler.pagetag is not None
and len(self.compiler.pagetag.filter_args.args)
)
or len(self.compiler.default_filters)
):
s = self.create_filter_callable(
node.escapes_code.args, "%s" % node.text, True
)
self.printer.writeline("__M_writer(%s)" % s)
else:
self.printer.writeline("__M_writer(%s)" % node.text)
def visitControlLine(self, node):
if node.isend:
self.printer.writeline(None)
if node.has_loop_context:
self.printer.writeline("finally:")
self.printer.writeline("loop = __M_loop._exit()")
self.printer.writeline(None)
else:
self.printer.start_source(node.lineno)
if self.compiler.enable_loop and node.keyword == "for":
text = mangle_mako_loop(node, self.printer)
else:
text = node.text
self.printer.writeline(text)
children = node.get_children()
# this covers the three situations where we want to insert a pass:
# 1) a ternary control line with no children,
# 2) a primary control line with nothing but its own ternary
# and end control lines, and
# 3) any control line with no content other than comments
if not children or (
compat.all(
isinstance(c, (parsetree.Comment, parsetree.ControlLine))
for c in children
)
and compat.all(
(node.is_ternary(c.keyword) or c.isend)
for c in children
if isinstance(c, parsetree.ControlLine)
)
):
self.printer.writeline("pass")
def visitText(self, node):
self.printer.start_source(node.lineno)
self.printer.writeline("__M_writer(%s)" % repr(node.content))
def visitTextTag(self, node):
filtered = len(node.filter_args.args) > 0
if filtered:
self.printer.writelines(
"__M_writer = context._push_writer()", "try:"
)
for n in node.nodes:
n.accept_visitor(self)
if filtered:
self.printer.writelines(
"finally:",
"__M_buf, __M_writer = context._pop_buffer_and_writer()",
"__M_writer(%s)"
% self.create_filter_callable(
node.filter_args.args, "__M_buf.getvalue()", False
),
None,
)
def visitCode(self, node):
if not node.ismodule:
self.printer.write_indented_block(
node.text, starting_lineno=node.lineno
)
if not self.in_def and len(self.identifiers.locally_assigned) > 0:
# if we are the "template" def, fudge locally
# declared/modified variables into the "__M_locals" dictionary,
# which is used for def calls within the same template,
# to simulate "enclosing scope"
self.printer.writeline(
"__M_locals_builtin_stored = __M_locals_builtin()"
)
self.printer.writeline(
"__M_locals.update(__M_dict_builtin([(__M_key,"
" __M_locals_builtin_stored[__M_key]) for __M_key in"
" [%s] if __M_key in __M_locals_builtin_stored]))"
% ",".join([repr(x) for x in node.declared_identifiers()])
)
def visitIncludeTag(self, node):
self.printer.start_source(node.lineno)
args = node.attributes.get("args")
if args:
self.printer.writeline(
"runtime._include_file(context, %s, _template_uri, %s)"
% (node.parsed_attributes["file"], args)
)
else:
self.printer.writeline(
"runtime._include_file(context, %s, _template_uri)"
% (node.parsed_attributes["file"])
)
def visitNamespaceTag(self, node):
pass
def visitDefTag(self, node):
pass
def visitBlockTag(self, node):
if node.is_anonymous:
self.printer.writeline("%s()" % node.funcname)
else:
nameargs = node.get_argument_expressions(as_call=True)
nameargs += ["**pageargs"]
self.printer.writeline(
"if 'parent' not in context._data or "
"not hasattr(context._data['parent'], '%s'):" % node.funcname
)
self.printer.writeline(
"context['self'].%s(%s)" % (node.funcname, ",".join(nameargs))
)
self.printer.writeline("\n")
def visitCallNamespaceTag(self, node):
# TODO: we can put namespace-specific checks here, such
# as ensure the given namespace will be imported,
# pre-import the namespace, etc.
self.visitCallTag(node)
def visitCallTag(self, node):
self.printer.writeline("def ccall(caller):")
export = ["body"]
callable_identifiers = self.identifiers.branch(node, nested=True)
body_identifiers = callable_identifiers.branch(node, nested=False)
# we want the 'caller' passed to ccall to be used
# for the body() function, but for other non-body()
# <%def>s within <%call> we want the current caller
# off the call stack (if any)
body_identifiers.add_declared("caller")
self.identifier_stack.append(body_identifiers)
class DefVisitor(object):
def visitDefTag(s, node):
s.visitDefOrBase(node)
def visitBlockTag(s, node):
s.visitDefOrBase(node)
def visitDefOrBase(s, node):
self.write_inline_def(node, callable_identifiers, nested=False)
if not node.is_anonymous:
export.append(node.funcname)
# remove defs that are within the <%call> from the
# "closuredefs" defined in the body, so they dont render twice
if node.funcname in body_identifiers.closuredefs:
del body_identifiers.closuredefs[node.funcname]
vis = DefVisitor()
for n in node.nodes:
n.accept_visitor(vis)
self.identifier_stack.pop()
bodyargs = node.body_decl.get_argument_expressions()
self.printer.writeline("def body(%s):" % ",".join(bodyargs))
# TODO: figure out best way to specify
# buffering/nonbuffering (at call time would be better)
buffered = False
if buffered:
self.printer.writelines("context._push_buffer()", "try:")
self.write_variable_declares(body_identifiers)
self.identifier_stack.append(body_identifiers)
for n in node.nodes:
n.accept_visitor(self)
self.identifier_stack.pop()
self.write_def_finish(node, buffered, False, False, callstack=False)
self.printer.writelines(None, "return [%s]" % (",".join(export)), None)
self.printer.writelines(
# push on caller for nested call
"context.caller_stack.nextcaller = "
"runtime.Namespace('caller', context, "
"callables=ccall(__M_caller))",
"try:",
)
self.printer.start_source(node.lineno)
self.printer.writelines(
"__M_writer(%s)"
% self.create_filter_callable([], node.expression, True),
"finally:",
"context.caller_stack.nextcaller = None",
None,
)
class _Identifiers(object):
"""tracks the status of identifier names as template code is rendered."""
def __init__(self, compiler, node=None, parent=None, nested=False):
if parent is not None:
# if we are the branch created in write_namespaces(),
# we don't share any context from the main body().
if isinstance(node, parsetree.NamespaceTag):
self.declared = set()
self.topleveldefs = util.SetLikeDict()
else:
# things that have already been declared
# in an enclosing namespace (i.e. names we can just use)
self.declared = (
set(parent.declared)
.union([c.name for c in parent.closuredefs.values()])
.union(parent.locally_declared)
.union(parent.argument_declared)
)
# if these identifiers correspond to a "nested"
# scope, it means whatever the parent identifiers
# had as undeclared will have been declared by that parent,
# and therefore we have them in our scope.
if nested:
self.declared = self.declared.union(parent.undeclared)
# top level defs that are available
self.topleveldefs = util.SetLikeDict(**parent.topleveldefs)
else:
self.declared = set()
self.topleveldefs = util.SetLikeDict()
self.compiler = compiler
# things within this level that are referenced before they
# are declared (e.g. assigned to)
self.undeclared = set()
# things that are declared locally. some of these things
# could be in the "undeclared" list as well if they are
# referenced before declared
self.locally_declared = set()
# assignments made in explicit python blocks.
# these will be propagated to
# the context of local def calls.
self.locally_assigned = set()
# things that are declared in the argument
# signature of the def callable
self.argument_declared = set()
# closure defs that are defined in this level
self.closuredefs = util.SetLikeDict()
self.node = node
if node is not None:
node.accept_visitor(self)
illegal_names = self.compiler.reserved_names.intersection(
self.locally_declared
)
if illegal_names:
raise exceptions.NameConflictError(
"Reserved words declared in template: %s"
% ", ".join(illegal_names)
)
def branch(self, node, **kwargs):
"""create a new Identifiers for a new Node, with
this Identifiers as the parent."""
return _Identifiers(self.compiler, node, self, **kwargs)
@property
def defs(self):
return set(self.topleveldefs.union(self.closuredefs).values())
def __repr__(self):
return (
"Identifiers(declared=%r, locally_declared=%r, "
"undeclared=%r, topleveldefs=%r, closuredefs=%r, "
"argumentdeclared=%r)"
% (
list(self.declared),
list(self.locally_declared),
list(self.undeclared),
[c.name for c in self.topleveldefs.values()],
[c.name for c in self.closuredefs.values()],
self.argument_declared,
)
)
def check_declared(self, node):
"""update the state of this Identifiers with the undeclared
and declared identifiers of the given node."""
for ident in node.undeclared_identifiers():
if ident != "context" and ident not in self.declared.union(
self.locally_declared
):
self.undeclared.add(ident)
for ident in node.declared_identifiers():
self.locally_declared.add(ident)
def add_declared(self, ident):
self.declared.add(ident)
if ident in self.undeclared:
self.undeclared.remove(ident)
def visitExpression(self, node):
self.check_declared(node)
def visitControlLine(self, node):
self.check_declared(node)
def visitCode(self, node):
if not node.ismodule:
self.check_declared(node)
self.locally_assigned = self.locally_assigned.union(
node.declared_identifiers()
)
def visitNamespaceTag(self, node):
# only traverse into the sub-elements of a
# <%namespace> tag if we are the branch created in
# write_namespaces()
if self.node is node:
for n in node.nodes:
n.accept_visitor(self)
def _check_name_exists(self, collection, node):
existing = collection.get(node.funcname)
collection[node.funcname] = node
if (
existing is not None
and existing is not node
and (node.is_block or existing.is_block)
):
raise exceptions.CompileException(
"%%def or %%block named '%s' already "
"exists in this template." % node.funcname,
**node.exception_kwargs
)
def visitDefTag(self, node):
if node.is_root() and not node.is_anonymous:
self._check_name_exists(self.topleveldefs, node)
elif node is not self.node:
self._check_name_exists(self.closuredefs, node)
for ident in node.undeclared_identifiers():
if ident != "context" and ident not in self.declared.union(
self.locally_declared
):
self.undeclared.add(ident)
# visit defs only one level deep
if node is self.node:
for ident in node.declared_identifiers():
self.argument_declared.add(ident)
for n in node.nodes:
n.accept_visitor(self)
def visitBlockTag(self, node):
if node is not self.node and not node.is_anonymous:
if isinstance(self.node, parsetree.DefTag):
raise exceptions.CompileException(
"Named block '%s' not allowed inside of def '%s'"
% (node.name, self.node.name),
**node.exception_kwargs
)
elif isinstance(
self.node, (parsetree.CallTag, parsetree.CallNamespaceTag)
):
raise exceptions.CompileException(
"Named block '%s' not allowed inside of <%%call> tag"
% (node.name,),
**node.exception_kwargs
)
for ident in node.undeclared_identifiers():
if ident != "context" and ident not in self.declared.union(
self.locally_declared
):
self.undeclared.add(ident)
if not node.is_anonymous:
self._check_name_exists(self.topleveldefs, node)
self.undeclared.add(node.funcname)
elif node is not self.node:
self._check_name_exists(self.closuredefs, node)
for ident in node.declared_identifiers():
self.argument_declared.add(ident)
for n in node.nodes:
n.accept_visitor(self)
def visitTextTag(self, node):
for ident in node.undeclared_identifiers():
if ident != "context" and ident not in self.declared.union(
self.locally_declared
):
self.undeclared.add(ident)
def visitIncludeTag(self, node):
self.check_declared(node)
def visitPageTag(self, node):
for ident in node.declared_identifiers():
self.argument_declared.add(ident)
self.check_declared(node)
def visitCallNamespaceTag(self, node):
self.visitCallTag(node)
def visitCallTag(self, node):
if node is self.node:
for ident in node.undeclared_identifiers():
if ident != "context" and ident not in self.declared.union(
self.locally_declared
):
self.undeclared.add(ident)
for ident in node.declared_identifiers():
self.argument_declared.add(ident)
for n in node.nodes:
n.accept_visitor(self)
else:
for ident in node.undeclared_identifiers():
if ident != "context" and ident not in self.declared.union(
self.locally_declared
):
self.undeclared.add(ident)
_FOR_LOOP = re.compile(
r"^for\s+((?:\(?)\s*[A-Za-z_][A-Za-z_0-9]*"
r"(?:\s*,\s*(?:[A-Za-z_][A-Za-z0-9_]*),??)*\s*(?:\)?))\s+in\s+(.*):"
)
def mangle_mako_loop(node, printer):
"""converts a for loop into a context manager wrapped around a for loop
when access to the `loop` variable has been detected in the for loop body
"""
loop_variable = LoopVariable()
node.accept_visitor(loop_variable)
if loop_variable.detected:
node.nodes[-1].has_loop_context = True
match = _FOR_LOOP.match(node.text)
if match:
printer.writelines(
"loop = __M_loop._enter(%s)" % match.group(2),
"try:"
# 'with __M_loop(%s) as loop:' % match.group(2)
)
text = "for %s in loop:" % match.group(1)
else:
raise SyntaxError("Couldn't apply loop context: %s" % node.text)
else:
text = node.text
return text
class LoopVariable(object):
"""A node visitor which looks for the name 'loop' within undeclared
identifiers."""
def __init__(self):
self.detected = False
def _loop_reference_detected(self, node):
if "loop" in node.undeclared_identifiers():
self.detected = True
else:
for n in node.get_children():
n.accept_visitor(self)
def visitControlLine(self, node):
self._loop_reference_detected(node)
def visitCode(self, node):
self._loop_reference_detected(node)
def visitExpression(self, node):
self._loop_reference_detected(node)
================================================
FILE: 3rd_party/common/site-packages/mako/compat.py
================================================
# mako/compat.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
import collections
import inspect
import sys
py3k = sys.version_info >= (3, 0)
py2k = sys.version_info < (3,)
py27 = sys.version_info >= (2, 7)
jython = sys.platform.startswith("java")
win32 = sys.platform.startswith("win")
pypy = hasattr(sys, "pypy_version_info")
ArgSpec = collections.namedtuple(
"ArgSpec", ["args", "varargs", "keywords", "defaults"]
)
def inspect_getargspec(func):
"""getargspec based on fully vendored getfullargspec from Python 3.3."""
if inspect.ismethod(func):
func = func.__func__
if not inspect.isfunction(func):
raise TypeError("{!r} is not a Python function".format(func))
co = func.__code__
if not inspect.iscode(co):
raise TypeError("{!r} is not a code object".format(co))
nargs = co.co_argcount
names = co.co_varnames
nkwargs = co.co_kwonlyargcount if py3k else 0
args = list(names[:nargs])
nargs += nkwargs
varargs = None
if co.co_flags & inspect.CO_VARARGS:
varargs = co.co_varnames[nargs]
nargs = nargs + 1
varkw = None
if co.co_flags & inspect.CO_VARKEYWORDS:
varkw = co.co_varnames[nargs]
return ArgSpec(args, varargs, varkw, func.__defaults__)
if py3k:
from io import StringIO
import builtins as compat_builtins
from urllib.parse import quote_plus, unquote_plus
from html.entities import codepoint2name, name2codepoint
string_types = (str,)
binary_type = bytes
text_type = str
from io import BytesIO as byte_buffer
def u(s):
return s
def b(s):
return s.encode("latin-1")
def octal(lit):
return eval("0o" + lit)
else:
import __builtin__ as compat_builtins # noqa
try:
from cStringIO import StringIO
except:
from StringIO import StringIO
byte_buffer = StringIO
from urllib import quote_plus, unquote_plus # noqa
from htmlentitydefs import codepoint2name, name2codepoint # noqa
string_types = (basestring,) # noqa
binary_type = str
text_type = unicode # noqa
def u(s):
return unicode(s, "utf-8") # noqa
def b(s):
return s
def octal(lit):
return eval("0" + lit)
if py3k:
from importlib import machinery, util
if hasattr(util, 'module_from_spec'):
# Python 3.5+
def load_module(module_id, path):
spec = util.spec_from_file_location(module_id, path)
module = util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
else:
def load_module(module_id, path):
module = machinery.SourceFileLoader(module_id, path).load_module()
del sys.modules[module_id]
return module
else:
import imp
def load_module(module_id, path):
fp = open(path, "rb")
try:
module = imp.load_source(module_id, path, fp)
del sys.modules[module_id]
return module
finally:
fp.close()
if py3k:
def reraise(tp, value, tb=None, cause=None):
if cause is not None:
value.__cause__ = cause
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
raise value
else:
exec(
"def reraise(tp, value, tb=None, cause=None):\n"
" raise tp, value, tb\n"
)
def exception_as():
return sys.exc_info()[1]
all = all # noqa
def exception_name(exc):
return exc.__class__.__name__
################################################
# cross-compatible metaclass implementation
# Copyright (c) 2010-2012 Benjamin Peterson
def with_metaclass(meta, base=object):
"""Create a base class with a metaclass."""
return meta("%sBase" % meta.__name__, (base,), {})
################################################
def arg_stringname(func_arg):
"""Gets the string name of a kwarg or vararg
In Python3.4 a function's args are
of _ast.arg type not _ast.name
"""
if hasattr(func_arg, "arg"):
return func_arg.arg
else:
return str(func_arg)
================================================
FILE: 3rd_party/common/site-packages/mako/exceptions.py
================================================
# mako/exceptions.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""exception classes"""
import sys
import traceback
from mako import compat
from mako import util
class MakoException(Exception):
pass
class RuntimeException(MakoException):
pass
def _format_filepos(lineno, pos, filename):
if filename is None:
return " at line: %d char: %d" % (lineno, pos)
else:
return " in file '%s' at line: %d char: %d" % (filename, lineno, pos)
class CompileException(MakoException):
def __init__(self, message, source, lineno, pos, filename):
MakoException.__init__(
self, message + _format_filepos(lineno, pos, filename)
)
self.lineno = lineno
self.pos = pos
self.filename = filename
self.source = source
class SyntaxException(MakoException):
def __init__(self, message, source, lineno, pos, filename):
MakoException.__init__(
self, message + _format_filepos(lineno, pos, filename)
)
self.lineno = lineno
self.pos = pos
self.filename = filename
self.source = source
class UnsupportedError(MakoException):
"""raised when a retired feature is used."""
class NameConflictError(MakoException):
"""raised when a reserved word is used inappropriately"""
class TemplateLookupException(MakoException):
pass
class TopLevelLookupException(TemplateLookupException):
pass
class RichTraceback(object):
"""Pull the current exception from the ``sys`` traceback and extracts
Mako-specific template information.
See the usage examples in :ref:`handling_exceptions`.
"""
def __init__(self, error=None, traceback=None):
self.source, self.lineno = "", 0
if error is None or traceback is None:
t, value, tback = sys.exc_info()
if error is None:
error = value or t
if traceback is None:
traceback = tback
self.error = error
self.records = self._init(traceback)
if isinstance(self.error, (CompileException, SyntaxException)):
self.source = self.error.source
self.lineno = self.error.lineno
self._has_source = True
self._init_message()
@property
def errorname(self):
return compat.exception_name(self.error)
def _init_message(self):
"""Find a unicode representation of self.error"""
try:
self.message = compat.text_type(self.error)
except UnicodeError:
try:
self.message = str(self.error)
except UnicodeEncodeError:
# Fallback to args as neither unicode nor
# str(Exception(u'\xe6')) work in Python < 2.6
self.message = self.error.args[0]
if not isinstance(self.message, compat.text_type):
self.message = compat.text_type(self.message, "ascii", "replace")
def _get_reformatted_records(self, records):
for rec in records:
if rec[6] is not None:
yield (rec[4], rec[5], rec[2], rec[6])
else:
yield tuple(rec[0:4])
@property
def traceback(self):
"""Return a list of 4-tuple traceback records (i.e. normal python
format) with template-corresponding lines remapped to the originating
template.
"""
return list(self._get_reformatted_records(self.records))
@property
def reverse_records(self):
return reversed(self.records)
@property
def reverse_traceback(self):
"""Return the same data as traceback, except in reverse order.
"""
return list(self._get_reformatted_records(self.reverse_records))
def _init(self, trcback):
"""format a traceback from sys.exc_info() into 7-item tuples,
containing the regular four traceback tuple items, plus the original
template filename, the line number adjusted relative to the template
source, and code line from that line number of the template."""
import mako.template
mods = {}
rawrecords = traceback.extract_tb(trcback)
new_trcback = []
for filename, lineno, function, line in rawrecords:
if not line:
line = ""
try:
(line_map, template_lines, template_filename) = mods[filename]
except KeyError:
try:
info = mako.template._get_module_info(filename)
module_source = info.code
template_source = info.source
template_filename = (
info.template_filename or info.template_uri or filename
)
except KeyError:
# A normal .py file (not a Template)
if not compat.py3k:
try:
fp = open(filename, "rb")
encoding = util.parse_encoding(fp)
fp.close()
except IOError:
encoding = None
if encoding:
line = line.decode(encoding)
else:
line = line.decode("ascii", "replace")
new_trcback.append(
(
filename,
lineno,
function,
line,
None,
None,
None,
None,
)
)
continue
template_ln = 1
mtm = mako.template.ModuleInfo
source_map = mtm.get_module_source_metadata(
module_source, full_line_map=True
)
line_map = source_map["full_line_map"]
template_lines = [
line_ for line_ in template_source.split("\n")
]
mods[filename] = (line_map, template_lines, template_filename)
template_ln = line_map[lineno - 1]
if template_ln <= len(template_lines):
template_line = template_lines[template_ln - 1]
else:
template_line = None
new_trcback.append(
(
filename,
lineno,
function,
line,
template_filename,
template_ln,
template_line,
template_source,
)
)
if not self.source:
for l in range(len(new_trcback) - 1, 0, -1):
if new_trcback[l][5]:
self.source = new_trcback[l][7]
self.lineno = new_trcback[l][5]
break
else:
if new_trcback:
try:
# A normal .py file (not a Template)
fp = open(new_trcback[-1][0], "rb")
encoding = util.parse_encoding(fp)
if compat.py3k and not encoding:
encoding = "utf-8"
fp.seek(0)
self.source = fp.read()
fp.close()
if encoding:
self.source = self.source.decode(encoding)
except IOError:
self.source = ""
self.lineno = new_trcback[-1][1]
return new_trcback
def text_error_template(lookup=None):
"""Provides a template that renders a stack trace in a similar format to
the Python interpreter, substituting source template filenames, line
numbers and code for that of the originating source template, as
applicable.
"""
import mako.template
return mako.template.Template(
r"""
<%page args="error=None, traceback=None"/>
<%!
from mako.exceptions import RichTraceback
%>\
<%
tback = RichTraceback(error=error, traceback=traceback)
%>\
Traceback (most recent call last):
% for (filename, lineno, function, line) in tback.traceback:
File "${filename}", line ${lineno}, in ${function or '?'}
${line | trim}
% endfor
${tback.errorname}: ${tback.message}
"""
)
def _install_pygments():
global syntax_highlight, pygments_html_formatter
from mako.ext.pygmentplugin import syntax_highlight # noqa
from mako.ext.pygmentplugin import pygments_html_formatter # noqa
def _install_fallback():
global syntax_highlight, pygments_html_formatter
from mako.filters import html_escape
pygments_html_formatter = None
def syntax_highlight(filename="", language=None):
return html_escape
def _install_highlighting():
try:
_install_pygments()
except ImportError:
_install_fallback()
_install_highlighting()
def html_error_template():
"""Provides a template that renders a stack trace in an HTML format,
providing an excerpt of code as well as substituting source template
filenames, line numbers and code for that of the originating source
template, as applicable.
The template's default ``encoding_errors`` value is
``'htmlentityreplace'``. The template has two options. With the
``full`` option disabled, only a section of an HTML document is
returned. With the ``css`` option disabled, the default stylesheet
won't be included.
"""
import mako.template
return mako.template.Template(
r"""
<%!
from mako.exceptions import RichTraceback, syntax_highlight,\
pygments_html_formatter
%>
<%page args="full=True, css=True, error=None, traceback=None"/>
% if full:
<html>
<head>
<title>Mako Runtime Error</title>
% endif
% if css:
<style>
body { font-family:verdana; margin:10px 30px 10px 30px;}
.stacktrace { margin:5px 5px 5px 5px; }
.highlight { padding:0px 10px 0px 10px; background-color:#9F9FDF; }
.nonhighlight { padding:0px; background-color:#DFDFDF; }
.sample { padding:10px; margin:10px 10px 10px 10px;
font-family:monospace; }
.sampleline { padding:0px 10px 0px 10px; }
.sourceline { margin:5px 5px 10px 5px; font-family:monospace;}
.location { font-size:80%; }
.highlight { white-space:pre; }
.sampleline { white-space:pre; }
% if pygments_html_formatter:
${pygments_html_formatter.get_style_defs()}
.linenos { min-width: 2.5em; text-align: right; }
pre { margin: 0; }
.syntax-highlighted { padding: 0 10px; }
.syntax-highlightedtable { border-spacing: 1px; }
.nonhighlight { border-top: 1px solid #DFDFDF;
border-bottom: 1px solid #DFDFDF; }
.stacktrace .nonhighlight { margin: 5px 15px 10px; }
.sourceline { margin: 0 0; font-family:monospace; }
.code { background-color: #F8F8F8; width: 100%; }
.error .code { background-color: #FFBDBD; }
.error .syntax-highlighted { background-color: #FFBDBD; }
% endif
</style>
% endif
% if full:
</head>
<body>
% endif
<h2>Error !</h2>
<%
tback = RichTraceback(error=error, traceback=traceback)
src = tback.source
line = tback.lineno
if src:
lines = src.split('\n')
else:
lines = None
%>
<h3>${tback.errorname}: ${tback.message|h}</h3>
% if lines:
<div class="sample">
<div class="nonhighlight">
% for index in range(max(0, line-4),min(len(lines), line+5)):
<%
if pygments_html_formatter:
pygments_html_formatter.linenostart = index + 1
%>
% if index + 1 == line:
<%
if pygments_html_formatter:
old_cssclass = pygments_html_formatter.cssclass
pygments_html_formatter.cssclass = 'error ' + old_cssclass
%>
${lines[index] | syntax_highlight(language='mako')}
<%
if pygments_html_formatter:
pygments_html_formatter.cssclass = old_cssclass
%>
% else:
${lines[index] | syntax_highlight(language='mako')}
% endif
% endfor
</div>
</div>
% endif
<div class="stacktrace">
% for (filename, lineno, function, line) in tback.reverse_traceback:
<div class="location">${filename}, line ${lineno}:</div>
<div class="nonhighlight">
<%
if pygments_html_formatter:
pygments_html_formatter.linenostart = lineno
%>
<div class="sourceline">${line | syntax_highlight(filename)}</div>
</div>
% endfor
</div>
% if full:
</body>
</html>
% endif
""",
output_encoding=sys.getdefaultencoding(),
encoding_errors="htmlentityreplace",
)
================================================
FILE: 3rd_party/common/site-packages/mako/ext/__init__.py
================================================
================================================
FILE: 3rd_party/common/site-packages/mako/ext/autohandler.py
================================================
# ext/autohandler.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""adds autohandler functionality to Mako templates.
requires that the TemplateLookup class is used with templates.
usage::
<%!
from mako.ext.autohandler import autohandler
%>
<%inherit file="${autohandler(template, context)}"/>
or with custom autohandler filename::
<%!
from mako.ext.autohandler import autohandler
%>
<%inherit file="${autohandler(template, context, name='somefilename')}"/>
"""
import os
import posixpath
import re
def autohandler(template, context, name="autohandler"):
lookup = context.lookup
_template_uri = template.module._template_uri
if not lookup.filesystem_checks:
try:
return lookup._uri_cache[(autohandler, _template_uri, name)]
except KeyError:
pass
tokens = re.findall(r"([^/]+)", posixpath.dirname(_template_uri)) + [name]
while len(tokens):
path = "/" + "/".join(tokens)
if path != _template_uri and _file_exists(lookup, path):
if not lookup.filesystem_checks:
return lookup._uri_cache.setdefault(
(autohandler, _template_uri, name), path
)
else:
return path
if len(tokens) == 1:
break
tokens[-2:] = [name]
if not lookup.filesystem_checks:
return lookup._uri_cache.setdefault(
(autohandler, _template_uri, name), None
)
else:
return None
def _file_exists(lookup, path):
psub = re.sub(r"^/", "", path)
for d in lookup.directories:
if os.path.exists(d + "/" + psub):
return True
else:
return False
================================================
FILE: 3rd_party/common/site-packages/mako/ext/babelplugin.py
================================================
# ext/babelplugin.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""gettext message extraction via Babel: http://babel.edgewall.org/"""
from babel.messages.extract import extract_python
from mako.ext.extract import MessageExtractor
class BabelMakoExtractor(MessageExtractor):
def __init__(self, keywords, comment_tags, options):
self.keywords = keywords
self.options = options
self.config = {
"comment-tags": u" ".join(comment_tags),
"encoding": options.get(
"input_encoding", options.get("encoding", None)
),
}
super(BabelMakoExtractor, self).__init__()
def __call__(self, fileobj):
return self.process_file(fileobj)
def process_python(self, code, code_lineno, translator_strings):
comment_tags = self.config["comment-tags"]
for (
lineno,
funcname,
messages,
python_translator_comments,
) in extract_python(code, self.keywords, comment_tags, self.options):
yield (
code_lineno + (lineno - 1),
funcname,
messages,
translator_strings + python_translator_comments,
)
def extract(fileobj, keywords, comment_tags, options):
"""Extract messages from Mako templates.
:param fileobj: the file-like object the messages should be extracted from
:param keywords: a list of keywords (i.e. function names) that should be
recognized as translation functions
:param comment_tags: a list of translator tags to search for and include
in the results
:param options: a dictionary of additional options (optional)
:return: an iterator over ``(lineno, funcname, message, comments)`` tuples
:rtype: ``iterator``
"""
extractor = BabelMakoExtractor(keywords, comment_tags, options)
for message in extractor(fileobj):
yield message
================================================
FILE: 3rd_party/common/site-packages/mako/ext/beaker_cache.py
================================================
# ext/beaker_cache.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""Provide a :class:`.CacheImpl` for the Beaker caching system."""
from mako import exceptions
from mako.cache import CacheImpl
try:
from beaker import cache as beaker_cache
except:
has_beaker = False
else:
has_beaker = True
_beaker_cache = None
class BeakerCacheImpl(CacheImpl):
"""A :class:`.CacheImpl` provided for the Beaker caching system.
This plugin is used by default, based on the default
value of ``'beaker'`` for the ``cache_impl`` parameter of the
:class:`.Template` or :class:`.TemplateLookup` classes.
"""
def __init__(self, cache):
if not has_beaker:
raise exceptions.RuntimeException(
"Can't initialize Beaker plugin; Beaker is not installed."
)
global _beaker_cache
if _beaker_cache is None:
if "manager" in cache.template.cache_args:
_beaker_cache = cache.template.cache_args["manager"]
else:
_beaker_cache = beaker_cache.CacheManager()
super(BeakerCacheImpl, self).__init__(cache)
def _get_cache(self, **kw):
expiretime = kw.pop("timeout", None)
if "dir" in kw:
kw["data_dir"] = kw.pop("dir")
elif self.cache.template.module_directory:
kw["data_dir"] = self.cache.template.module_directory
if "manager" in kw:
kw.pop("manager")
if kw.get("type") == "memcached":
kw["type"] = "ext:memcached"
if "region" in kw:
region = kw.pop("region")
cache = _beaker_cache.get_cache_region(self.cache.id, region, **kw)
else:
cache = _beaker_cache.get_cache(self.cache.id, **kw)
cache_args = {"starttime": self.cache.starttime}
if expiretime:
cache_args["expiretime"] = expiretime
return cache, cache_args
def get_or_create(self, key, creation_function, **kw):
cache, kw = self._get_cache(**kw)
return cache.get(key, createfunc=creation_function, **kw)
def put(self, key, value, **kw):
cache, kw = self._get_cache(**kw)
cache.put(key, value, **kw)
def get(self, key, **kw):
cache, kw = self._get_cache(**kw)
return cache.get(key, **kw)
def invalidate(self, key, **kw):
cache, kw = self._get_cache(**kw)
cache.remove_value(key, **kw)
================================================
FILE: 3rd_party/common/site-packages/mako/ext/extract.py
================================================
# ext/extract.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
import re
from mako import compat
from mako import lexer
from mako import parsetree
class MessageExtractor(object):
def process_file(self, fileobj):
template_node = lexer.Lexer(
fileobj.read(), input_encoding=self.config["encoding"]
).parse()
for extracted in self.extract_nodes(template_node.get_children()):
yield extracted
def extract_nodes(self, nodes):
translator_comments = []
in_translator_comments = False
input_encoding = self.config["encoding"] or "ascii"
comment_tags = list(
filter(None, re.split(r"\s+", self.config["comment-tags"]))
)
for node in nodes:
child_nodes = None
if (
in_translator_comments
and isinstance(node, parsetree.Text)
and not node.content.strip()
):
# Ignore whitespace within translator comments
continue
if isinstance(node, parsetree.Comment):
value = node.text.strip()
if in_translator_comments:
translator_comments.extend(
self._split_comment(node.lineno, value)
)
continue
for comment_tag in comment_tags:
if value.startswith(comment_tag):
in_translator_comments = True
translator_comments.extend(
self._split_comment(node.lineno, value)
)
continue
if isinstance(node, parsetree.DefTag):
code = node.function_decl.code
child_nodes = node.nodes
elif isinstance(node, parsetree.BlockTag):
code = node.body_decl.code
child_nodes = node.nodes
elif isinstance(node, parsetree.CallTag):
code = node.code.code
child_nodes = node.nodes
elif isinstance(node, parsetree.PageTag):
code = node.body_decl.code
elif isinstance(node, parsetree.CallNamespaceTag):
code = node.expression
child_nodes = node.nodes
elif isinstance(node, parsetree.ControlLine):
if node.isend:
in_translator_comments = False
continue
code = node.text
elif isinstance(node, parsetree.Code):
in_translator_comments = False
code = node.code.code
elif isinstance(node, parsetree.Expression):
code = node.code.code
else:
continue
# Comments don't apply unless they immediately precede the message
if (
translator_comments
and translator_comments[-1][0] < node.lineno - 1
):
translator_comments = []
translator_strings = [
comment[1] for comment in translator_comments
]
if isinstance(code, compat.text_type):
code = code.encode(input_encoding, "backslashreplace")
used_translator_comments = False
# We add extra newline to work around a pybabel bug
# (see python-babel/babel#274, parse_encoding dies if the first
# input string of the input is non-ascii)
# Also, because we added it, we have to subtract one from
# node.lineno
code = compat.byte_buffer(compat.b("\n") + code)
for message in self.process_python(
code, node.lineno - 1, translator_strings
):
yield message
used_translator_comments = True
if used_translator_comments:
translator_comments = []
in_translator_comments = False
if child_nodes:
for extracted in self.extract_nodes(child_nodes):
yield extracted
@staticmethod
def _split_comment(lineno, comment):
"""Return the multiline comment at lineno split into a list of
comment line numbers and the accompanying comment line"""
return [
(lineno + index, line)
for index, line in enumerate(comment.splitlines())
]
================================================
FILE: 3rd_party/common/site-packages/mako/ext/linguaplugin.py
================================================
# ext/linguaplugin.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
import io
from lingua.extractors import Extractor
from lingua.extractors import get_extractor
from lingua.extractors import Message
from mako import compat
from mako.ext.extract import MessageExtractor
class LinguaMakoExtractor(Extractor, MessageExtractor):
"""Mako templates"""
extensions = [".mako"]
default_config = {"encoding": "utf-8", "comment-tags": ""}
def __call__(self, filename, options, fileobj=None):
self.options = options
self.filename = filename
self.python_extractor = get_extractor("x.py")
if fileobj is None:
fileobj = open(filename, "rb")
must_close = True
else:
must_close = False
try:
for message in self.process_file(fileobj):
yield message
finally:
if must_close:
fileobj.close()
def process_python(self, code, code_lineno, translator_strings):
source = code.getvalue().strip()
if source.endswith(compat.b(":")):
if source in (
compat.b("try:"),
compat.b("else:"),
) or source.startswith(compat.b("except")):
source = compat.b("") # Ignore try/except and else
elif source.startswith(compat.b("elif")):
source = source[2:] # Replace "elif" with "if"
source += compat.b("pass")
code = io.BytesIO(source)
for msg in self.python_extractor(
self.filename, self.options, code, code_lineno - 1
):
if translator_strings:
msg = Message(
msg.msgctxt,
msg.msgid,
msg.msgid_plural,
msg.flags,
compat.u(" ").join(translator_strings + [msg.comment]),
msg.tcomment,
msg.location,
)
yield msg
================================================
FILE: 3rd_party/common/site-packages/mako/ext/preprocessors.py
================================================
# ext/preprocessors.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""preprocessing functions, used with the 'preprocessor'
argument on Template, TemplateLookup"""
import re
def convert_comments(text):
"""preprocess old style comments.
example:
from mako.ext.preprocessors import convert_comments
t = Template(..., preprocessor=convert_comments)"""
return re.sub(r"(?<=\n)\s*#[^#]", "##", text)
================================================
FILE: 3rd_party/common/site-packages/mako/ext/pygmentplugin.py
================================================
# ext/pygmentplugin.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
from pygments import highlight
from pygments.formatters.html import HtmlFormatter
from pygments.lexer import bygroups
from pygments.lexer import DelegatingLexer
from pygments.lexer import include
from pygments.lexer import RegexLexer
from pygments.lexer import using
from pygments.lexers.agile import Python3Lexer
from pygments.lexers.agile import PythonLexer
from pygments.lexers.web import CssLexer
from pygments.lexers.web import HtmlLexer
from pygments.lexers.web import JavascriptLexer
from pygments.lexers.web import XmlLexer
from pygments.token import Comment
from pygments.token import Keyword
from pygments.token import Name
from pygments.token import Operator
from pygments.token import Other
from pygments.token import String
from pygments.token import Text
from mako import compat
class MakoLexer(RegexLexer):
name = "Mako"
aliases = ["mako"]
filenames = ["*.mao"]
tokens = {
"root": [
(
r"(\s*)(\%)(\s*end(?:\w+))(\n|\Z)",
bygroups(Text, Comment.Preproc, Keyword, Other),
),
(
r"(\s*)(\%(?!%))([^\n]*)(\n|\Z)",
bygroups(Text, Comment.Preproc, using(PythonLexer), Other),
),
(
r"(\s*)(##[^\n]*)(\n|\Z)",
bygroups(Text, Comment.Preproc, Other),
),
(r"""(?s)<%doc>.*?</%doc>""", Comment.Preproc),
(
r"(<%)([\w\.\:]+)",
bygroups(Comment.Preproc, Name.Builtin),
"tag",
),
(
r"(</%)([\w\.\:]+)(>)",
bygroups(Comment.Preproc, Name.Builtin, Comment.Preproc),
),
(r"<%(?=([\w\.\:]+))", Comment.Preproc, "ondeftags"),
(
r"(?s)(<%(?:!?))(.*?)(%>)",
bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc),
),
(
r"(\$\{)(.*?)(\})",
bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc),
),
(
r"""(?sx)
(.+?) # anything, followed by:
(?:
(?<=\n)(?=%(?!%)|\#\#) | # an eval or comment line
(?=\#\*) | # multiline comment
(?=</?%) | # a python block
# call start or end
(?=\$\{) | # a substitution
(?<=\n)(?=\s*%) |
# - don't consume
(\\\n) | # an escaped newline
\Z # end of string
)
""",
bygroups(Other, Operator),
),
(r"\s+", Text),
],
"ondeftags": [
(r"<%", Comment.Preproc),
(r"(?<=<%)(include|inherit|namespace|page)", Name.Builtin),
include("tag"),
],
"tag": [
(r'((?:\w+)\s*=)\s*(".*?")', bygroups(Name.Attribute, String)),
(r"/?\s*>", Comment.Preproc, "#pop"),
(r"\s+", Text),
],
"attr": [
('".*?"', String, "#pop"),
("'.*?'", String, "#pop"),
(r"[^\s>]+", String, "#pop"),
],
}
class MakoHtmlLexer(DelegatingLexer):
name = "HTML+Mako"
aliases = ["html+mako"]
def __init__(self, **options):
super(MakoHtmlLexer, self).__init__(HtmlLexer, MakoLexer, **options)
class MakoXmlLexer(DelegatingLexer):
name = "XML+Mako"
aliases = ["xml+mako"]
def __init__(self, **options):
super(MakoXmlLexer, self).__init__(XmlLexer, MakoLexer, **options)
class MakoJavascriptLexer(DelegatingLexer):
name = "JavaScript+Mako"
aliases = ["js+mako", "javascript+mako"]
def __init__(self, **options):
super(MakoJavascriptLexer, self).__init__(
JavascriptLexer, MakoLexer, **options
)
class MakoCssLexer(DelegatingLexer):
name = "CSS+Mako"
aliases = ["css+mako"]
def __init__(self, **options):
super(MakoCssLexer, self).__init__(CssLexer, MakoLexer, **options)
pygments_html_formatter = HtmlFormatter(
cssclass="syntax-highlighted", linenos=True
)
def syntax_highlight(filename="", language=None):
mako_lexer = MakoLexer()
if compat.py3k:
python_lexer = Python3Lexer()
else:
python_lexer = PythonLexer()
if filename.startswith("memory:") or language == "mako":
return lambda string: highlight(
string, mako_lexer, pygments_html_formatter
)
return lambda string: highlight(
string, python_lexer, pygments_html_formatter
)
================================================
FILE: 3rd_party/common/site-packages/mako/ext/turbogears.py
================================================
# ext/turbogears.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
from mako import compat
from mako.lookup import TemplateLookup
from mako.template import Template
class TGPlugin(object):
"""TurboGears compatible Template Plugin."""
def __init__(self, extra_vars_func=None, options=None, extension="mak"):
self.extra_vars_func = extra_vars_func
self.extension = extension
if not options:
options = {}
# Pull the options out and initialize the lookup
lookup_options = {}
for k, v in options.items():
if k.startswith("mako."):
lookup_options[k[5:]] = v
elif k in ["directories", "filesystem_checks", "module_directory"]:
lookup_options[k] = v
self.lookup = TemplateLookup(**lookup_options)
self.tmpl_options = {}
# transfer lookup args to template args, based on those available
# in getargspec
for kw in compat.inspect_getargspec(Template.__init__)[0]:
if kw in lookup_options:
self.tmpl_options[kw] = lookup_options[kw]
def load_template(self, templatename, template_string=None):
"""Loads a template from a file or a string"""
if template_string is not None:
return Template(template_string, **self.tmpl_options)
# Translate TG dot notation to normal / template path
if "/" not in templatename:
templatename = (
"/" + templatename.replace(".", "/") + "." + self.extension
)
# Lookup template
return self.lookup.get_template(templatename)
def render(
self, info, format="html", fragment=False, template=None # noqa
):
if isinstance(template, compat.string_types):
template = self.load_template(template)
# Load extra vars func if provided
if self.extra_vars_func:
info.update(self.extra_vars_func())
return template.render(**info)
================================================
FILE: 3rd_party/common/site-packages/mako/filters.py
================================================
# mako/filters.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
import codecs
import re
from mako import compat
from mako.compat import codepoint2name
from mako.compat import name2codepoint
from mako.compat import quote_plus
from mako.compat import unquote_plus
xml_escapes = {
"&": "&",
">": ">",
"<": "<",
'"': """, # also " in html-only
"'": "'", # also ' in html-only
}
# XXX: " is valid in HTML and XML
# ' is not valid HTML, but is valid XML
def legacy_html_escape(s):
"""legacy HTML escape for non-unicode mode."""
s = s.replace("&", "&")
s = s.replace(">", ">")
s = s.replace("<", "<")
s = s.replace('"', """)
s = s.replace("'", "'")
return s
try:
import markupsafe
html_escape = markupsafe.escape
except ImportError:
html_escape = legacy_html_escape
def xml_escape(string):
return re.sub(r'([&<"\'>])', lambda m: xml_escapes[m.group()], string)
def url_escape(string):
# convert into a list of octets
string = string.encode("utf8")
return quote_plus(string)
def legacy_url_escape(string):
# convert into a list of octets
return quote_plus(string)
def url_unescape(string):
text = unquote_plus(string)
if not is_ascii_str(text):
text = text.decode("utf8")
return text
def trim(string):
return string.strip()
class Decode(object):
def __getattr__(self, key):
def decode(x):
if isinstance(x, compat.text_type):
return x
elif not isinstance(x, compat.binary_type):
return decode(str(x))
else:
return compat.text_type(x, encoding=key)
return decode
decode = Decode()
_ASCII_re = re.compile(r"\A[\x00-\x7f]*\Z")
def is_ascii_str(text):
return isinstance(text, str) and _ASCII_re.match(text)
################################################################
class XMLEntityEscaper(object):
def __init__(self, codepoint2name, name2codepoint):
self.codepoint2entity = dict(
[
(c, compat.text_type("&%s;" % n))
for c, n in codepoint2name.items()
]
)
self.name2codepoint = name2codepoint
def escape_entities(self, text):
"""Replace characters with their character entity references.
Only characters corresponding to a named entity are replaced.
"""
return compat.text_type(text).translate(self.codepoint2entity)
def __escape(self, m):
codepoint = ord(m.group())
try:
return self.codepoint2entity[codepoint]
except (KeyError, IndexError):
return "&#x%X;" % codepoint
__escapable = re.compile(r'["&<>]|[^\x00-\x7f]')
def escape(self, text):
"""Replace characters with their character references.
Replace characters by their named entity references.
Non-ASCII characters, if they do not have a named entity reference,
are replaced by numerical character references.
The return value is guaranteed to be ASCII.
"""
return self.__escapable.sub(
self.__escape, compat.text_type(text)
).encode("ascii")
# XXX: This regexp will not match all valid XML entity names__.
# (It punts on details involving involving CombiningChars and Extenders.)
#
# .. __: http://www.w3.org/TR/2000/REC-xml-20001006#NT-EntityRef
__characterrefs = re.compile(
r"""& (?:
\#(\d+)
| \#x([\da-f]+)
| ( (?!\d) [:\w] [-.:\w]+ )
) ;""",
re.X | re.UNICODE,
)
def __unescape(self, m):
dval, hval, name = m.groups()
if dval:
codepoint = int(dval)
elif hval:
codepoint = int(hval, 16)
else:
codepoint = self.name2codepoint.get(name, 0xFFFD)
# U+FFFD = "REPLACEMENT CHARACTER"
if codepoint < 128:
return chr(codepoint)
return chr(codepoint)
def unescape(self, text):
"""Unescape character references.
All character references (both entity references and numerical
character references) are unescaped.
"""
return self.__characterrefs.sub(self.__unescape, text)
_html_entities_escaper = XMLEntityEscaper(codepoint2name, name2codepoint)
html_entities_escape = _html_entities_escaper.escape_entities
html_entities_unescape = _html_entities_escaper.unescape
def htmlentityreplace_errors(ex):
"""An encoding error handler.
This python codecs error handler replaces unencodable
characters with HTML entities, or, if no HTML entity exists for
the character, XML character references::
>>> u'The cost was \u20ac12.'.encode('latin1', 'htmlentityreplace')
'The cost was €12.'
"""
if isinstance(ex, UnicodeEncodeError):
# Handle encoding errors
bad_text = ex.object[ex.start : ex.end]
text = _html_entities_escaper.escape(bad_text)
return (compat.text_type(text), ex.end)
raise ex
codecs.register_error("htmlentityreplace", htmlentityreplace_errors)
# TODO: options to make this dynamic per-compilation will be added in a later
# release
DEFAULT_ESCAPES = {
"x": "filters.xml_escape",
"h": "filters.html_escape",
"u": "filters.url_escape",
"trim": "filters.trim",
"entity": "filters.html_entities_escape",
"unicode": "unicode",
"decode": "decode",
"str": "str",
"n": "n",
}
if compat.py3k:
DEFAULT_ESCAPES.update({"unicode": "str"})
NON_UNICODE_ESCAPES = DEFAULT_ESCAPES.copy()
NON_UNICODE_ESCAPES["h"] = "filters.legacy_html_escape"
NON_UNICODE_ESCAPES["u"] = "filters.legacy_url_escape"
================================================
FILE: 3rd_party/common/site-packages/mako/lexer.py
================================================
# mako/lexer.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""provides the Lexer class for parsing template strings into parse trees."""
import codecs
import re
from mako import compat
from mako import exceptions
from mako import parsetree
from mako.pygen import adjust_whitespace
_regexp_cache = {}
class Lexer(object):
def __init__(
self,
text,
filename=None,
disable_unicode=False,
input_encoding=None,
preprocessor=None,
):
self.text = text
self.filename = filename
self.template = parsetree.TemplateNode(self.filename)
self.matched_lineno = 1
self.matched_charpos = 0
self.lineno = 1
self.match_position = 0
self.tag = []
self.control_line = []
self.ternary_stack = []
self.disable_unicode = disable_unicode
self.encoding = input_encoding
if compat.py3k and disable_unicode:
raise exceptions.UnsupportedError(
"Mako for Python 3 does not " "support disabling Unicode"
)
if preprocessor is None:
self.preprocessor = []
elif not hasattr(preprocessor, "__iter__"):
self.preprocessor = [preprocessor]
else:
self.preprocessor = preprocessor
@property
def exception_kwargs(self):
return {
"source": self.text,
"lineno": self.matched_lineno,
"pos": self.matched_charpos,
"filename": self.filename,
}
def match(self, regexp, flags=None):
"""compile the given regexp, cache the reg, and call match_reg()."""
try:
reg = _regexp_cache[(regexp, flags)]
except KeyError:
if flags:
reg = re.compile(regexp, flags)
else:
reg = re.compile(regexp)
_regexp_cache[(regexp, flags)] = reg
return self.match_reg(reg)
def match_reg(self, reg):
"""match the given regular expression object to the current text
position.
if a match occurs, update the current text and line position.
"""
mp = self.match_position
match = reg.match(self.text, self.match_position)
if match:
(start, end) = match.span()
if end == start:
self.match_position = end + 1
else:
self.match_position = end
self.matched_lineno = self.lineno
lines = re.findall(r"\n", self.text[mp : self.match_position])
cp = mp - 1
while cp >= 0 and cp < self.textlength and self.text[cp] != "\n":
cp -= 1
self.matched_charpos = mp - cp
self.lineno += len(lines)
# print "MATCHED:", match.group(0), "LINE START:",
# self.matched_lineno, "LINE END:", self.lineno
# print "MATCH:", regexp, "\n", self.text[mp : mp + 15], \
# (match and "TRUE" or "FALSE")
return match
def parse_until_text(self, watch_nesting, *text):
startpos = self.match_position
text_re = r"|".join(text)
brace_level = 0
paren_level = 0
bracket_level = 0
while True:
match = self.match(r"#.*\n")
if match:
continue
match = self.match(
r"(\"\"\"|\'\'\'|\"|\')[^\\]*?(\\.[^\\]*?)*\1", re.S
)
if match:
continue
match = self.match(r"(%s)" % text_re)
if match and not (
watch_nesting
and (brace_level > 0 or paren_level > 0 or bracket_level > 0)
):
return (
self.text[
startpos : self.match_position - len(match.group(1))
],
match.group(1),
)
elif not match:
match = self.match(r"(.*?)(?=\"|\'|#|%s)" % text_re, re.S)
if match:
brace_level += match.group(1).count("{")
brace_level -= match.group(1).count("}")
paren_level += match.group(1).count("(")
paren_level -= match.group(1).count(")")
bracket_level += match.group(1).count("[")
bracket_level -= match.group(1).count("]")
continue
raise exceptions.SyntaxException(
"Expected: %s" % ",".join(text), **self.exception_kwargs
)
def append_node(self, nodecls, *args, **kwargs):
kwargs.setdefault("source", self.text)
kwargs.setdefault("lineno", self.matched_lineno)
kwargs.setdefault("pos", self.matched_charpos)
kwargs["filename"] = self.filename
node = nodecls(*args, **kwargs)
if len(self.tag):
self.tag[-1].nodes.append(node)
else:
self.template.nodes.append(node)
# build a set of child nodes for the control line
# (used for loop variable detection)
# also build a set of child nodes on ternary control lines
# (used for determining if a pass needs to be auto-inserted
if self.control_line:
control_frame = self.control_line[-1]
control_frame.nodes.append(node)
if not (
isinstance(node, parsetree.ControlLine)
and control_frame.is_ternary(node.keyword)
):
if self.ternary_stack and self.ternary_stack[-1]:
self.ternary_stack[-1][-1].nodes.append(node)
if isinstance(node, parsetree.Tag):
if len(self.tag):
node.parent = self.tag[-1]
self.tag.append(node)
elif isinstance(node, parsetree.ControlLine):
if node.isend:
self.control_line.pop()
self.ternary_stack.pop()
elif node.is_primary:
self.control_line.append(node)
self.ternary_stack.append([])
elif self.control_line and self.control_line[-1].is_ternary(
node.keyword
):
self.ternary_stack[-1].append(node)
elif self.control_line and not self.control_line[-1].is_ternary(
node.keyword
):
raise exceptions.SyntaxException(
"Keyword '%s' not a legal ternary for keyword '%s'"
% (node.keyword, self.control_line[-1].keyword),
**self.exception_kwargs
)
_coding_re = re.compile(r"#.*coding[:=]\s*([-\w.]+).*\r?\n")
def decode_raw_stream(self, text, decode_raw, known_encoding, filename):
"""given string/unicode or bytes/string, determine encoding
from magic encoding comment, return body as unicode
or raw if decode_raw=False
"""
if isinstance(text, compat.text_type):
m = self._coding_re.match(text)
encoding = m and m.group(1) or known_encoding or "utf-8"
return encoding, text
if text.startswith(codecs.BOM_UTF8):
text = text[len(codecs.BOM_UTF8) :]
parsed_encoding = "utf-8"
m = self._coding_re.match(text.decode("utf-8", "ignore"))
if m is not None and m.group(1) != "utf-8":
raise exceptions.CompileException(
"Found utf-8 BOM in file, with conflicting "
"magic encoding comment of '%s'" % m.group(1),
text.decode("utf-8", "ignore"),
0,
0,
filename,
)
else:
m = self._coding_re.match(text.decode("utf-8", "ignore"))
if m:
parsed_encoding = m.group(1)
else:
parsed_encoding = known_encoding or "utf-8"
if decode_raw:
try:
text = text.decode(parsed_encoding)
except UnicodeDecodeError:
raise exceptions.CompileException(
"Unicode decode operation of encoding '%s' failed"
% parsed_encoding,
text.decode("utf-8", "ignore"),
0,
0,
filename,
)
return parsed_encoding, text
def parse(self):
self.encoding, self.text = self.decode_raw_stream(
self.text, not self.disable_unicode, self.encoding, self.filename
)
for preproc in self.preprocessor:
self.text = preproc(self.text)
# push the match marker past the
# encoding comment.
self.match_reg(self._coding_re)
self.textlength = len(self.text)
while True:
if self.match_position > self.textlength:
break
if self.match_end():
break
if self.match_expression():
continue
if self.match_control_line():
continue
if self.match_comment():
continue
if self.match_tag_start():
continue
if self.match_tag_end():
continue
if self.match_python_block():
continue
if self.match_text():
continue
if self.match_position > self.textlength:
break
raise exceptions.CompileException("assertion failed")
if len(self.tag):
raise exceptions.SyntaxException(
"Unclosed tag: <%%%s>" % self.tag[-1].keyword,
**self.exception_kwargs
)
if len(self.control_line):
raise exceptions.SyntaxException(
"Unterminated control keyword: '%s'"
% self.control_line[-1].keyword,
self.text,
self.control_line[-1].lineno,
self.control_line[-1].pos,
self.filename,
)
return self.template
def match_tag_start(self):
match = self.match(
r"""
\<% # opening tag
([\w\.\:]+) # keyword
((?:\s+\w+|\s*=\s*|".*?"|'.*?')*) # attrname, = \
# sign, string expression
\s* # more whitespace
(/)?> # closing
""",
re.I | re.S | re.X,
)
if match:
keyword, attr, isend = match.groups()
self.keyword = keyword
attributes = {}
if attr:
for att in re.findall(
r"\s*(\w+)\s*=\s*(?:'([^']*)'|\"([^\"]*)\")", attr
):
key, val1, val2 = att
text = val1 or val2
text = text.replace("\r\n", "\n")
attributes[key] = text
self.append_node(parsetree.Tag, keyword, attributes)
if isend:
self.tag.pop()
else:
if keyword == "text":
match = self.match(r"(.*?)(?=\</%text>)", re.S)
if not match:
raise exceptions.SyntaxException(
"Unclosed tag: <%%%s>" % self.tag[-1].keyword,
**self.exception_kwargs
)
self.append_node(parsetree.Text, match.group(1))
return self.match_tag_end()
return True
else:
return False
def match_tag_end(self):
match = self.match(r"\</%[\t ]*(.+?)[\t ]*>")
if match:
if not len(self.tag):
raise exceptions.SyntaxException(
"Closing tag without opening tag: </%%%s>"
% match.group(1),
**self.exception_kwargs
)
elif self.tag[-1].keyword != match.group(1):
raise exceptions.SyntaxException(
"Closing tag </%%%s> does not match tag: <%%%s>"
% (match.group(1), self.tag[-1].keyword),
**self.exception_kwargs
)
self.tag.pop()
return True
else:
return False
def match_end(self):
match = self.match(r"\Z", re.S)
if match:
string = match.group()
if string:
return string
else:
return True
else:
return False
def match_text(self):
match = self.match(
r"""
(.*?) # anything, followed by:
(
(?<=\n)(?=[ \t]*(?=%|\#\#)) # an eval or line-based
# comment preceded by a
# consumed newline and whitespace
|
(?=\${) # an expression
|
(?=</?[%&]) # a substitution or block or call start or end
# - don't consume
|
(\\\r?\n) # an escaped newline - throw away
|
\Z # end of string
)""",
re.X | re.S,
)
if match:
text = match.group(1)
if text:
self.append_node(parsetree.Text, text)
return True
else:
return False
def match_python_block(self):
match = self.match(r"<%(!)?")
if match:
line, pos = self.matched_lineno, self.matched_charpos
text, end = self.parse_until_text(False, r"%>")
# the trailing newline helps
# compiler.parse() not complain about indentation
text = adjust_whitespace(text) + "\n"
self.append_node(
parsetree.Code,
text,
match.group(1) == "!",
lineno=line,
pos=pos,
)
return True
else:
return False
def match_expression(self):
match = self.match(r"\${")
if match:
line, pos = self.matched_lineno, self.matched_charpos
text, end = self.parse_until_text(True, r"\|", r"}")
if end == "|":
escapes, end = self.parse_until_text(True, r"}")
else:
escapes = ""
text = text.replace("\r\n", "\n")
self.append_node(
parsetree.Expression,
text,
escapes.strip(),
lineno=line,
pos=pos,
)
return True
else:
return False
def match_control_line(self):
match = self.match(
r"(?<=^)[\t ]*(%(?!%)|##)[\t ]*((?:(?:\\r?\n)|[^\r\n])*)"
r"(?:\r?\n|\Z)",
re.M,
)
if match:
operator = match.group(1)
text = match.group(2)
if operator == "%":
m2 = re.match(r"(end)?(\w+)\s*(.*)", text)
if not m2:
raise exceptions.SyntaxException(
"Invalid control line: '%s'" % text,
**self.exception_kwargs
)
isend, keyword = m2.group(1, 2)
isend = isend is not None
if isend:
if not len(self.control_line):
raise exceptions.SyntaxException(
"No starting keyword '%s' for '%s'"
% (keyword, text),
**self.exception_kwargs
)
elif self.control_line[-1].keyword != keyword:
raise exceptions.SyntaxException(
"Keyword '%s' doesn't match keyword '%s'"
% (text, self.control_line[-1].keyword),
**self.exception_kwargs
)
self.append_node(parsetree.ControlLine, keyword, isend, text)
else:
self.append_node(parsetree.Comment, text)
return True
else:
return False
def match_comment(self):
"""matches the multiline version of a comment"""
match = self.match(r"<%doc>(.*?)</%doc>", re.S)
if match:
self.append_node(parsetree.Comment, match.group(1))
return True
else:
return False
================================================
FILE: 3rd_party/common/site-packages/mako/lookup.py
================================================
# mako/lookup.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
import os
import posixpath
import re
import stat
from mako import exceptions
from mako import util
from mako.template import Template
try:
import threading
except:
import dummy_threading as threading
class TemplateCollection(object):
"""Represent a collection of :class:`.Template` objects,
identifiable via URI.
A :class:`.TemplateCollection` is linked to the usage of
all template tags that address other templates, such
as ``<%include>``, ``<%namespace>``, and ``<%inherit>``.
The ``file`` attribute of each of those tags refers
to a string URI that is passed to that :class:`.Template`
object's :class:`.TemplateCollection` for resolution.
:class:`.TemplateCollection` is an abstract class,
with the usual default implementation being :class:`.TemplateLookup`.
"""
def has_template(self, uri):
"""Return ``True`` if this :class:`.TemplateLookup` is
capable of returning a :class:`.Template` object for the
given ``uri``.
:param uri: String URI of the template to be resolved.
"""
try:
self.get_template(uri)
return True
except exceptions.TemplateLookupException:
return False
def get_template(self, uri, relativeto=None):
"""Return a :class:`.Template` object corresponding to the given
``uri``.
The default implementation raises
:class:`.NotImplementedError`. Implementations should
raise :class:`.TemplateLookupException` if the given ``uri``
cannot be resolved.
:param uri: String URI of the template to be resolved.
:param relativeto: if present, the given ``uri`` is assumed to
be relative to this URI.
"""
raise NotImplementedError()
def filename_to_uri(self, uri, filename):
"""Convert the given ``filename`` to a URI relative to
this :class:`.TemplateCollection`."""
return uri
def adjust_uri(self, uri, filename):
"""Adjust the given ``uri`` based on the calling ``filename``.
When this method is called from the runtime, the
``filename`` parameter is taken directly to the ``filename``
attribute of the calling template. Therefore a custom
:class:`.TemplateCollection` subclass can place any string
identifier desired in the ``filename`` parameter of the
:class:`.Template` objects it constructs and have them come back
here.
"""
return uri
class TemplateLookup(TemplateCollection):
"""Represent a collection of templates that locates template source files
from the local filesystem.
The primary argument is the ``directories`` argument, the list of
directories to search:
.. sourcecode:: python
lookup = TemplateLookup(["/path/to/templates"])
some_template = lookup.get_template("/index.html")
The :class:`.TemplateLookup` can also be given :class:`.Template` objects
programatically using :meth:`.put_string` or :meth:`.put_template`:
.. sourcecode:: python
lookup = TemplateLookup()
lookup.put_string("base.html", '''
<html><body>${self.next()}</body></html>
''')
lookup.put_string("hello.html", '''
<%include file='base.html'/>
Hello, world !
''')
:param directories: A list of directory names which will be
searched for a particular template URI. The URI is appended
to each directory and the filesystem checked.
:param collection_size: Approximate size of the collection used
to store templates. If left at its default of ``-1``, the size
is unbounded, and a plain Python dictionary is used to
relate URI strings to :class:`.Template` instances.
Otherwise, a least-recently-used cache object is used which
will maintain the size of the collection approximately to
the number given.
:param filesystem_checks: When at its default value of ``True``,
each call to :meth:`.TemplateLookup.get_template()` will
compare the filesystem last modified time to the time in
which an existing :class:`.Template` object was created.
This allows the :class:`.TemplateLookup` to regenerate a
new :class:`.Template` whenever the original source has
been updated. Set this to ``False`` for a very minor
performance increase.
:param modulename_callable: A callable which, when present,
is passed the path of the source file as well as the
requested URI, and then returns the full path of the
generated Python module file. This is used to inject
alternate schemes for Python module location. If left at
its default of ``None``, the built in system of generation
based on ``module_directory`` plus ``uri`` is used.
All other keyword parameters available for
:class:`.Template` are mirrored here. When new
:class:`.Template` objects are created, the keywords
established with this :class:`.TemplateLookup` are passed on
to each new :class:`.Template`.
"""
def __init__(
self,
directories=None,
module_directory=None,
filesystem_checks=True,
collection_size=-1,
format_exceptions=False,
error_handler=None,
disable_unicode=False,
bytestring_passthrough=False,
output_encoding=None,
encoding_errors="strict",
cache_args=None,
cache_impl="beaker",
cache_enabled=True,
cache_type=None,
cache_dir=None,
cache_url=None,
modulename_callable=None,
module_writer=None,
default_filters=None,
buffer_filters=(),
strict_undefined=False,
imports=None,
future_imports=None,
enable_loop=True,
input_encoding=None,
preprocessor=None,
lexer_cls=None,
include_error_handler=None,
):
self.directories = [
posixpath.normpath(d) for d in util.to_list(directories, ())
]
self.module_directory = module_directory
self.modulename_callable = modulename_callable
self.filesystem_checks = filesystem_checks
self.collection_size = collection_size
if cache_args is None:
cache_args = {}
# transfer deprecated cache_* args
if cache_dir:
cache_args.setdefault("dir", cache_dir)
if cache_url:
cache_args.setdefault("url", cache_url)
if cache_type:
cache_args.setdefault("type", cache_type)
self.template_args = {
"format_exceptions": format_exceptions,
"error_handler": error_handler,
"include_error_handler": include_error_handler,
"disable_unicode": disable_unicode,
"bytestring_passthrough": bytestring_passthrough,
"output_encoding": output_encoding,
"cache_impl": cache_impl,
"encoding_errors": encoding_errors,
"input_encoding": input_encoding,
"module_directory": module_directory,
"module_writer": module_writer,
"cache_args": cache_args,
"cache_enabled": cache_enabled,
"default_filters": default_filters,
"buffer_filters": buffer_filters,
"strict_undefined": strict_undefined,
"imports": imports,
"future_imports": future_imports,
"enable_loop": enable_loop,
"preprocessor": preprocessor,
"lexer_cls": lexer_cls,
}
if collection_size == -1:
self._collection = {}
self._uri_cache = {}
else:
self._collection = util.LRUCache(collection_size)
self._uri_cache = util.LRUCache(collection_size)
self._mutex = threading.Lock()
def get_template(self, uri):
"""Return a :class:`.Template` object corresponding to the given
``uri``.
.. note:: The ``relativeto`` argument is not supported here at
the moment.
"""
try:
if self.filesystem_checks:
return self._check(uri, self._collection[uri])
else:
return self._collection[uri]
except KeyError:
u = re.sub(r"^\/+", "", uri)
for dir_ in self.directories:
# make sure the path seperators are posix - os.altsep is empty
# on POSIX and cannot be used.
dir_ = dir_.replace(os.path.sep, posixpath.sep)
srcfile = posixpath.normpath(posixpath.join(dir_, u))
if os.path.isfile(srcfile):
return self._load(srcfile, uri)
else:
raise exceptions.TopLevelLookupException(
"Cant locate template for uri %r" % uri
)
def adjust_uri(self, uri, relativeto):
"""Adjust the given ``uri`` based on the given relative URI."""
key = (uri, relativeto)
if key in self._uri_cache:
return self._uri_cache[key]
if uri[0] != "/":
if relativeto is not None:
v = self._uri_cache[key] = posixpath.join(
posixpath.dirname(relativeto), uri
)
else:
v = self._uri_cache[key] = "/" + uri
else:
v = self._uri_cache[key] = uri
return v
def filename_to_uri(self, filename):
"""Convert the given ``filename`` to a URI relative to
this :class:`.TemplateCollection`."""
try:
return self._uri_cache[filename]
except KeyError:
value = self._relativeize(filename)
self._uri_cache[filename] = value
return value
def _relativeize(self, filename):
"""Return the portion of a filename that is 'relative'
to the directories in this lookup.
"""
filename = posixpath.normpath(filename)
for dir_ in self.directories:
if filename[0 : len(dir_)] == dir_:
return filename[len(dir_) :]
else:
return None
def _load(self, filename, uri):
self._mutex.acquire()
try:
try:
# try returning from collection one
# more time in case concurrent thread already loaded
return self._collection[uri]
except KeyError:
pass
try:
if self.modulename_callable is not None:
module_filename = self.modulename_callable(filename, uri)
else:
module_filename = None
self._collection[uri] = template = Template(
uri=uri,
filename=posixpath.normpath(filename),
lookup=self,
module_filename=module_filename,
**self.template_args
)
return template
except:
# if compilation fails etc, ensure
# template is removed from collection,
# re-raise
self._collection.pop(uri, None)
raise
finally:
self._mutex.release()
def _check(self, uri, template):
if template.filename is None:
return template
try:
template_stat = os.stat(template.filename)
if template.module._modified_time < template_stat[stat.ST_MTIME]:
self._collection.pop(uri, None)
return self._load(template.filename, uri)
else:
return template
except OSError:
self._collection.pop(uri, None)
raise exceptions.TemplateLookupException(
"Cant locate template for uri %r" % uri
)
def put_string(self, uri, text):
"""Place a new :class:`.Template` object into this
:class:`.TemplateLookup`, based on the given string of
``text``.
"""
self._collection[uri] = Template(
text, lookup=self, uri=uri, **self.template_args
)
def put_template(self, uri, template):
"""Place a new :class:`.Template` object into this
:class:`.TemplateLookup`, based on the given
:class:`.Template` object.
"""
self._collection[uri] = template
================================================
FILE: 3rd_party/common/site-packages/mako/parsetree.py
================================================
# mako/parsetree.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""defines the parse tree components for Mako templates."""
import re
from mako import ast
from mako import compat
from mako import exceptions
from mako import filters
from mako import util
class Node(object):
"""base class for a Node in the parse tree."""
def __init__(self, source, lineno, pos, filename):
self.source = source
self.lineno = lineno
self.pos = pos
self.filename = filename
@property
def exception_kwargs(self):
return {
"source": self.source,
"lineno": self.lineno,
"pos": self.pos,
"filename": self.filename,
}
def get_children(self):
return []
def accept_visitor(self, visitor):
def traverse(node):
for n in node.get_children():
n.accept_visitor(visitor)
method = getattr(visitor, "visit" + self.__class__.__name__, traverse)
method(self)
class TemplateNode(Node):
"""a 'container' node that stores the overall collection of nodes."""
def __init__(self, filename):
super(TemplateNode, self).__init__("", 0, 0, filename)
self.nodes = []
self.page_attributes = {}
def get_children(self):
return self.nodes
def __repr__(self):
return "TemplateNode(%s, %r)" % (
util.sorted_dict_repr(self.page_attributes),
self.nodes,
)
class ControlLine(Node):
"""defines a control line, a line-oriented python line or end tag.
e.g.::
% if foo:
(markup)
% endif
"""
has_loop_context = False
def __init__(self, keyword, isend, text, **kwargs):
super(ControlLine, self).__init__(**kwargs)
self.text = text
self.keyword = keyword
self.isend = isend
self.is_primary = keyword in ["for", "if", "while", "try", "with"]
self.nodes = []
if self.isend:
self._declared_identifiers = []
self._undeclared_identifiers = []
else:
code = ast.PythonFragment(text, **self.exception_kwargs)
self._declared_identifiers = code.declared_identifiers
self._undeclared_identifiers = code.undeclared_identifiers
def get_children(self):
return self.nodes
def declared_identifiers(self):
return self._declared_identifiers
def undeclared_identifiers(self):
return self._undeclared_identifiers
def is_ternary(self, keyword):
"""return true if the given keyword is a ternary keyword
for this ControlLine"""
return keyword in {
"if": set(["else", "elif"]),
"try": set(["except", "finally"]),
"for": set(["else"]),
}.get(self.keyword, [])
def __repr__(self):
return "ControlLine(%r, %r, %r, %r)" % (
self.keyword,
self.text,
self.isend,
(self.lineno, self.pos),
)
class Text(Node):
"""defines plain text in the template."""
def __init__(self, content, **kwargs):
super(Text, self).__init__(**kwargs)
self.content = content
def __repr__(self):
return "Text(%r, %r)" % (self.content, (self.lineno, self.pos))
class Code(Node):
"""defines a Python code block, either inline or module level.
e.g.::
inline:
<%
x = 12
%>
module level:
<%!
import logger
%>
"""
def __init__(self, text, ismodule, **kwargs):
super(Code, self).__init__(**kwargs)
self.text = text
self.ismodule = ismodule
self.code = ast.PythonCode(text, **self.exception_kwargs)
def declared_identifiers(self):
return self.code.declared_identifiers
def undeclared_identifiers(self):
return self.code.undeclared_identifiers
def __repr__(self):
return "Code(%r, %r, %r)" % (
self.text,
self.ismodule,
(self.lineno, self.pos),
)
class Comment(Node):
"""defines a comment line.
# this is a comment
"""
def __init__(self, text, **kwargs):
super(Comment, self).__init__(**kwargs)
self.text = text
def __repr__(self):
return "Comment(%r, %r)" % (self.text, (self.lineno, self.pos))
class Expression(Node):
"""defines an inline expression.
${x+y}
"""
def __init__(self, text, escapes, **kwargs):
super(Expression, self).__init__(**kwargs)
self.text = text
self.escapes = escapes
self.escapes_code = ast.ArgumentList(escapes, **self.exception_kwargs)
self.code = ast.PythonCode(text, **self.exception_kwargs)
def declared_identifiers(self):
return []
def undeclared_identifiers(self):
# TODO: make the "filter" shortcut list configurable at parse/gen time
return self.code.undeclared_identifiers.union(
self.escapes_code.undeclared_identifiers.difference(
set(filters.DEFAULT_ESCAPES.keys())
)
).difference(self.code.declared_identifiers)
def __repr__(self):
return "Expression(%r, %r, %r)" % (
self.text,
self.escapes_code.args,
(self.lineno, self.pos),
)
class _TagMeta(type):
"""metaclass to allow Tag to produce a subclass according to
its keyword"""
_classmap = {}
def __init__(cls, clsname, bases, dict_):
if getattr(cls, "__keyword__", None) is not None:
cls._classmap[cls.__keyword__] = cls
super(_TagMeta, cls).__init__(clsname, bases, dict_)
def __call__(cls, keyword, attributes, **kwargs):
if ":" in keyword:
ns, defname = keyword.split(":")
return type.__call__(
CallNamespaceTag, ns, defname, attributes, **kwargs
)
try:
cls = _TagMeta._classmap[keyword]
except KeyError:
raise exceptions.CompileException(
"No such tag: '%s'" % keyword,
source=kwargs["source"],
lineno=kwargs["lineno"],
pos=kwargs["pos"],
filename=kwargs["filename"],
)
return type.__call__(cls, keyword, attributes, **kwargs)
class Tag(compat.with_metaclass(_TagMeta, Node)):
"""abstract base class for tags.
e.g.::
<%sometag/>
<%someothertag>
stuff
</%someothertag>
"""
__keyword__ = None
def __init__(
self,
keyword,
attributes,
expressions,
nonexpressions,
required,
**kwargs
):
r"""construct a new Tag instance.
this constructor not called directly, and is only called
by subclasses.
:param keyword: the tag keyword
:param attributes: raw dictionary of attribute key/value pairs
:param expressions: a set of identifiers that are legal attributes,
which can also contain embedded expressions
:param nonexpressions: a set of identifiers that are legal
attributes, which cannot contain embedded expressions
:param \**kwargs:
other arguments passed to the Node superclass (lineno, pos)
"""
super(Tag, self).__init__(**kwargs)
self.keyword = keyword
self.attributes = attributes
self._parse_attributes(expressions, nonexpressions)
missing = [r for r in required if r not in self.parsed_attributes]
if len(missing):
raise exceptions.CompileException(
"Missing attribute(s): %s"
% ",".join([repr(m) for m in missing]),
**self.exception_kwargs
)
self.parent = None
self.nodes = []
def is_root(self):
return self.parent is None
def get_children(self):
return self.nodes
def _parse_attributes(self, expressions, nonexpressions):
undeclared_identifiers = set()
self.parsed_attributes = {}
for key in self.attributes:
if key in expressions:
expr = []
for x in re.compile(r"(\${.+?})", re.S).split(
self.attributes[key]
):
m = re.compile(r"^\${(.+?)}$", re.S).match(x)
if m:
code = ast.PythonCode(
m.group(1).rstrip(), **self.exception_kwargs
)
# we aren't discarding "declared_identifiers" here,
# which we do so that list comprehension-declared
# variables aren't counted. As yet can't find a
# condition that requires it here.
undeclared_identifiers = undeclared_identifiers.union(
code.undeclared_identifiers
)
expr.append("(%s)" % m.group(1))
else:
if x:
expr.append(repr(x))
self.parsed_attributes[key] = " + ".join(expr) or repr("")
elif key in nonexpressions:
if re.search(r"\${.+?}", self.attributes[key]):
raise exceptions.CompileException(
"Attibute '%s' in tag '%s' does not allow embedded "
"expressions" % (key, self.keyword),
**self.exception_kwargs
)
self.parsed_attributes[key] = repr(self.attributes[key])
else:
raise exceptions.CompileException(
"Invalid attribute for tag '%s': '%s'"
% (self.keyword, key),
**self.exception_kwargs
)
self.expression_undeclared_identifiers = undeclared_identifiers
def declared_identifiers(self):
return []
def undeclared_identifiers(self):
return self.expression_undeclared_identifiers
def __repr__(self):
return "%s(%r, %s, %r, %r)" % (
self.__class__.__name__,
self.keyword,
util.sorted_dict_repr(self.attributes),
(self.lineno, self.pos),
self.nodes,
)
class IncludeTag(Tag):
__keyword__ = "include"
def __init__(self, keyword, attributes, **kwargs):
super(IncludeTag, self).__init__(
keyword,
attributes,
("file", "import", "args"),
(),
("file",),
**kwargs
)
self.page_args = ast.PythonCode(
"__DUMMY(%s)" % attributes.get("args", ""), **self.exception_kwargs
)
def declared_identifiers(self):
return []
def undeclared_identifiers(self):
identifiers = self.page_args.undeclared_identifiers.difference(
set(["__DUMMY"])
).difference(self.page_args.declared_identifiers)
return identifiers.union(
super(IncludeTag, self).undeclared_identifiers()
)
class NamespaceTag(Tag):
__keyword__ = "namespace"
def __init__(self, keyword, attributes, **kwargs):
super(NamespaceTag, self).__init__(
keyword,
attributes,
("file",),
("name", "inheritable", "import", "module"),
(),
**kwargs
)
self.name = attributes.get("name", "__anon_%s" % hex(abs(id(self))))
if "name" not in attributes and "import" not in attributes:
raise exceptions.CompileException(
"'name' and/or 'import' attributes are required "
"for <%namespace>",
**self.exception_kwargs
)
if "file" in attributes and "module" in attributes:
raise exceptions.CompileException(
"<%namespace> may only have one of 'file' or 'module'",
**self.exception_kwargs
)
def declared_identifiers(self):
return []
class TextTag(Tag):
__keyword__ = "text"
def __init__(self, keyword, attributes, **kwargs):
super(TextTag, self).__init__(
keyword, attributes, (), ("filter"), (), **kwargs
)
self.filter_args = ast.ArgumentList(
attributes.get("filter", ""), **self.exception_kwargs
)
def undeclared_identifiers(self):
return self.filter_args.undeclared_identifiers.difference(
filters.DEFAULT_ESCAPES.keys()
).union(self.expression_undeclared_identifiers)
class DefTag(Tag):
__keyword__ = "def"
def __init__(self, keyword, attributes, **kwargs):
expressions = ["buffered", "cached"] + [
c for c in attributes if c.startswith("cache_")
]
super(DefTag, self).__init__(
keyword,
attributes,
expressions,
("name", "filter", "decorator"),
("name",),
**kwargs
)
name = attributes["name"]
if re.match(r"^[\w_]+$", name):
raise exceptions.CompileException(
"Missing parenthesis in %def", **self.exception_kwargs
)
self.function_decl = ast.FunctionDecl(
"def " + name + ":pass", **self.exception_kwargs
)
self.name = self.function_decl.funcname
self.decorator = attributes.get("decorator", "")
self.filter_args = ast.ArgumentList(
attributes.get("filter", ""), **self.exception_kwargs
)
is_anonymous = False
is_block = False
@property
def funcname(self):
return self.function_decl.funcname
def get_argument_expressions(self, **kw):
return self.function_decl.get_argument_expressions(**kw)
def declared_identifiers(self):
return self.function_decl.allargnames
def undeclared_identifiers(self):
res = []
for c in self.function_decl.defaults:
res += list(
ast.PythonCode(
c, **self.exception_kwargs
).undeclared_identifiers
)
return (
set(res)
.union(
self.filter_args.undeclared_identifiers.difference(
filters.DEFAULT_ESCAPES.keys()
)
)
.union(self.expression_undeclared_identifiers)
.difference(self.function_decl.allargnames)
)
class BlockTag(Tag):
__keyword__ = "block"
def __init__(self, keyword, attributes, **kwargs):
expressions = ["buffered", "cached", "args"] + [
c for c in attributes if c.startswith("cache_")
]
super(BlockTag, self).__init__(
keyword,
attributes,
expressions,
("name", "filter", "decorator"),
(),
**kwargs
)
name = attributes.get("name")
if name and not re.match(r"^[\w_]+$", name):
raise exceptions.CompileException(
"%block may not specify an argument signature",
**self.exception_kwargs
)
if not name and attributes.get("args", None):
raise exceptions.CompileException(
"Only named %blocks may specify args", **self.exception_kwargs
)
self.body_decl = ast.FunctionArgs(
attributes.get("args", ""), **self.exception_kwargs
)
self.name = name
self.decorator = attributes.get("decorator", "")
self.filter_args = ast.ArgumentList(
attributes.get("filter", ""), **self.exception_kwargs
)
is_block = True
@property
def is_anonymous(self):
return self.name is None
@property
def funcname(self):
return self.name or "__M_anon_%d" % (self.lineno,)
def get_argument_expressions(self, **kw):
return self.body_decl.get_argument_expressions(**kw)
def declared_identifiers(self):
return self.body_decl.allargnames
def undeclared_identifiers(self):
return (
self.filter_args.undeclared_identifiers.difference(
filters.DEFAULT_ESCAPES.keys()
)
).union(self.expression_undeclared_identifiers)
class CallTag(Tag):
__keyword__ = "call"
def __init__(self, keyword, attributes, **kwargs):
super(CallTag, self).__init__(
keyword, attributes, ("args"), ("expr",), ("expr",), **kwargs
)
self.expression = attributes["expr"]
self.code = ast.PythonCode(self.expression, **self.exception_kwargs)
self.body_decl = ast.FunctionArgs(
attributes.get("args", ""), **self.exception_kwargs
)
def declared_identifiers(self):
return self.code.declared_identifiers.union(self.body_decl.allargnames)
def undeclared_identifiers(self):
return self.code.undeclared_identifiers.difference(
self.code.declared_identifiers
)
class CallNamespaceTag(Tag):
def __init__(self, namespace, defname, attributes, **kwargs):
super(CallNamespaceTag, self).__init__(
namespace + ":" + defname,
attributes,
tuple(attributes.keys()) + ("args",),
(),
(),
**kwargs
)
self.expression = "%s.%s(%s)" % (
namespace,
defname,
",".join(
[
"%s=%s" % (k, v)
for k, v in self.parsed_attributes.items()
if k != "args"
]
),
)
self.code = ast.PythonCode(self.expression, **self.exception_kwargs)
self.body_decl = ast.FunctionArgs(
attributes.get("args", ""), **self.exception_kwargs
)
def declared_identifiers(self):
return self.code.declared_identifiers.union(self.body_decl.allargnames)
def undeclared_identifiers(self):
return self.code.undeclared_identifiers.difference(
self.code.declared_identifiers
)
class InheritTag(Tag):
__keyword__ = "inherit"
def __init__(self, keyword, attributes, **kwargs):
super(InheritTag, self).__init__(
keyword, attributes, ("file",), (), ("file",), **kwargs
)
class PageTag(Tag):
__keyword__ = "page"
def __init__(self, keyword, attributes, **kwargs):
expressions = [
"cached",
"args",
"expression_filter",
"enable_loop",
] + [c for c in attributes if c.startswith("cache_")]
super(PageTag, self).__init__(
keyword, attributes, expressions, (), (), **kwargs
)
self.body_decl = ast.FunctionArgs(
attributes.get("args", ""), **self.exception_kwargs
)
self.filter_args = ast.ArgumentList(
attributes.get("expression_filter", ""), **self.exception_kwargs
)
def declared_identifiers(self):
return self.body_decl.allargnames
================================================
FILE: 3rd_party/common/site-packages/mako/pygen.py
================================================
# mako/pygen.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""utilities for generating and formatting literal Python code."""
import re
from mako import exceptions
class PythonPrinter(object):
def __init__(self, stream):
# indentation counter
self.indent = 0
# a stack storing information about why we incremented
# the indentation counter, to help us determine if we
# should decrement it
self.indent_detail = []
# the string of whitespace multiplied by the indent
# counter to produce a line
self.indentstring = " "
# the stream we are writing to
self.stream = stream
# current line number
self.lineno = 1
# a list of lines that represents a buffered "block" of code,
# which can be later printed relative to an indent level
self.line_buffer = []
self.in_indent_lines = False
self._reset_multi_line_flags()
# mapping of generated python lines to template
# source lines
self.source_map = {}
def _update_lineno(self, num):
self.lineno += num
def start_source(self, lineno):
if self.lineno not in self.source_map:
self.source_map[self.lineno] = lineno
def write_blanks(self, num):
self.stream.write("\n" * num)
self._update_lineno(num)
def write_indented_block(self, block, starting_lineno=None):
"""print a line or lines of python which already contain indentation.
The indentation of the total block of lines will be adjusted to that of
the current indent level."""
self.in_indent_lines = False
for i, l in enumerate(re.split(r"\r?\n", block)):
self.line_buffer.append(l)
if starting_lineno is not None:
self.start_source(starting_lineno + i)
self._update_lineno(1)
def writelines(self, *lines):
"""print a series of lines of python."""
for line in lines:
self.writeline(line)
def writeline(self, line):
"""print a line of python, indenting it according to the current
indent level.
this also adjusts the indentation counter according to the
content of the line.
"""
if not self.in_indent_lines:
self._flush_adjusted_lines()
self.in_indent_lines = True
if (
line is None
or re.match(r"^\s*#", line)
or re.match(r"^\s*$", line)
):
hastext = False
else:
hastext = True
is_comment = line and len(line) and line[0] == "#"
# see if this line should decrease the indentation level
if not is_comment and (not hastext or self._is_unindentor(line)):
if self.indent > 0:
self.indent -= 1
# if the indent_detail stack is empty, the user
# probably put extra closures - the resulting
# module wont compile.
if len(self.indent_detail) == 0:
raise exceptions.SyntaxException(
"Too many whitespace closures"
)
self.indent_detail.pop()
if line is None:
return
# write the line
self.stream.write(self._indent_line(line) + "\n")
self._update_lineno(len(line.split("\n")))
# see if this line should increase the indentation level.
# note that a line can both decrase (before printing) and
# then increase (after printing) the indentation level.
if re.search(r":[ \t]*(?:#.*)?$", line):
# increment indentation count, and also
# keep track of what the keyword was that indented us,
# if it is a python compound statement keyword
# where we might have to look for an "unindent" keyword
match = re.match(r"^\s*(if|try|elif|while|for|with)", line)
if match:
# its a "compound" keyword, so we will check for "unindentors"
indentor = match.group(1)
self.indent += 1
self.indent_detail.append(indentor)
else:
indentor = None
# its not a "compound" keyword. but lets also
# test for valid Python keywords that might be indenting us,
# else assume its a non-indenting line
m2 = re.match(
r"^\s*(def|class|else|elif|except|finally)", line
)
if m2:
self.indent += 1
self.indent_detail.append(indentor)
def close(self):
"""close this printer, flushing any remaining lines."""
self._flush_adjusted_lines()
def _is_unindentor(self, line):
"""return true if the given line is an 'unindentor',
relative to the last 'indent' event received.
"""
# no indentation detail has been pushed on; return False
if len(self.indent_detail) == 0:
return False
indentor = self.indent_detail[-1]
# the last indent keyword we grabbed is not a
# compound statement keyword; return False
if indentor is None:
return False
# if the current line doesnt have one of the "unindentor" keywords,
# return False
match = re.match(r"^\s*(else|elif|except|finally).*\:", line)
if not match:
return False
# whitespace matches up, we have a compound indentor,
# and this line has an unindentor, this
# is probably good enough
return True
# should we decide that its not good enough, heres
# more stuff to check.
# keyword = match.group(1)
# match the original indent keyword
# for crit in [
# (r'if|elif', r'else|elif'),
# (r'try', r'except|finally|else'),
# (r'while|for', r'else'),
# ]:
# if re.match(crit[0], indentor) and re.match(crit[1], keyword):
# return True
# return False
def _indent_line(self, line, stripspace=""):
"""indent the given line according to the current indent level.
stripspace is a string of space that will be truncated from the
start of the line before indenting."""
return re.sub(
r"^%s" % stripspace, self.indentstring * self.indent, line
)
def _reset_multi_line_flags(self):
"""reset the flags which would indicate we are in a backslashed
or triple-quoted section."""
self.backslashed, self.triplequoted = False, False
def _in_multi_line(self, line):
"""return true if the given line is part of a multi-line block,
via backslash or triple-quote."""
# we are only looking for explicitly joined lines here, not
# implicit ones (i.e. brackets, braces etc.). this is just to
# guard against the possibility of modifying the space inside of
# a literal multiline string with unfortunately placed
# whitespace
current_state = self.backslashed or self.triplequoted
if re.search(r"\\$", line):
self.backslashed = True
else:
self.backslashed = False
triples = len(re.findall(r"\"\"\"|\'\'\'", line))
if triples == 1 or triples % 2 != 0:
self.triplequoted = not self.triplequoted
return current_state
def _flush_adjusted_lines(self):
stripspace = None
self._reset_multi_line_flags()
for entry in self.line_buffer:
if self._in_multi_line(entry):
self.stream.write(entry + "\n")
else:
entry = entry.expandtabs()
if stripspace is None and re.search(r"^[ \t]*[^# \t]", entry):
stripspace = re.match(r"^([ \t]*)", entry).group(1)
self.stream.write(self._indent_line(entry, stripspace) + "\n")
self.line_buffer = []
self._reset_multi_line_flags()
def adjust_whitespace(text):
"""remove the left-whitespace margin of a block of Python code."""
state = [False, False]
(backslashed, triplequoted) = (0, 1)
def in_multi_line(line):
start_state = state[backslashed] or state[triplequoted]
if re.search(r"\\$", line):
state[backslashed] = True
else:
state[backslashed] = False
def match(reg, t):
m = re.match(reg, t)
if m:
return m, t[len(m.group(0)) :]
else:
return None, t
while line:
if state[triplequoted]:
m, line = match(r"%s" % state[triplequoted], line)
if m:
state[triplequoted] = False
else:
m, line = match(r".*?(?=%s|$)" % state[triplequoted], line)
else:
m, line = match(r"#", line)
if m:
return start_state
m, line = match(r"\"\"\"|\'\'\'", line)
if m:
state[triplequoted] = m.group(0)
continue
m, line = match(r".*?(?=\"\"\"|\'\'\'|#|$)", line)
return start_state
def _indent_line(line, stripspace=""):
return re.sub(r"^%s" % stripspace, "", line)
lines = []
stripspace = None
for line in re.split(r"\r?\n", text):
if in_multi_line(line):
lines.append(line)
else:
line = line.expandtabs()
if stripspace is None and re.search(r"^[ \t]*[^# \t]", line):
stripspace = re.match(r"^([ \t]*)", line).group(1)
lines.append(_indent_line(line, stripspace))
return "\n".join(lines)
================================================
FILE: 3rd_party/common/site-packages/mako/pyparser.py
================================================
# mako/pyparser.py
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""Handles parsing of Python code.
Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler
module is used.
"""
import operator
import _ast
from mako import _ast_util
from mako import compat
from mako import exceptions
from mako import util
from mako.compat import arg_stringname
if compat.py3k:
# words that cannot be assigned to (notably
# smaller than the total keys in __builtins__)
reserved = set(["True", "False", "None", "print"])
# the "id" attribute on a function node
arg_id = operator.attrgetter("arg")
else:
# words that cannot be assigned to (notably
# smaller than the total keys in __builtins__)
reserved = set(["True", "False", "None"])
# the "id" attribute on a function node
arg_id = operator.attrgetter("id")
util.restore__ast(_ast)
def parse(code, mode="exec", **exception_kwargs):
"""Parse an expression into AST"""
try:
return _ast_util.parse(code, "<unknown>", mode)
except Exception:
raise exceptions.SyntaxException(
"(%s) %s (%r)"
% (
compat.exception_as().__class__.__name__,
compat.exception_as(),
code[0:50],
),
**exception_kwargs
)
class FindIdentifiers(_ast_util.NodeVisitor):
def __init__(self, listener, **exception_kwargs):
self.in_function = False
gitextract_cd4nlga1/
├── .github/
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ ├── feature_request.md
│ └── question.md
├── .gitignore
├── 3rd_party/
│ ├── babel/
│ │ ├── .babelrc
│ │ ├── babel.py
│ │ ├── package.json
│ │ └── test.jsx
│ ├── common/
│ │ └── site-packages/
│ │ ├── mako/
│ │ │ ├── __init__.py
│ │ │ ├── _ast_util.py
│ │ │ ├── ast.py
│ │ │ ├── cache.py
│ │ │ ├── cmd.py
│ │ │ ├── codegen.py
│ │ │ ├── compat.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── autohandler.py
│ │ │ │ ├── babelplugin.py
│ │ │ │ ├── beaker_cache.py
│ │ │ │ ├── extract.py
│ │ │ │ ├── linguaplugin.py
│ │ │ │ ├── preprocessors.py
│ │ │ │ ├── pygmentplugin.py
│ │ │ │ └── turbogears.py
│ │ │ ├── filters.py
│ │ │ ├── lexer.py
│ │ │ ├── lookup.py
│ │ │ ├── parsetree.py
│ │ │ ├── pygen.py
│ │ │ ├── pyparser.py
│ │ │ ├── runtime.py
│ │ │ ├── template.py
│ │ │ └── util.py
│ │ ├── more_itertools/
│ │ │ ├── __init__.py
│ │ │ ├── more.py
│ │ │ ├── recipes.py
│ │ │ └── tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_more.py
│ │ │ └── test_recipes.py
│ │ └── tzlocal_olson/
│ │ ├── __init__.py
│ │ ├── darwin.py
│ │ ├── test_data/
│ │ │ ├── Harare
│ │ │ ├── localtime/
│ │ │ │ └── etc/
│ │ │ │ └── localtime
│ │ │ ├── symlink_localtime/
│ │ │ │ ├── etc/
│ │ │ │ │ └── localtime
│ │ │ │ └── usr/
│ │ │ │ └── share/
│ │ │ │ └── zoneinfo/
│ │ │ │ └── Africa/
│ │ │ │ └── Harare
│ │ │ ├── timezone/
│ │ │ │ └── etc/
│ │ │ │ └── timezone
│ │ │ ├── timezone_setting/
│ │ │ │ └── etc/
│ │ │ │ └── conf.d/
│ │ │ │ └── clock
│ │ │ └── zone_setting/
│ │ │ └── etc/
│ │ │ └── sysconfig/
│ │ │ └── clock
│ │ ├── tests.py
│ │ ├── unix.py
│ │ ├── win32.py
│ │ └── windows_tz.py
│ ├── mooRainbow/
│ │ ├── mooRainbow.1.2b2.js
│ │ ├── mooRainbow.css
│ │ └── mooRainbow.js
│ ├── python2/
│ │ └── site-packages/
│ │ ├── cheroot/
│ │ │ ├── __init__.py
│ │ │ ├── _compat.py
│ │ │ ├── errors.py
│ │ │ ├── makefile.py
│ │ │ ├── server.py
│ │ │ ├── ssl/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── builtin.py
│ │ │ │ └── pyopenssl.py
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── helper.py
│ │ │ │ ├── test.pem
│ │ │ │ ├── test_config_server.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_wsgiapps.py
│ │ │ │ └── webtest.py
│ │ │ ├── workers/
│ │ │ │ ├── __init__.py
│ │ │ │ └── threadpool.py
│ │ │ └── wsgi.py
│ │ ├── cherrypy/
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _cpchecker.py
│ │ │ ├── _cpcompat.py
│ │ │ ├── _cpconfig.py
│ │ │ ├── _cpdispatch.py
│ │ │ ├── _cperror.py
│ │ │ ├── _cplogging.py
│ │ │ ├── _cpmodpy.py
│ │ │ ├── _cpnative_server.py
│ │ │ ├── _cpreqbody.py
│ │ │ ├── _cprequest.py
│ │ │ ├── _cpserver.py
│ │ │ ├── _cptools.py
│ │ │ ├── _cptree.py
│ │ │ ├── _cpwsgi.py
│ │ │ ├── _cpwsgi_server.py
│ │ │ ├── _helper.py
│ │ │ ├── daemon.py
│ │ │ ├── lib/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth.py
│ │ │ │ ├── auth_basic.py
│ │ │ │ ├── auth_digest.py
│ │ │ │ ├── caching.py
│ │ │ │ ├── covercp.py
│ │ │ │ ├── cpstats.py
│ │ │ │ ├── cptools.py
│ │ │ │ ├── encoding.py
│ │ │ │ ├── gctools.py
│ │ │ │ ├── httpauth.py
│ │ │ │ ├── httputil.py
│ │ │ │ ├── jsontools.py
│ │ │ │ ├── lockfile.py
│ │ │ │ ├── locking.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── reprconf.py
│ │ │ │ ├── sessions.py
│ │ │ │ ├── static.py
│ │ │ │ └── xmlrpcutil.py
│ │ │ ├── process/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── plugins.py
│ │ │ │ ├── servers.py
│ │ │ │ ├── win32.py
│ │ │ │ └── wspbus.py
│ │ │ ├── scaffold/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── apache-fcgi.conf
│ │ │ │ ├── example.conf
│ │ │ │ └── site.conf
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _test_decorators.py
│ │ │ │ ├── _test_states_demo.py
│ │ │ │ ├── benchmark.py
│ │ │ │ ├── checkerdemo.py
│ │ │ │ ├── fastcgi.conf
│ │ │ │ ├── fcgi.conf
│ │ │ │ ├── helper.py
│ │ │ │ ├── logtest.py
│ │ │ │ ├── modfastcgi.py
│ │ │ │ ├── modfcgid.py
│ │ │ │ ├── modpy.py
│ │ │ │ ├── modwsgi.py
│ │ │ │ ├── sessiondemo.py
│ │ │ │ ├── static/
│ │ │ │ │ ├── 404.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── style.css
│ │ │ │ ├── test.pem
│ │ │ │ ├── test_auth_basic.py
│ │ │ │ ├── test_auth_digest.py
│ │ │ │ ├── test_bus.py
│ │ │ │ ├── test_caching.py
│ │ │ │ ├── test_compat.py
│ │ │ │ ├── test_config.py
│ │ │ │ ├── test_config_server.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_dynamicobjectmapping.py
│ │ │ │ ├── test_encoding.py
│ │ │ │ ├── test_etags.py
│ │ │ │ ├── test_http.py
│ │ │ │ ├── test_httpauth.py
│ │ │ │ ├── test_httputil.py
│ │ │ │ ├── test_iterator.py
│ │ │ │ ├── test_json.py
│ │ │ │ ├── test_logging.py
│ │ │ │ ├── test_mime.py
│ │ │ │ ├── test_misc_tools.py
│ │ │ │ ├── test_objectmapping.py
│ │ │ │ ├── test_params.py
│ │ │ │ ├── test_proxy.py
│ │ │ │ ├── test_refleaks.py
│ │ │ │ ├── test_request_obj.py
│ │ │ │ ├── test_routes.py
│ │ │ │ ├── test_session.py
│ │ │ │ ├── test_sessionauthenticate.py
│ │ │ │ ├── test_states.py
│ │ │ │ ├── test_static.py
│ │ │ │ ├── test_tools.py
│ │ │ │ ├── test_tutorials.py
│ │ │ │ ├── test_virtualhost.py
│ │ │ │ ├── test_wsgi_ns.py
│ │ │ │ ├── test_wsgi_unix_socket.py
│ │ │ │ ├── test_wsgi_vhost.py
│ │ │ │ ├── test_wsgiapps.py
│ │ │ │ ├── test_xmlrpc.py
│ │ │ │ └── webtest.py
│ │ │ └── tutorial/
│ │ │ ├── README.rst
│ │ │ ├── __init__.py
│ │ │ ├── custom_error.html
│ │ │ ├── tut01_helloworld.py
│ │ │ ├── tut02_expose_methods.py
│ │ │ ├── tut03_get_and_post.py
│ │ │ ├── tut04_complex_site.py
│ │ │ ├── tut05_derived_objects.py
│ │ │ ├── tut06_default_method.py
│ │ │ ├── tut07_sessions.py
│ │ │ ├── tut08_generators_and_yield.py
│ │ │ ├── tut09_files.py
│ │ │ ├── tut10_http_errors.py
│ │ │ └── tutorial.conf
│ │ ├── dateutil/
│ │ │ ├── __init__.py
│ │ │ ├── easter.py
│ │ │ ├── parser.py
│ │ │ ├── relativedelta.py
│ │ │ ├── rrule.py
│ │ │ ├── tz.py
│ │ │ ├── tzwin.py
│ │ │ └── zoneinfo/
│ │ │ └── __init__.py
│ │ ├── portend.py
│ │ ├── pytz/
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── lazy.py
│ │ │ ├── reference.py
│ │ │ ├── tzfile.py
│ │ │ ├── tzinfo.py
│ │ │ └── zoneinfo/
│ │ │ ├── Africa/
│ │ │ │ ├── Abidjan
│ │ │ │ ├── Accra
│ │ │ │ ├── Addis_Ababa
│ │ │ │ ├── Algiers
│ │ │ │ ├── Asmara
│ │ │ │ ├── Asmera
│ │ │ │ ├── Bamako
│ │ │ │ ├── Bangui
│ │ │ │ ├── Banjul
│ │ │ │ ├── Bissau
│ │ │ │ ├── Blantyre
│ │ │ │ ├── Brazzaville
│ │ │ │ ├── Bujumbura
│ │ │ │ ├── Cairo
│ │ │ │ ├── Casablanca
│ │ │ │ ├── Ceuta
│ │ │ │ ├── Conakry
│ │ │ │ ├── Dakar
│ │ │ │ ├── Dar_es_Salaam
│ │ │ │ ├── Djibouti
│ │ │ │ ├── Douala
│ │ │ │ ├── El_Aaiun
│ │ │ │ ├── Freetown
│ │ │ │ ├── Gaborone
│ │ │ │ ├── Harare
│ │ │ │ ├── Johannesburg
│ │ │ │ ├── Juba
│ │ │ │ ├── Kampala
│ │ │ │ ├── Khartoum
│ │ │ │ ├── Kigali
│ │ │ │ ├── Kinshasa
│ │ │ │ ├── Lagos
│ │ │ │ ├── Libreville
│ │ │ │ ├── Lome
│ │ │ │ ├── Luanda
│ │ │ │ ├── Lubumbashi
│ │ │ │ ├── Lusaka
│ │ │ │ ├── Malabo
│ │ │ │ ├── Maputo
│ │ │ │ ├── Maseru
│ │ │ │ ├── Mbabane
│ │ │ │ ├── Mogadishu
│ │ │ │ ├── Monrovia
│ │ │ │ ├── Nairobi
│ │ │ │ ├── Ndjamena
│ │ │ │ ├── Niamey
│ │ │ │ ├── Nouakchott
│ │ │ │ ├── Ouagadougou
│ │ │ │ ├── Porto-Novo
│ │ │ │ ├── Sao_Tome
│ │ │ │ ├── Timbuktu
│ │ │ │ ├── Tripoli
│ │ │ │ ├── Tunis
│ │ │ │ └── Windhoek
│ │ │ ├── America/
│ │ │ │ ├── Adak
│ │ │ │ ├── Anchorage
│ │ │ │ ├── Anguilla
│ │ │ │ ├── Antigua
│ │ │ │ ├── Araguaina
│ │ │ │ ├── Argentina/
│ │ │ │ │ ├── Buenos_Aires
│ │ │ │ │ ├── Catamarca
│ │ │ │ │ ├── ComodRivadavia
│ │ │ │ │ ├── Cordoba
│ │ │ │ │ ├── Jujuy
│ │ │ │ │ ├── La_Rioja
│ │ │ │ │ ├── Mendoza
│ │ │ │ │ ├── Rio_Gallegos
│ │ │ │ │ ├── Salta
│ │ │ │ │ ├── San_Juan
│ │ │ │ │ ├── San_Luis
│ │ │ │ │ ├── Tucuman
│ │ │ │ │ └── Ushuaia
│ │ │ │ ├── Aruba
│ │ │ │ ├── Asuncion
│ │ │ │ ├── Atikokan
│ │ │ │ ├── Atka
│ │ │ │ ├── Bahia
│ │ │ │ ├── Bahia_Banderas
│ │ │ │ ├── Barbados
│ │ │ │ ├── Belem
│ │ │ │ ├── Belize
│ │ │ │ ├── Blanc-Sablon
│ │ │ │ ├── Boa_Vista
│ │ │ │ ├── Bogota
│ │ │ │ ├── Boise
│ │ │ │ ├── Buenos_Aires
│ │ │ │ ├── Cambridge_Bay
│ │ │ │ ├── Campo_Grande
│ │ │ │ ├── Cancun
│ │ │ │ ├── Caracas
│ │ │ │ ├── Catamarca
│ │ │ │ ├── Cayenne
│ │ │ │ ├── Cayman
│ │ │ │ ├── Chicago
│ │ │ │ ├── Chihuahua
│ │ │ │ ├── Coral_Harbour
│ │ │ │ ├── Cordoba
│ │ │ │ ├── Costa_Rica
│ │ │ │ ├── Creston
│ │ │ │ ├── Cuiaba
│ │ │ │ ├── Curacao
│ │ │ │ ├── Danmarkshavn
│ │ │ │ ├── Dawson
│ │ │ │ ├── Dawson_Creek
│ │ │ │ ├── Denver
│ │ │ │ ├── Detroit
│ │ │ │ ├── Dominica
│ │ │ │ ├── Edmonton
│ │ │ │ ├── Eirunepe
│ │ │ │ ├── El_Salvador
│ │ │ │ ├── Ensenada
│ │ │ │ ├── Fort_Nelson
│ │ │ │ ├── Fort_Wayne
│ │ │ │ ├── Fortaleza
│ │ │ │ ├── Glace_Bay
│ │ │ │ ├── Godthab
│ │ │ │ ├── Goose_Bay
│ │ │ │ ├── Grand_Turk
│ │ │ │ ├── Grenada
│ │ │ │ ├── Guadeloupe
│ │ │ │ ├── Guatemala
│ │ │ │ ├── Guayaquil
│ │ │ │ ├── Guyana
│ │ │ │ ├── Halifax
│ │ │ │ ├── Havana
│ │ │ │ ├── Hermosillo
│ │ │ │ ├── Indiana/
│ │ │ │ │ ├── Indianapolis
│ │ │ │ │ ├── Knox
│ │ │ │ │ ├── Marengo
│ │ │ │ │ ├── Petersburg
│ │ │ │ │ ├── Tell_City
│ │ │ │ │ ├── Vevay
│ │ │ │ │ ├── Vincennes
│ │ │ │ │ └── Winamac
│ │ │ │ ├── Indianapolis
│ │ │ │ ├── Inuvik
│ │ │ │ ├── Iqaluit
│ │ │ │ ├── Jamaica
│ │ │ │ ├── Jujuy
│ │ │ │ ├── Juneau
│ │ │ │ ├── Kentucky/
│ │ │ │ │ ├── Louisville
│ │ │ │ │ └── Monticello
│ │ │ │ ├── Knox_IN
│ │ │ │ ├── Kralendijk
│ │ │ │ ├── La_Paz
│ │ │ │ ├── Lima
│ │ │ │ ├── Los_Angeles
│ │ │ │ ├── Louisville
│ │ │ │ ├── Lower_Princes
│ │ │ │ ├── Maceio
│ │ │ │ ├── Managua
│ │ │ │ ├── Manaus
│ │ │ │ ├── Marigot
│ │ │ │ ├── Martinique
│ │ │ │ ├── Matamoros
│ │ │ │ ├── Mazatlan
│ │ │ │ ├── Mendoza
│ │ │ │ ├── Menominee
│ │ │ │ ├── Merida
│ │ │ │ ├── Metlakatla
│ │ │ │ ├── Mexico_City
│ │ │ │ ├── Miquelon
│ │ │ │ ├── Moncton
│ │ │ │ ├── Monterrey
│ │ │ │ ├── Montevideo
│ │ │ │ ├── Montreal
│ │ │ │ ├── Montserrat
│ │ │ │ ├── Nassau
│ │ │ │ ├── New_York
│ │ │ │ ├── Nipigon
│ │ │ │ ├── Nome
│ │ │ │ ├── Noronha
│ │ │ │ ├── North_Dakota/
│ │ │ │ │ ├── Beulah
│ │ │ │ │ ├── Center
│ │ │ │ │ └── New_Salem
│ │ │ │ ├── Ojinaga
│ │ │ │ ├── Panama
│ │ │ │ ├── Pangnirtung
│ │ │ │ ├── Paramaribo
│ │ │ │ ├── Phoenix
│ │ │ │ ├── Port-au-Prince
│ │ │ │ ├── Port_of_Spain
│ │ │ │ ├── Porto_Acre
│ │ │ │ ├── Porto_Velho
│ │ │ │ ├── Puerto_Rico
│ │ │ │ ├── Punta_Arenas
│ │ │ │ ├── Rainy_River
│ │ │ │ ├── Rankin_Inlet
│ │ │ │ ├── Recife
│ │ │ │ ├── Regina
│ │ │ │ ├── Resolute
│ │ │ │ ├── Rio_Branco
│ │ │ │ ├── Rosario
│ │ │ │ ├── Santa_Isabel
│ │ │ │ ├── Santarem
│ │ │ │ ├── Santiago
│ │ │ │ ├── Santo_Domingo
│ │ │ │ ├── Sao_Paulo
│ │ │ │ ├── Scoresbysund
│ │ │ │ ├── Shiprock
│ │ │ │ ├── Sitka
│ │ │ │ ├── St_Barthelemy
│ │ │ │ ├── St_Johns
│ │ │ │ ├── St_Kitts
│ │ │ │ ├── St_Lucia
│ │ │ │ ├── St_Thomas
│ │ │ │ ├── St_Vincent
│ │ │ │ ├── Swift_Current
│ │ │ │ ├── Tegucigalpa
│ │ │ │ ├── Thule
│ │ │ │ ├── Thunder_Bay
│ │ │ │ ├── Tijuana
│ │ │ │ ├── Toronto
│ │ │ │ ├── Tortola
│ │ │ │ ├── Vancouver
│ │ │ │ ├── Virgin
│ │ │ │ ├── Whitehorse
│ │ │ │ ├── Winnipeg
│ │ │ │ ├── Yakutat
│ │ │ │ └── Yellowknife
│ │ │ ├── Antarctica/
│ │ │ │ ├── Casey
│ │ │ │ ├── Davis
│ │ │ │ ├── DumontDUrville
│ │ │ │ ├── Macquarie
│ │ │ │ ├── Mawson
│ │ │ │ ├── McMurdo
│ │ │ │ ├── Palmer
│ │ │ │ ├── Rothera
│ │ │ │ ├── South_Pole
│ │ │ │ ├── Syowa
│ │ │ │ ├── Troll
│ │ │ │ └── Vostok
│ │ │ ├── Arctic/
│ │ │ │ └── Longyearbyen
│ │ │ ├── Asia/
│ │ │ │ ├── Aden
│ │ │ │ ├── Almaty
│ │ │ │ ├── Amman
│ │ │ │ ├── Anadyr
│ │ │ │ ├── Aqtau
│ │ │ │ ├── Aqtobe
│ │ │ │ ├── Ashgabat
│ │ │ │ ├── Ashkhabad
│ │ │ │ ├── Atyrau
│ │ │ │ ├── Baghdad
│ │ │ │ ├── Bahrain
│ │ │ │ ├── Baku
│ │ │ │ ├── Bangkok
│ │ │ │ ├── Barnaul
│ │ │ │ ├── Beirut
│ │ │ │ ├── Bishkek
│ │ │ │ ├── Brunei
│ │ │ │ ├── Calcutta
│ │ │ │ ├── Chita
│ │ │ │ ├── Choibalsan
│ │ │ │ ├── Chongqing
│ │ │ │ ├── Chungking
│ │ │ │ ├── Colombo
│ │ │ │ ├── Dacca
│ │ │ │ ├── Damascus
│ │ │ │ ├── Dhaka
│ │ │ │ ├── Dili
│ │ │ │ ├── Dubai
│ │ │ │ ├── Dushanbe
│ │ │ │ ├── Famagusta
│ │ │ │ ├── Gaza
│ │ │ │ ├── Harbin
│ │ │ │ ├── Hebron
│ │ │ │ ├── Ho_Chi_Minh
│ │ │ │ ├── Hong_Kong
│ │ │ │ ├── Hovd
│ │ │ │ ├── Irkutsk
│ │ │ │ ├── Istanbul
│ │ │ │ ├── Jakarta
│ │ │ │ ├── Jayapura
│ │ │ │ ├── Jerusalem
│ │ │ │ ├── Kabul
│ │ │ │ ├── Kamchatka
│ │ │ │ ├── Karachi
│ │ │ │ ├── Kashgar
│ │ │ │ ├── Kathmandu
│ │ │ │ ├── Katmandu
│ │ │ │ ├── Khandyga
│ │ │ │ ├── Kolkata
│ │ │ │ ├── Krasnoyarsk
│ │ │ │ ├── Kuala_Lumpur
│ │ │ │ ├── Kuching
│ │ │ │ ├── Kuwait
│ │ │ │ ├── Macao
│ │ │ │ ├── Macau
│ │ │ │ ├── Magadan
│ │ │ │ ├── Makassar
│ │ │ │ ├── Manila
│ │ │ │ ├── Muscat
│ │ │ │ ├── Nicosia
│ │ │ │ ├── Novokuznetsk
│ │ │ │ ├── Novosibirsk
│ │ │ │ ├── Omsk
│ │ │ │ ├── Oral
│ │ │ │ ├── Phnom_Penh
│ │ │ │ ├── Pontianak
│ │ │ │ ├── Pyongyang
│ │ │ │ ├── Qatar
│ │ │ │ ├── Qyzylorda
│ │ │ │ ├── Rangoon
│ │ │ │ ├── Riyadh
│ │ │ │ ├── Saigon
│ │ │ │ ├── Sakhalin
│ │ │ │ ├── Samarkand
│ │ │ │ ├── Seoul
│ │ │ │ ├── Shanghai
│ │ │ │ ├── Singapore
│ │ │ │ ├── Srednekolymsk
│ │ │ │ ├── Taipei
│ │ │ │ ├── Tashkent
│ │ │ │ ├── Tbilisi
│ │ │ │ ├── Tehran
│ │ │ │ ├── Tel_Aviv
│ │ │ │ ├── Thimbu
│ │ │ │ ├── Thimphu
│ │ │ │ ├── Tokyo
│ │ │ │ ├── Tomsk
│ │ │ │ ├── Ujung_Pandang
│ │ │ │ ├── Ulaanbaatar
│ │ │ │ ├── Ulan_Bator
│ │ │ │ ├── Urumqi
│ │ │ │ ├── Ust-Nera
│ │ │ │ ├── Vientiane
│ │ │ │ ├── Vladivostok
│ │ │ │ ├── Yakutsk
│ │ │ │ ├── Yangon
│ │ │ │ ├── Yekaterinburg
│ │ │ │ └── Yerevan
│ │ │ ├── Atlantic/
│ │ │ │ ├── Azores
│ │ │ │ ├── Bermuda
│ │ │ │ ├── Canary
│ │ │ │ ├── Cape_Verde
│ │ │ │ ├── Faeroe
│ │ │ │ ├── Faroe
│ │ │ │ ├── Jan_Mayen
│ │ │ │ ├── Madeira
│ │ │ │ ├── Reykjavik
│ │ │ │ ├── South_Georgia
│ │ │ │ ├── St_Helena
│ │ │ │ └── Stanley
│ │ │ ├── Australia/
│ │ │ │ ├── ACT
│ │ │ │ ├── Adelaide
│ │ │ │ ├── Brisbane
│ │ │ │ ├── Broken_Hill
│ │ │ │ ├── Canberra
│ │ │ │ ├── Currie
│ │ │ │ ├── Darwin
│ │ │ │ ├── Eucla
│ │ │ │ ├── Hobart
│ │ │ │ ├── LHI
│ │ │ │ ├── Lindeman
│ │ │ │ ├── Lord_Howe
│ │ │ │ ├── Melbourne
│ │ │ │ ├── NSW
│ │ │ │ ├── North
│ │ │ │ ├── Perth
│ │ │ │ ├── Queensland
│ │ │ │ ├── South
│ │ │ │ ├── Sydney
│ │ │ │ ├── Tasmania
│ │ │ │ ├── Victoria
│ │ │ │ ├── West
│ │ │ │ └── Yancowinna
│ │ │ ├── Brazil/
│ │ │ │ ├── Acre
│ │ │ │ ├── DeNoronha
│ │ │ │ ├── East
│ │ │ │ └── West
│ │ │ ├── CET
│ │ │ ├── CST6CDT
│ │ │ ├── Canada/
│ │ │ │ ├── Atlantic
│ │ │ │ ├── Central
│ │ │ │ ├── Eastern
│ │ │ │ ├── Mountain
│ │ │ │ ├── Newfoundland
│ │ │ │ ├── Pacific
│ │ │ │ ├── Saskatchewan
│ │ │ │ └── Yukon
│ │ │ ├── Chile/
│ │ │ │ ├── Continental
│ │ │ │ └── EasterIsland
│ │ │ ├── Cuba
│ │ │ ├── EET
│ │ │ ├── EST
│ │ │ ├── EST5EDT
│ │ │ ├── Egypt
│ │ │ ├── Eire
│ │ │ ├── Etc/
│ │ │ │ ├── GMT
│ │ │ │ ├── GMT+0
│ │ │ │ ├── GMT+1
│ │ │ │ ├── GMT+10
│ │ │ │ ├── GMT+11
│ │ │ │ ├── GMT+12
│ │ │ │ ├── GMT+2
│ │ │ │ ├── GMT+3
│ │ │ │ ├── GMT+4
│ │ │ │ ├── GMT+5
│ │ │ │ ├── GMT+6
│ │ │ │ ├── GMT+7
│ │ │ │ ├── GMT+8
│ │ │ │ ├── GMT+9
│ │ │ │ ├── GMT-0
│ │ │ │ ├── GMT-1
│ │ │ │ ├── GMT-10
│ │ │ │ ├── GMT-11
│ │ │ │ ├── GMT-12
│ │ │ │ ├── GMT-13
│ │ │ │ ├── GMT-14
│ │ │ │ ├── GMT-2
│ │ │ │ ├── GMT-3
│ │ │ │ ├── GMT-4
│ │ │ │ ├── GMT-5
│ │ │ │ ├── GMT-6
│ │ │ │ ├── GMT-7
│ │ │ │ ├── GMT-8
│ │ │ │ ├── GMT-9
│ │ │ │ ├── GMT0
│ │ │ │ ├── Greenwich
│ │ │ │ ├── UCT
│ │ │ │ ├── UTC
│ │ │ │ ├── Universal
│ │ │ │ └── Zulu
│ │ │ ├── Europe/
│ │ │ │ ├── Amsterdam
│ │ │ │ ├── Andorra
│ │ │ │ ├── Astrakhan
│ │ │ │ ├── Athens
│ │ │ │ ├── Belfast
│ │ │ │ ├── Belgrade
│ │ │ │ ├── Berlin
│ │ │ │ ├── Bratislava
│ │ │ │ ├── Brussels
│ │ │ │ ├── Bucharest
│ │ │ │ ├── Budapest
│ │ │ │ ├── Busingen
│ │ │ │ ├── Chisinau
│ │ │ │ ├── Copenhagen
│ │ │ │ ├── Dublin
│ │ │ │ ├── Gibraltar
│ │ │ │ ├── Guernsey
│ │ │ │ ├── Helsinki
│ │ │ │ ├── Isle_of_Man
│ │ │ │ ├── Istanbul
│ │ │ │ ├── Jersey
│ │ │ │ ├── Kaliningrad
│ │ │ │ ├── Kiev
│ │ │ │ ├── Kirov
│ │ │ │ ├── Lisbon
│ │ │ │ ├── Ljubljana
│ │ │ │ ├── London
│ │ │ │ ├── Luxembourg
│ │ │ │ ├── Madrid
│ │ │ │ ├── Malta
│ │ │ │ ├── Mariehamn
│ │ │ │ ├── Minsk
│ │ │ │ ├── Monaco
│ │ │ │ ├── Moscow
│ │ │ │ ├── Nicosia
│ │ │ │ ├── Oslo
│ │ │ │ ├── Paris
│ │ │ │ ├── Podgorica
│ │ │ │ ├── Prague
│ │ │ │ ├── Riga
│ │ │ │ ├── Rome
│ │ │ │ ├── Samara
│ │ │ │ ├── San_Marino
│ │ │ │ ├── Sarajevo
│ │ │ │ ├── Saratov
│ │ │ │ ├── Simferopol
│ │ │ │ ├── Skopje
│ │ │ │ ├── Sofia
│ │ │ │ ├── Stockholm
│ │ │ │ ├── Tallinn
│ │ │ │ ├── Tirane
│ │ │ │ ├── Tiraspol
│ │ │ │ ├── Ulyanovsk
│ │ │ │ ├── Uzhgorod
│ │ │ │ ├── Vaduz
│ │ │ │ ├── Vatican
│ │ │ │ ├── Vienna
│ │ │ │ ├── Vilnius
│ │ │ │ ├── Volgograd
│ │ │ │ ├── Warsaw
│ │ │ │ ├── Zagreb
│ │ │ │ ├── Zaporozhye
│ │ │ │ └── Zurich
│ │ │ ├── Factory
│ │ │ ├── GB
│ │ │ ├── GB-Eire
│ │ │ ├── GMT
│ │ │ ├── GMT+0
│ │ │ ├── GMT-0
│ │ │ ├── GMT0
│ │ │ ├── Greenwich
│ │ │ ├── HST
│ │ │ ├── Hongkong
│ │ │ ├── Iceland
│ │ │ ├── Indian/
│ │ │ │ ├── Antananarivo
│ │ │ │ ├── Chagos
│ │ │ │ ├── Christmas
│ │ │ │ ├── Cocos
│ │ │ │ ├── Comoro
│ │ │ │ ├── Kerguelen
│ │ │ │ ├── Mahe
│ │ │ │ ├── Maldives
│ │ │ │ ├── Mauritius
│ │ │ │ ├── Mayotte
│ │ │ │ └── Reunion
│ │ │ ├── Iran
│ │ │ ├── Israel
│ │ │ ├── Jamaica
│ │ │ ├── Japan
│ │ │ ├── Kwajalein
│ │ │ ├── Libya
│ │ │ ├── MET
│ │ │ ├── MST
│ │ │ ├── MST7MDT
│ │ │ ├── Mexico/
│ │ │ │ ├── BajaNorte
│ │ │ │ ├── BajaSur
│ │ │ │ └── General
│ │ │ ├── NZ
│ │ │ ├── NZ-CHAT
│ │ │ ├── Navajo
│ │ │ ├── PRC
│ │ │ ├── PST8PDT
│ │ │ ├── Pacific/
│ │ │ │ ├── Apia
│ │ │ │ ├── Auckland
│ │ │ │ ├── Bougainville
│ │ │ │ ├── Chatham
│ │ │ │ ├── Chuuk
│ │ │ │ ├── Easter
│ │ │ │ ├── Efate
│ │ │ │ ├── Enderbury
│ │ │ │ ├── Fakaofo
│ │ │ │ ├── Fiji
│ │ │ │ ├── Funafuti
│ │ │ │ ├── Galapagos
│ │ │ │ ├── Gambier
│ │ │ │ ├── Guadalcanal
│ │ │ │ ├── Guam
│ │ │ │ ├── Honolulu
│ │ │ │ ├── Johnston
│ │ │ │ ├── Kiritimati
│ │ │ │ ├── Kosrae
│ │ │ │ ├── Kwajalein
│ │ │ │ ├── Majuro
│ │ │ │ ├── Marquesas
│ │ │ │ ├── Midway
│ │ │ │ ├── Nauru
│ │ │ │ ├── Niue
│ │ │ │ ├── Norfolk
│ │ │ │ ├── Noumea
│ │ │ │ ├── Pago_Pago
│ │ │ │ ├── Palau
│ │ │ │ ├── Pitcairn
│ │ │ │ ├── Pohnpei
│ │ │ │ ├── Ponape
│ │ │ │ ├── Port_Moresby
│ │ │ │ ├── Rarotonga
│ │ │ │ ├── Saipan
│ │ │ │ ├── Samoa
│ │ │ │ ├── Tahiti
│ │ │ │ ├── Tarawa
│ │ │ │ ├── Tongatapu
│ │ │ │ ├── Truk
│ │ │ │ ├── Wake
│ │ │ │ ├── Wallis
│ │ │ │ └── Yap
│ │ │ ├── Poland
│ │ │ ├── Portugal
│ │ │ ├── ROC
│ │ │ ├── ROK
│ │ │ ├── Singapore
│ │ │ ├── Turkey
│ │ │ ├── UCT
│ │ │ ├── US/
│ │ │ │ ├── Alaska
│ │ │ │ ├── Aleutian
│ │ │ │ ├── Arizona
│ │ │ │ ├── Central
│ │ │ │ ├── East-Indiana
│ │ │ │ ├── Eastern
│ │ │ │ ├── Hawaii
│ │ │ │ ├── Indiana-Starke
│ │ │ │ ├── Michigan
│ │ │ │ ├── Mountain
│ │ │ │ ├── Pacific
│ │ │ │ └── Samoa
│ │ │ ├── UTC
│ │ │ ├── Universal
│ │ │ ├── W-SU
│ │ │ ├── WET
│ │ │ ├── Zulu
│ │ │ ├── iso3166.tab
│ │ │ ├── leapseconds
│ │ │ ├── posixrules
│ │ │ ├── tzdata.zi
│ │ │ ├── zone.tab
│ │ │ └── zone1970.tab
│ │ ├── six.py
│ │ └── tempora/
│ │ ├── __init__.py
│ │ ├── schedule.py
│ │ ├── tests/
│ │ │ └── test_schedule.py
│ │ └── timing.py
│ ├── python3/
│ │ └── site-packages/
│ │ ├── __init__.py
│ │ ├── cheroot/
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _compat.py
│ │ │ ├── cli.py
│ │ │ ├── connections.py
│ │ │ ├── errors.py
│ │ │ ├── makefile.py
│ │ │ ├── server.py
│ │ │ ├── ssl/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── builtin.py
│ │ │ │ └── pyopenssl.py
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conftest.py
│ │ │ │ ├── helper.py
│ │ │ │ ├── test__compat.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_dispatch.py
│ │ │ │ ├── test_errors.py
│ │ │ │ ├── test_makefile.py
│ │ │ │ ├── test_server.py
│ │ │ │ ├── test_ssl.py
│ │ │ │ └── webtest.py
│ │ │ ├── testing.py
│ │ │ ├── workers/
│ │ │ │ ├── __init__.py
│ │ │ │ └── threadpool.py
│ │ │ └── wsgi.py
│ │ ├── cherrypy/
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _cpchecker.py
│ │ │ ├── _cpcompat.py
│ │ │ ├── _cpconfig.py
│ │ │ ├── _cpdispatch.py
│ │ │ ├── _cperror.py
│ │ │ ├── _cplogging.py
│ │ │ ├── _cpmodpy.py
│ │ │ ├── _cpnative_server.py
│ │ │ ├── _cpreqbody.py
│ │ │ ├── _cprequest.py
│ │ │ ├── _cpserver.py
│ │ │ ├── _cptools.py
│ │ │ ├── _cptree.py
│ │ │ ├── _cpwsgi.py
│ │ │ ├── _cpwsgi_server.py
│ │ │ ├── _helper.py
│ │ │ ├── _json.py
│ │ │ ├── daemon.py
│ │ │ ├── lib/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth_basic.py
│ │ │ │ ├── auth_digest.py
│ │ │ │ ├── caching.py
│ │ │ │ ├── covercp.py
│ │ │ │ ├── cpstats.py
│ │ │ │ ├── cptools.py
│ │ │ │ ├── encoding.py
│ │ │ │ ├── gctools.py
│ │ │ │ ├── httputil.py
│ │ │ │ ├── jsontools.py
│ │ │ │ ├── locking.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── reprconf.py
│ │ │ │ ├── sessions.py
│ │ │ │ ├── static.py
│ │ │ │ └── xmlrpcutil.py
│ │ │ ├── process/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── plugins.py
│ │ │ │ ├── servers.py
│ │ │ │ ├── win32.py
│ │ │ │ └── wspbus.py
│ │ │ ├── scaffold/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── apache-fcgi.conf
│ │ │ │ ├── example.conf
│ │ │ │ └── site.conf
│ │ │ ├── test/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _test_decorators.py
│ │ │ │ ├── _test_states_demo.py
│ │ │ │ ├── benchmark.py
│ │ │ │ ├── checkerdemo.py
│ │ │ │ ├── fastcgi.conf
│ │ │ │ ├── fcgi.conf
│ │ │ │ ├── helper.py
│ │ │ │ ├── logtest.py
│ │ │ │ ├── modfastcgi.py
│ │ │ │ ├── modfcgid.py
│ │ │ │ ├── modpy.py
│ │ │ │ ├── modwsgi.py
│ │ │ │ ├── sessiondemo.py
│ │ │ │ ├── static/
│ │ │ │ │ ├── 404.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── style.css
│ │ │ │ ├── test.pem
│ │ │ │ ├── test_auth_basic.py
│ │ │ │ ├── test_auth_digest.py
│ │ │ │ ├── test_bus.py
│ │ │ │ ├── test_caching.py
│ │ │ │ ├── test_config.py
│ │ │ │ ├── test_config_server.py
│ │ │ │ ├── test_conn.py
│ │ │ │ ├── test_core.py
│ │ │ │ ├── test_dynamicobjectmapping.py
│ │ │ │ ├── test_encoding.py
│ │ │ │ ├── test_etags.py
│ │ │ │ ├── test_http.py
│ │ │ │ ├── test_httputil.py
│ │ │ │ ├── test_iterator.py
│ │ │ │ ├── test_json.py
│ │ │ │ ├── test_logging.py
│ │ │ │ ├── test_mime.py
│ │ │ │ ├── test_misc_tools.py
│ │ │ │ ├── test_native.py
│ │ │ │ ├── test_objectmapping.py
│ │ │ │ ├── test_params.py
│ │ │ │ ├── test_plugins.py
│ │ │ │ ├── test_proxy.py
│ │ │ │ ├── test_refleaks.py
│ │ │ │ ├── test_request_obj.py
│ │ │ │ ├── test_routes.py
│ │ │ │ ├── test_session.py
│ │ │ │ ├── test_sessionauthenticate.py
│ │ │ │ ├── test_states.py
│ │ │ │ ├── test_static.py
│ │ │ │ ├── test_tools.py
│ │ │ │ ├── test_tutorials.py
│ │ │ │ ├── test_virtualhost.py
│ │ │ │ ├── test_wsgi_ns.py
│ │ │ │ ├── test_wsgi_unix_socket.py
│ │ │ │ ├── test_wsgi_vhost.py
│ │ │ │ ├── test_wsgiapps.py
│ │ │ │ ├── test_xmlrpc.py
│ │ │ │ └── webtest.py
│ │ │ └── tutorial/
│ │ │ ├── README.rst
│ │ │ ├── __init__.py
│ │ │ ├── custom_error.html
│ │ │ ├── tut01_helloworld.py
│ │ │ ├── tut02_expose_methods.py
│ │ │ ├── tut03_get_and_post.py
│ │ │ ├── tut04_complex_site.py
│ │ │ ├── tut05_derived_objects.py
│ │ │ ├── tut06_default_method.py
│ │ │ ├── tut07_sessions.py
│ │ │ ├── tut08_generators_and_yield.py
│ │ │ ├── tut09_files.py
│ │ │ ├── tut10_http_errors.py
│ │ │ └── tutorial.conf
│ │ ├── dateutil/
│ │ │ ├── __init__.py
│ │ │ ├── _common.py
│ │ │ ├── _version.py
│ │ │ ├── easter.py
│ │ │ ├── parser/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _parser.py
│ │ │ │ └── isoparser.py
│ │ │ ├── relativedelta.py
│ │ │ ├── rrule.py
│ │ │ ├── tz/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _common.py
│ │ │ │ ├── _factories.py
│ │ │ │ ├── tz.py
│ │ │ │ └── win.py
│ │ │ ├── tzwin.py
│ │ │ ├── utils.py
│ │ │ └── zoneinfo/
│ │ │ ├── __init__.py
│ │ │ └── rebuild.py
│ │ ├── jaraco/
│ │ │ ├── __init__.py
│ │ │ ├── collections.py
│ │ │ ├── context.py
│ │ │ ├── functools.py
│ │ │ └── text/
│ │ │ ├── Lorem ipsum.txt
│ │ │ ├── __init__.py
│ │ │ ├── layouts.py
│ │ │ ├── show-newlines.py
│ │ │ ├── strip-prefix.py
│ │ │ ├── to-dvorak.py
│ │ │ └── to-qwerty.py
│ │ ├── portend.py
│ │ ├── tempora/
│ │ │ ├── __init__.py
│ │ │ ├── schedule.py
│ │ │ ├── tests/
│ │ │ │ └── test_schedule.py
│ │ │ ├── timing.py
│ │ │ └── utc.py
│ │ └── zc/
│ │ └── lockfile/
│ │ ├── __init__.py
│ │ └── tests.py
│ └── python3.6/
│ └── site-packages/
│ ├── __init__.py
│ ├── cheroot/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── _compat.py
│ │ ├── cli.py
│ │ ├── connections.py
│ │ ├── errors.py
│ │ ├── makefile.py
│ │ ├── server.py
│ │ ├── ssl/
│ │ │ ├── __init__.py
│ │ │ ├── builtin.py
│ │ │ └── pyopenssl.py
│ │ ├── test/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── helper.py
│ │ │ ├── test__compat.py
│ │ │ ├── test_conn.py
│ │ │ ├── test_core.py
│ │ │ ├── test_dispatch.py
│ │ │ ├── test_errors.py
│ │ │ ├── test_makefile.py
│ │ │ ├── test_server.py
│ │ │ ├── test_ssl.py
│ │ │ └── webtest.py
│ │ ├── testing.py
│ │ ├── workers/
│ │ │ ├── __init__.py
│ │ │ └── threadpool.py
│ │ └── wsgi.py
│ ├── cherrypy/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── _cpchecker.py
│ │ ├── _cpcompat.py
│ │ ├── _cpconfig.py
│ │ ├── _cpdispatch.py
│ │ ├── _cperror.py
│ │ ├── _cplogging.py
│ │ ├── _cpmodpy.py
│ │ ├── _cpnative_server.py
│ │ ├── _cpreqbody.py
│ │ ├── _cprequest.py
│ │ ├── _cpserver.py
│ │ ├── _cptools.py
│ │ ├── _cptree.py
│ │ ├── _cpwsgi.py
│ │ ├── _cpwsgi_server.py
│ │ ├── _helper.py
│ │ ├── _json.py
│ │ ├── daemon.py
│ │ ├── lib/
│ │ │ ├── __init__.py
│ │ │ ├── auth_basic.py
│ │ │ ├── auth_digest.py
│ │ │ ├── caching.py
│ │ │ ├── covercp.py
│ │ │ ├── cpstats.py
│ │ │ ├── cptools.py
│ │ │ ├── encoding.py
│ │ │ ├── gctools.py
│ │ │ ├── httputil.py
│ │ │ ├── jsontools.py
│ │ │ ├── locking.py
│ │ │ ├── profiler.py
│ │ │ ├── reprconf.py
│ │ │ ├── sessions.py
│ │ │ ├── static.py
│ │ │ └── xmlrpcutil.py
│ │ ├── process/
│ │ │ ├── __init__.py
│ │ │ ├── plugins.py
│ │ │ ├── servers.py
│ │ │ ├── win32.py
│ │ │ └── wspbus.py
│ │ ├── scaffold/
│ │ │ ├── __init__.py
│ │ │ ├── apache-fcgi.conf
│ │ │ ├── example.conf
│ │ │ └── site.conf
│ │ ├── test/
│ │ │ ├── __init__.py
│ │ │ ├── _test_decorators.py
│ │ │ ├── _test_states_demo.py
│ │ │ ├── benchmark.py
│ │ │ ├── checkerdemo.py
│ │ │ ├── fastcgi.conf
│ │ │ ├── fcgi.conf
│ │ │ ├── helper.py
│ │ │ ├── logtest.py
│ │ │ ├── modfastcgi.py
│ │ │ ├── modfcgid.py
│ │ │ ├── modpy.py
│ │ │ ├── modwsgi.py
│ │ │ ├── sessiondemo.py
│ │ │ ├── static/
│ │ │ │ ├── 404.html
│ │ │ │ └── index.html
│ │ │ ├── style.css
│ │ │ ├── test.pem
│ │ │ ├── test_auth_basic.py
│ │ │ ├── test_auth_digest.py
│ │ │ ├── test_bus.py
│ │ │ ├── test_caching.py
│ │ │ ├── test_config.py
│ │ │ ├── test_config_server.py
│ │ │ ├── test_conn.py
│ │ │ ├── test_core.py
│ │ │ ├── test_dynamicobjectmapping.py
│ │ │ ├── test_encoding.py
│ │ │ ├── test_etags.py
│ │ │ ├── test_http.py
│ │ │ ├── test_httputil.py
│ │ │ ├── test_iterator.py
│ │ │ ├── test_json.py
│ │ │ ├── test_logging.py
│ │ │ ├── test_mime.py
│ │ │ ├── test_misc_tools.py
│ │ │ ├── test_native.py
│ │ │ ├── test_objectmapping.py
│ │ │ ├── test_params.py
│ │ │ ├── test_plugins.py
│ │ │ ├── test_proxy.py
│ │ │ ├── test_refleaks.py
│ │ │ ├── test_request_obj.py
│ │ │ ├── test_routes.py
│ │ │ ├── test_session.py
│ │ │ ├── test_sessionauthenticate.py
│ │ │ ├── test_states.py
│ │ │ ├── test_static.py
│ │ │ ├── test_tools.py
│ │ │ ├── test_tutorials.py
│ │ │ ├── test_virtualhost.py
│ │ │ ├── test_wsgi_ns.py
│ │ │ ├── test_wsgi_unix_socket.py
│ │ │ ├── test_wsgi_vhost.py
│ │ │ ├── test_wsgiapps.py
│ │ │ ├── test_xmlrpc.py
│ │ │ └── webtest.py
│ │ └── tutorial/
│ │ ├── README.rst
│ │ ├── __init__.py
│ │ ├── custom_error.html
│ │ ├── tut01_helloworld.py
│ │ ├── tut02_expose_methods.py
│ │ ├── tut03_get_and_post.py
│ │ ├── tut04_complex_site.py
│ │ ├── tut05_derived_objects.py
│ │ ├── tut06_default_method.py
│ │ ├── tut07_sessions.py
│ │ ├── tut08_generators_and_yield.py
│ │ ├── tut09_files.py
│ │ ├── tut10_http_errors.py
│ │ └── tutorial.conf
│ ├── dateutil/
│ │ ├── __init__.py
│ │ ├── _common.py
│ │ ├── _version.py
│ │ ├── easter.py
│ │ ├── parser/
│ │ │ ├── __init__.py
│ │ │ ├── _parser.py
│ │ │ └── isoparser.py
│ │ ├── relativedelta.py
│ │ ├── rrule.py
│ │ ├── tz/
│ │ │ ├── __init__.py
│ │ │ ├── _common.py
│ │ │ ├── _factories.py
│ │ │ ├── tz.py
│ │ │ └── win.py
│ │ ├── tzwin.py
│ │ ├── utils.py
│ │ └── zoneinfo/
│ │ ├── __init__.py
│ │ └── rebuild.py
│ ├── jaraco/
│ │ ├── __init__.py
│ │ └── functools.py
│ ├── portend.py
│ ├── tempora/
│ │ ├── __init__.py
│ │ ├── schedule.py
│ │ ├── tests/
│ │ │ └── test_schedule.py
│ │ ├── timing.py
│ │ └── utc.py
│ └── zc/
│ └── lockfile/
│ ├── __init__.py
│ └── tests.py
├── LICENSE
├── README.md
├── VERSION
├── doc/
│ ├── alias.json
│ ├── book/
│ │ └── doc/
│ │ ├── doc_tactic-developer/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── ar01s07.html
│ │ │ ├── ar01s08.html
│ │ │ ├── ar01s09.html
│ │ │ ├── ar01s10.html
│ │ │ ├── ar01s11.html
│ │ │ ├── ar01s12.html
│ │ │ ├── ar01s13.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ ├── doc_tactic-end-user/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── ar01s07.html
│ │ │ ├── ar01s08.html
│ │ │ ├── ar01s09.html
│ │ │ ├── ar01s10.html
│ │ │ ├── ar01s11.html
│ │ │ ├── ar01s12.html
│ │ │ ├── ar01s13.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ ├── doc_tactic-quickstart/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ ├── doc_tactic-setup/
│ │ │ └── html/
│ │ │ ├── ar01s01.html
│ │ │ ├── ar01s02.html
│ │ │ ├── ar01s03.html
│ │ │ ├── ar01s04.html
│ │ │ ├── ar01s05.html
│ │ │ ├── ar01s06.html
│ │ │ ├── ar01s07.html
│ │ │ ├── ar01s08.html
│ │ │ ├── ar01s09.html
│ │ │ ├── ar01s10.html
│ │ │ ├── ar01s11.html
│ │ │ ├── ar01s12.html
│ │ │ ├── ar01s13.html
│ │ │ ├── ar01s14.html
│ │ │ ├── ar01s15.html
│ │ │ ├── ar01s16.html
│ │ │ ├── ar01s17.html
│ │ │ ├── ar01s18.html
│ │ │ ├── ar01s19.html
│ │ │ ├── ar01s20.html
│ │ │ ├── ar01s21.html
│ │ │ ├── docbook-xsl.css
│ │ │ └── index.html
│ │ └── doc_tactic-sys-admin/
│ │ └── html/
│ │ ├── ar01s01.html
│ │ ├── ar01s02.html
│ │ ├── ar01s03.html
│ │ ├── ar01s04.html
│ │ ├── ar01s05.html
│ │ ├── ar01s06.html
│ │ ├── ar01s07.html
│ │ ├── ar01s08.html
│ │ ├── ar01s09.html
│ │ ├── ar01s10.html
│ │ ├── ar01s11.html
│ │ ├── ar01s12.html
│ │ ├── docbook-xsl.css
│ │ └── index.html
│ ├── epl-v10.html
│ ├── main.html
│ ├── pdf.html
│ └── verify_aliases.py
└── src/
├── __init__.py
├── asset_security.py
├── client/
│ ├── __init__.py
│ ├── examples/
│ │ ├── bootstrap_get_tactic_server_example.py
│ │ ├── checkin.py
│ │ ├── checkin_pipeline.py
│ │ ├── checkin_plates.py
│ │ ├── checkin_render.py
│ │ ├── checkin_render_layer.py
│ │ ├── checkin_shot.py
│ │ ├── checkout.py
│ │ ├── ping.py
│ │ ├── query.py
│ │ ├── query_shot.py
│ │ └── submit_dailies.py
│ ├── tactic_client_lib/
│ │ ├── VERSION
│ │ ├── VERSION_API
│ │ ├── __init__.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ └── upload_multipart.py
│ │ ├── interpreter/
│ │ │ ├── __init__.py
│ │ │ ├── callback.py
│ │ │ ├── examples.py
│ │ │ ├── handler.py
│ │ │ ├── interpreter.py
│ │ │ └── pipeline.py
│ │ ├── scm/
│ │ │ ├── __init__.py
│ │ │ ├── delegate.py
│ │ │ ├── perforce.py
│ │ │ ├── scm_impl.py
│ │ │ ├── scm_test.py
│ │ │ ├── subversion.py
│ │ │ └── tactic_impl.py
│ │ ├── tactic_server_stub.py
│ │ └── test/
│ │ ├── __init__.py
│ │ └── handler.py
│ └── test/
│ ├── application_api_test.py
│ ├── client_api_test.py
│ ├── expression_test.py
│ ├── maya_test.py
│ ├── pipeline_test.py
│ ├── sample3d_test.py
│ └── transaction_test.py
├── config/
│ ├── design/
│ │ └── sobject/
│ │ ├── design-conf.xml
│ │ └── product-conf.xml
│ ├── effects/
│ │ └── sobject/
│ │ └── plate-conf.xml
│ ├── game/
│ │ └── sobject/
│ │ └── storyboard-conf.xml
│ ├── prod/
│ │ └── sobject/
│ │ ├── art_reference-conf.xml
│ │ ├── asset-conf.xml
│ │ ├── asset_library-conf.xml
│ │ ├── camera-conf.xml
│ │ ├── episode-conf.xml
│ │ ├── instance-conf.xml
│ │ ├── naming-conf.xml
│ │ ├── prod_setting-conf.xml
│ │ ├── render-conf.xml
│ │ ├── script-conf.xml
│ │ ├── sequence-conf.xml
│ │ ├── series-conf.xml
│ │ ├── shot-conf.xml
│ │ ├── storyboard-conf.xml
│ │ └── template-conf.xml
│ └── sthpw/
│ ├── sobject/
│ │ ├── access_rule-conf.xml
│ │ ├── login-conf.xml
│ │ ├── login_group-conf.xml
│ │ ├── note-conf.xml
│ │ ├── notification-conf.xml
│ │ ├── notification_log-conf.xml
│ │ ├── person-conf.xml
│ │ ├── pipeline-conf.xml
│ │ ├── project-conf.xml
│ │ ├── project_type-conf.xml
│ │ ├── queue-conf.xml
│ │ ├── snapshot-conf.xml
│ │ ├── task-conf.xml
│ │ ├── ticket-conf.xml
│ │ ├── timecard-conf.xml
│ │ ├── transaction_log-conf.xml
│ │ └── unittest/
│ │ └── person-conf.xml
│ └── webapp/
│ ├── remko-wdg.xml
│ └── sample.xml
├── config2/
│ └── search_type/
│ ├── search/
│ │ └── DEFAULT-conf.xml
│ └── widget/
│ ├── config/
│ │ ├── bid-conf.xml
│ │ ├── client_trigger-conf.xml
│ │ ├── custom_script-conf.xml
│ │ ├── naming-conf.xml
│ │ ├── pipeline-conf.xml
│ │ ├── plugin-conf.xml
│ │ ├── process-conf.xml
│ │ ├── prod_setting-conf.xml
│ │ ├── translation-conf.xml
│ │ ├── trigger-conf.xml
│ │ ├── url-conf.xml
│ │ └── widget_config-conf.xml
│ ├── prod/
│ │ ├── DEFAULT-conf.xml
│ │ ├── art_reference-conf.xml
│ │ ├── asset-conf.xml
│ │ ├── asset_library-conf.xml
│ │ ├── bin-conf.xml
│ │ ├── camera-conf.xml
│ │ ├── composite-conf.xml
│ │ ├── cut_sequence-conf.xml
│ │ ├── layer-conf.xml
│ │ ├── plate-conf.xml
│ │ ├── prod_setting-conf.xml
│ │ ├── render-conf.xml
│ │ ├── script-conf.xml
│ │ ├── sequence-conf.xml
│ │ ├── shot-conf.xml
│ │ ├── shot_instance-conf.xml
│ │ ├── storyboard-conf.xml
│ │ └── submission-conf.xml
│ ├── sthpw/
│ │ ├── DEFAULT-conf.xml
│ │ ├── access_rule-conf.xml
│ │ ├── custom_property-conf.xml
│ │ ├── custom_script-conf.xml
│ │ ├── db_resource-conf.xml
│ │ ├── debug_log-conf.xml
│ │ ├── exception_log-conf.xml
│ │ ├── file-conf.xml
│ │ ├── login-conf.xml
│ │ ├── login_group-conf.xml
│ │ ├── message_log-conf.xml
│ │ ├── milestone-conf.xml
│ │ ├── note-conf.xml
│ │ ├── notification-conf.xml
│ │ ├── notification_log-conf.xml
│ │ ├── pipeline-conf.xml
│ │ ├── plugin-conf.xml
│ │ ├── pref_list-conf.xml
│ │ ├── project-conf.xml
│ │ ├── project_type-conf.xml
│ │ ├── queue-conf.xml
│ │ ├── schema-conf.xml
│ │ ├── search_object-conf.xml
│ │ ├── search_type-conf.xml
│ │ ├── snapshot-conf.xml
│ │ ├── sobject_list-conf.xml
│ │ ├── sobject_log-conf.xml
│ │ ├── status_log-conf.xml
│ │ ├── sync_job-conf.xml
│ │ ├── sync_server-conf.xml
│ │ ├── task-conf.xml
│ │ ├── template-conf.xml
│ │ ├── ticket-conf.xml
│ │ ├── timecard-conf.xml
│ │ ├── transaction_log-conf.xml
│ │ ├── translation-conf.xml
│ │ ├── trigger-conf.xml
│ │ └── work_hour-conf.xml
│ └── unittest/
│ └── person-conf.xml
├── context/
│ ├── VERSION
│ ├── VERSION_API
│ ├── api/
│ │ ├── README
│ │ ├── tactic.js
│ │ └── upload.js
│ ├── icons/
│ │ └── common/
│ │ └── loading_anim.xcf
│ ├── javascript/
│ │ ├── Common.js
│ │ ├── DynamicLoader.js
│ │ ├── EventContainer.js
│ │ ├── MayaWebTools.js
│ │ ├── Overlay.js
│ │ ├── PopupWindow.js
│ │ ├── PyFlash.js
│ │ ├── PyHoudini.js
│ │ ├── PyMaya.js
│ │ ├── PyPerforce.js
│ │ └── PyXSI.js
│ ├── react/
│ │ ├── ag-grid-community.min.noStyle.js
│ │ ├── ag-grid.css
│ │ ├── ag-theme-alpine.css
│ │ ├── react-dom.development.js
│ │ ├── react.development.js
│ │ └── redux.js
│ ├── spt_js/
│ │ ├── UnityObject.js
│ │ ├── ace/
│ │ │ └── ace-1.4.7/
│ │ │ └── src/
│ │ │ ├── ace.js
│ │ │ ├── ext-beautify.js
│ │ │ ├── ext-elastic_tabstops_lite.js
│ │ │ ├── ext-emmet.js
│ │ │ ├── ext-error_marker.js
│ │ │ ├── ext-keybinding_menu.js
│ │ │ ├── ext-language_tools.js
│ │ │ ├── ext-linking.js
│ │ │ ├── ext-modelist.js
│ │ │ ├── ext-options.js
│ │ │ ├── ext-prompt.js
│ │ │ ├── ext-rtl.js
│ │ │ ├── ext-searchbox.js
│ │ │ ├── ext-settings_menu.js
│ │ │ ├── ext-spellcheck.js
│ │ │ ├── ext-split.js
│ │ │ ├── ext-static_highlight.js
│ │ │ ├── ext-statusbar.js
│ │ │ ├── ext-textarea.js
│ │ │ ├── ext-themelist.js
│ │ │ ├── ext-whitespace.js
│ │ │ ├── keybinding-emacs.js
│ │ │ ├── keybinding-sublime.js
│ │ │ ├── keybinding-vim.js
│ │ │ ├── mode-abap.js
│ │ │ ├── mode-abc.js
│ │ │ ├── mode-actionscript.js
│ │ │ ├── mode-ada.js
│ │ │ ├── mode-apache_conf.js
│ │ │ ├── mode-apex.js
│ │ │ ├── mode-applescript.js
│ │ │ ├── mode-aql.js
│ │ │ ├── mode-asciidoc.js
│ │ │ ├── mode-asl.js
│ │ │ ├── mode-assembly_x86.js
│ │ │ ├── mode-autohotkey.js
│ │ │ ├── mode-batchfile.js
│ │ │ ├── mode-bro.js
│ │ │ ├── mode-c9search.js
│ │ │ ├── mode-c_cpp.js
│ │ │ ├── mode-cirru.js
│ │ │ ├── mode-clojure.js
│ │ │ ├── mode-cobol.js
│ │ │ ├── mode-coffee.js
│ │ │ ├── mode-coldfusion.js
│ │ │ ├── mode-crystal.js
│ │ │ ├── mode-csharp.js
│ │ │ ├── mode-csound_document.js
│ │ │ ├── mode-csound_orchestra.js
│ │ │ ├── mode-csound_score.js
│ │ │ ├── mode-csp.js
│ │ │ ├── mode-css.js
│ │ │ ├── mode-curly.js
│ │ │ ├── mode-d.js
│ │ │ ├── mode-dart.js
│ │ │ ├── mode-diff.js
│ │ │ ├── mode-django.js
│ │ │ ├── mode-dockerfile.js
│ │ │ ├── mode-dot.js
│ │ │ ├── mode-drools.js
│ │ │ ├── mode-edifact.js
│ │ │ ├── mode-eiffel.js
│ │ │ ├── mode-ejs.js
│ │ │ ├── mode-elixir.js
│ │ │ ├── mode-elm.js
│ │ │ ├── mode-erlang.js
│ │ │ ├── mode-forth.js
│ │ │ ├── mode-fortran.js
│ │ │ ├── mode-fsharp.js
│ │ │ ├── mode-fsl.js
│ │ │ ├── mode-ftl.js
│ │ │ ├── mode-gcode.js
│ │ │ ├── mode-gherkin.js
│ │ │ ├── mode-gitignore.js
│ │ │ ├── mode-glsl.js
│ │ │ ├── mode-gobstones.js
│ │ │ ├── mode-golang.js
│ │ │ ├── mode-graphqlschema.js
│ │ │ ├── mode-groovy.js
│ │ │ ├── mode-haml.js
│ │ │ ├── mode-handlebars.js
│ │ │ ├── mode-haskell.js
│ │ │ ├── mode-haskell_cabal.js
│ │ │ ├── mode-haxe.js
│ │ │ ├── mode-hjson.js
│ │ │ ├── mode-html.js
│ │ │ ├── mode-html_elixir.js
│ │ │ ├── mode-html_ruby.js
│ │ │ ├── mode-ini.js
│ │ │ ├── mode-io.js
│ │ │ ├── mode-jack.js
│ │ │ ├── mode-jade.js
│ │ │ ├── mode-java.js
│ │ │ ├── mode-javascript.js
│ │ │ ├── mode-json.js
│ │ │ ├── mode-jsoniq.js
│ │ │ ├── mode-jsp.js
│ │ │ ├── mode-jssm.js
│ │ │ ├── mode-jsx.js
│ │ │ ├── mode-julia.js
│ │ │ ├── mode-kotlin.js
│ │ │ ├── mode-latex.js
│ │ │ ├── mode-less.js
│ │ │ ├── mode-liquid.js
│ │ │ ├── mode-lisp.js
│ │ │ ├── mode-livescript.js
│ │ │ ├── mode-logiql.js
│ │ │ ├── mode-logtalk.js
│ │ │ ├── mode-lsl.js
│ │ │ ├── mode-lua.js
│ │ │ ├── mode-luapage.js
│ │ │ ├── mode-lucene.js
│ │ │ ├── mode-makefile.js
│ │ │ ├── mode-markdown.js
│ │ │ ├── mode-mask.js
│ │ │ ├── mode-matlab.js
│ │ │ ├── mode-maze.js
│ │ │ ├── mode-mel.js
│ │ │ ├── mode-mixal.js
│ │ │ ├── mode-mushcode.js
│ │ │ ├── mode-mysql.js
│ │ │ ├── mode-nginx.js
│ │ │ ├── mode-nim.js
│ │ │ ├── mode-nix.js
│ │ │ ├── mode-nsis.js
│ │ │ ├── mode-objectivec.js
│ │ │ ├── mode-ocaml.js
│ │ │ ├── mode-pascal.js
│ │ │ ├── mode-perl.js
│ │ │ ├── mode-perl6.js
│ │ │ ├── mode-pgsql.js
│ │ │ ├── mode-php.js
│ │ │ ├── mode-php_laravel_blade.js
│ │ │ ├── mode-pig.js
│ │ │ ├── mode-plain_text.js
│ │ │ ├── mode-powershell.js
│ │ │ ├── mode-praat.js
│ │ │ ├── mode-prolog.js
│ │ │ ├── mode-properties.js
│ │ │ ├── mode-protobuf.js
│ │ │ ├── mode-puppet.js
│ │ │ ├── mode-python.js
│ │ │ ├── mode-r.js
│ │ │ ├── mode-razor.js
│ │ │ ├── mode-rdoc.js
│ │ │ ├── mode-red.js
│ │ │ ├── mode-redshift.js
│ │ │ ├── mode-rhtml.js
│ │ │ ├── mode-rst.js
│ │ │ ├── mode-ruby.js
│ │ │ ├── mode-rust.js
│ │ │ ├── mode-sass.js
│ │ │ ├── mode-scad.js
│ │ │ ├── mode-scala.js
│ │ │ ├── mode-scheme.js
│ │ │ ├── mode-scss.js
│ │ │ ├── mode-sh.js
│ │ │ ├── mode-sjs.js
│ │ │ ├── mode-slim.js
│ │ │ ├── mode-smarty.js
│ │ │ ├── mode-snippets.js
│ │ │ ├── mode-soy_template.js
│ │ │ ├── mode-space.js
│ │ │ ├── mode-sparql.js
│ │ │ ├── mode-sql.js
│ │ │ ├── mode-sqlserver.js
│ │ │ ├── mode-stylus.js
│ │ │ ├── mode-svg.js
│ │ │ ├── mode-swift.js
│ │ │ ├── mode-tcl.js
│ │ │ ├── mode-terraform.js
│ │ │ ├── mode-tex.js
│ │ │ ├── mode-text.js
│ │ │ ├── mode-textile.js
│ │ │ ├── mode-toml.js
│ │ │ ├── mode-tsx.js
│ │ │ ├── mode-turtle.js
│ │ │ ├── mode-twig.js
│ │ │ ├── mode-typescript.js
│ │ │ ├── mode-vala.js
│ │ │ ├── mode-vbscript.js
│ │ │ ├── mode-velocity.js
│ │ │ ├── mode-verilog.js
│ │ │ ├── mode-vhdl.js
│ │ │ ├── mode-visualforce.js
│ │ │ ├── mode-wollok.js
│ │ │ ├── mode-xml.js
│ │ │ ├── mode-xquery.js
│ │ │ ├── mode-yaml.js
│ │ │ ├── mode-zeek.js
│ │ │ ├── snippets/
│ │ │ │ ├── abap.js
│ │ │ │ ├── abc.js
│ │ │ │ ├── actionscript.js
│ │ │ │ ├── ada.js
│ │ │ │ ├── apache_conf.js
│ │ │ │ ├── apex.js
│ │ │ │ ├── applescript.js
│ │ │ │ ├── aql.js
│ │ │ │ ├── asciidoc.js
│ │ │ │ ├── asl.js
│ │ │ │ ├── assembly_x86.js
│ │ │ │ ├── autohotkey.js
│ │ │ │ ├── batchfile.js
│ │ │ │ ├── bro.js
│ │ │ │ ├── c9search.js
│ │ │ │ ├── c_cpp.js
│ │ │ │ ├── cirru.js
│ │ │ │ ├── clojure.js
│ │ │ │ ├── cobol.js
│ │ │ │ ├── coffee.js
│ │ │ │ ├── coldfusion.js
│ │ │ │ ├── crystal.js
│ │ │ │ ├── csharp.js
│ │ │ │ ├── csound_document.js
│ │ │ │ ├── csound_orchestra.js
│ │ │ │ ├── csound_score.js
│ │ │ │ ├── csp.js
│ │ │ │ ├── css.js
│ │ │ │ ├── curly.js
│ │ │ │ ├── d.js
│ │ │ │ ├── dart.js
│ │ │ │ ├── diff.js
│ │ │ │ ├── django.js
│ │ │ │ ├── dockerfile.js
│ │ │ │ ├── dot.js
│ │ │ │ ├── drools.js
│ │ │ │ ├── edifact.js
│ │ │ │ ├── eiffel.js
│ │ │ │ ├── ejs.js
│ │ │ │ ├── elixir.js
│ │ │ │ ├── elm.js
│ │ │ │ ├── erlang.js
│ │ │ │ ├── forth.js
│ │ │ │ ├── fortran.js
│ │ │ │ ├── fsharp.js
│ │ │ │ ├── fsl.js
│ │ │ │ ├── ftl.js
│ │ │ │ ├── gcode.js
│ │ │ │ ├── gherkin.js
│ │ │ │ ├── gitignore.js
│ │ │ │ ├── glsl.js
│ │ │ │ ├── gobstones.js
│ │ │ │ ├── golang.js
│ │ │ │ ├── graphqlschema.js
│ │ │ │ ├── groovy.js
│ │ │ │ ├── haml.js
│ │ │ │ ├── handlebars.js
│ │ │ │ ├── haskell.js
│ │ │ │ ├── haskell_cabal.js
│ │ │ │ ├── haxe.js
│ │ │ │ ├── hjson.js
│ │ │ │ ├── html.js
│ │ │ │ ├── html_elixir.js
│ │ │ │ ├── html_ruby.js
│ │ │ │ ├── ini.js
│ │ │ │ ├── io.js
│ │ │ │ ├── jack.js
│ │ │ │ ├── jade.js
│ │ │ │ ├── java.js
│ │ │ │ ├── javascript.js
│ │ │ │ ├── json.js
│ │ │ │ ├── jsoniq.js
│ │ │ │ ├── jsp.js
│ │ │ │ ├── jssm.js
│ │ │ │ ├── jsx.js
│ │ │ │ ├── julia.js
│ │ │ │ ├── kotlin.js
│ │ │ │ ├── latex.js
│ │ │ │ ├── less.js
│ │ │ │ ├── liquid.js
│ │ │ │ ├── lisp.js
│ │ │ │ ├── livescript.js
│ │ │ │ ├── logiql.js
│ │ │ │ ├── logtalk.js
│ │ │ │ ├── lsl.js
│ │ │ │ ├── lua.js
│ │ │ │ ├── luapage.js
│ │ │ │ ├── lucene.js
│ │ │ │ ├── makefile.js
│ │ │ │ ├── markdown.js
│ │ │ │ ├── mask.js
│ │ │ │ ├── matlab.js
│ │ │ │ ├── maze.js
│ │ │ │ ├── mel.js
│ │ │ │ ├── mixal.js
│ │ │ │ ├── mushcode.js
│ │ │ │ ├── mysql.js
│ │ │ │ ├── nginx.js
│ │ │ │ ├── nim.js
│ │ │ │ ├── nix.js
│ │ │ │ ├── nsis.js
│ │ │ │ ├── objectivec.js
│ │ │ │ ├── ocaml.js
│ │ │ │ ├── pascal.js
│ │ │ │ ├── perl.js
│ │ │ │ ├── perl6.js
│ │ │ │ ├── pgsql.js
│ │ │ │ ├── php.js
│ │ │ │ ├── php_laravel_blade.js
│ │ │ │ ├── pig.js
│ │ │ │ ├── plain_text.js
│ │ │ │ ├── powershell.js
│ │ │ │ ├── praat.js
│ │ │ │ ├── prolog.js
│ │ │ │ ├── properties.js
│ │ │ │ ├── protobuf.js
│ │ │ │ ├── puppet.js
│ │ │ │ ├── python.js
│ │ │ │ ├── r.js
│ │ │ │ ├── razor.js
│ │ │ │ ├── rdoc.js
│ │ │ │ ├── red.js
│ │ │ │ ├── redshift.js
│ │ │ │ ├── rhtml.js
│ │ │ │ ├── rst.js
│ │ │ │ ├── ruby.js
│ │ │ │ ├── rust.js
│ │ │ │ ├── sass.js
│ │ │ │ ├── scad.js
│ │ │ │ ├── scala.js
│ │ │ │ ├── scheme.js
│ │ │ │ ├── scss.js
│ │ │ │ ├── sh.js
│ │ │ │ ├── sjs.js
│ │ │ │ ├── slim.js
│ │ │ │ ├── smarty.js
│ │ │ │ ├── snippets.js
│ │ │ │ ├── soy_template.js
│ │ │ │ ├── space.js
│ │ │ │ ├── sparql.js
│ │ │ │ ├── sql.js
│ │ │ │ ├── sqlserver.js
│ │ │ │ ├── stylus.js
│ │ │ │ ├── svg.js
│ │ │ │ ├── swift.js
│ │ │ │ ├── tcl.js
│ │ │ │ ├── terraform.js
│ │ │ │ ├── tex.js
│ │ │ │ ├── text.js
│ │ │ │ ├── textile.js
│ │ │ │ ├── toml.js
│ │ │ │ ├── tsx.js
│ │ │ │ ├── turtle.js
│ │ │ │ ├── twig.js
│ │ │ │ ├── typescript.js
│ │ │ │ ├── vala.js
│ │ │ │ ├── vbscript.js
│ │ │ │ ├── velocity.js
│ │ │ │ ├── verilog.js
│ │ │ │ ├── vhdl.js
│ │ │ │ ├── visualforce.js
│ │ │ │ ├── wollok.js
│ │ │ │ ├── xml.js
│ │ │ │ ├── xquery.js
│ │ │ │ ├── yaml.js
│ │ │ │ └── zeek.js
│ │ │ ├── theme-ambiance.js
│ │ │ ├── theme-chaos.js
│ │ │ ├── theme-chrome.js
│ │ │ ├── theme-clouds.js
│ │ │ ├── theme-clouds_midnight.js
│ │ │ ├── theme-cobalt.js
│ │ │ ├── theme-crimson_editor.js
│ │ │ ├── theme-dawn.js
│ │ │ ├── theme-dracula.js
│ │ │ ├── theme-dreamweaver.js
│ │ │ ├── theme-eclipse.js
│ │ │ ├── theme-github.js
│ │ │ ├── theme-gob.js
│ │ │ ├── theme-gruvbox.js
│ │ │ ├── theme-idle_fingers.js
│ │ │ ├── theme-iplastic.js
│ │ │ ├── theme-katzenmilch.js
│ │ │ ├── theme-kr_theme.js
│ │ │ ├── theme-kuroir.js
│ │ │ ├── theme-merbivore.js
│ │ │ ├── theme-merbivore_soft.js
│ │ │ ├── theme-mono_industrial.js
│ │ │ ├── theme-monokai.js
│ │ │ ├── theme-pastel_on_dark.js
│ │ │ ├── theme-solarized_dark.js
│ │ │ ├── theme-solarized_light.js
│ │ │ ├── theme-sqlserver.js
│ │ │ ├── theme-terminal.js
│ │ │ ├── theme-textmate.js
│ │ │ ├── theme-tomorrow.js
│ │ │ ├── theme-tomorrow_night.js
│ │ │ ├── theme-tomorrow_night_blue.js
│ │ │ ├── theme-tomorrow_night_bright.js
│ │ │ ├── theme-tomorrow_night_eighties.js
│ │ │ ├── theme-twilight.js
│ │ │ ├── theme-vibrant_ink.js
│ │ │ ├── theme-xcode.js
│ │ │ ├── worker-coffee.js
│ │ │ ├── worker-css.js
│ │ │ ├── worker-html.js
│ │ │ ├── worker-javascript.js
│ │ │ ├── worker-json.js
│ │ │ ├── worker-lua.js
│ │ │ ├── worker-php.js
│ │ │ ├── worker-xml.js
│ │ │ └── worker-xquery.js
│ │ ├── api/
│ │ │ ├── api.js
│ │ │ ├── client_api_test.js
│ │ │ └── utility.js
│ │ ├── applet.js
│ │ ├── behavior.js
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-theme.css
│ │ │ │ └── bootstrap.css
│ │ │ └── js/
│ │ │ ├── bootstrap.js
│ │ │ └── npm.js
│ │ ├── bootstrap_material_design/
│ │ │ ├── bmd-bs-dark.css
│ │ │ ├── bmd-bs-light.css
│ │ │ └── bootstrap-material-design-4.1.1.js
│ │ ├── chart/
│ │ │ └── utils.js
│ │ ├── ckeditor/
│ │ │ ├── CHANGES.md
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── adapters/
│ │ │ │ └── jquery.js
│ │ │ ├── build-config.js
│ │ │ ├── ckeditor.js
│ │ │ ├── config.js
│ │ │ ├── contents.css
│ │ │ ├── lang/
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── bn.js
│ │ │ │ ├── bs.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── cy.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de-ch.js
│ │ │ │ ├── de.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en-au.js
│ │ │ │ ├── en-ca.js
│ │ │ │ ├── en-gb.js
│ │ │ │ ├── en.js
│ │ │ │ ├── eo.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fo.js
│ │ │ │ ├── fr-ca.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── gu.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── ka.js
│ │ │ │ ├── km.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── ku.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── mn.js
│ │ │ │ ├── ms.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── no.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-br.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── si.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sq.js
│ │ │ │ ├── sr-latn.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── tt.js
│ │ │ │ ├── ug.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-cn.js
│ │ │ │ └── zh.js
│ │ │ ├── plugins/
│ │ │ │ ├── a11yhelp/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── a11yhelp.js
│ │ │ │ │ └── lang/
│ │ │ │ │ ├── _translationstatus.txt
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── cy.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de-ch.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en-gb.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── eo.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fo.js
│ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── gu.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── ku.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mk.js
│ │ │ │ │ ├── mn.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── no.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── pt-br.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── si.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── tt.js
│ │ │ │ │ ├── ug.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ └── zh.js
│ │ │ │ ├── about/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── about.js
│ │ │ │ ├── clipboard/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── paste.js
│ │ │ │ ├── dialog/
│ │ │ │ │ └── dialogDefinition.js
│ │ │ │ ├── image/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── image.js
│ │ │ │ ├── link/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── anchor.js
│ │ │ │ │ └── link.js
│ │ │ │ ├── pastefromword/
│ │ │ │ │ └── filter/
│ │ │ │ │ └── default.js
│ │ │ │ ├── print/
│ │ │ │ │ ├── lang/
│ │ │ │ │ │ ├── af.js
│ │ │ │ │ │ ├── ar.js
│ │ │ │ │ │ ├── bg.js
│ │ │ │ │ │ ├── bn.js
│ │ │ │ │ │ ├── bs.js
│ │ │ │ │ │ ├── ca.js
│ │ │ │ │ │ ├── cs.js
│ │ │ │ │ │ ├── cy.js
│ │ │ │ │ │ ├── da.js
│ │ │ │ │ │ ├── de-ch.js
│ │ │ │ │ │ ├── de.js
│ │ │ │ │ │ ├── el.js
│ │ │ │ │ │ ├── en-au.js
│ │ │ │ │ │ ├── en-ca.js
│ │ │ │ │ │ ├── en-gb.js
│ │ │ │ │ │ ├── en.js
│ │ │ │ │ │ ├── eo.js
│ │ │ │ │ │ ├── es.js
│ │ │ │ │ │ ├── et.js
│ │ │ │ │ │ ├── eu.js
│ │ │ │ │ │ ├── fa.js
│ │ │ │ │ │ ├── fi.js
│ │ │ │ │ │ ├── fo.js
│ │ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ │ ├── fr.js
│ │ │ │ │ │ ├── gl.js
│ │ │ │ │ │ ├── gu.js
│ │ │ │ │ │ ├── he.js
│ │ │ │ │ │ ├── hi.js
│ │ │ │ │ │ ├── hr.js
│ │ │ │ │ │ ├── hu.js
│ │ │ │ │ │ ├── id.js
│ │ │ │ │ │ ├── is.js
│ │ │ │ │ │ ├── it.js
│ │ │ │ │ │ ├── ja.js
│ │ │ │ │ │ ├── ka.js
│ │ │ │ │ │ ├── km.js
│ │ │ │ │ │ ├── ko.js
│ │ │ │ │ │ ├── ku.js
│ │ │ │ │ │ ├── lt.js
│ │ │ │ │ │ ├── lv.js
│ │ │ │ │ │ ├── mk.js
│ │ │ │ │ │ ├── mn.js
│ │ │ │ │ │ ├── ms.js
│ │ │ │ │ │ ├── nb.js
│ │ │ │ │ │ ├── nl.js
│ │ │ │ │ │ ├── no.js
│ │ │ │ │ │ ├── oc.js
│ │ │ │ │ │ ├── pl.js
│ │ │ │ │ │ ├── pt-br.js
│ │ │ │ │ │ ├── pt.js
│ │ │ │ │ │ ├── ro.js
│ │ │ │ │ │ ├── ru.js
│ │ │ │ │ │ ├── si.js
│ │ │ │ │ │ ├── sk.js
│ │ │ │ │ │ ├── sl.js
│ │ │ │ │ │ ├── sq.js
│ │ │ │ │ │ ├── sr-latn.js
│ │ │ │ │ │ ├── sr.js
│ │ │ │ │ │ ├── sv.js
│ │ │ │ │ │ ├── th.js
│ │ │ │ │ │ ├── tr.js
│ │ │ │ │ │ ├── tt.js
│ │ │ │ │ │ ├── ug.js
│ │ │ │ │ │ ├── uk.js
│ │ │ │ │ │ ├── vi.js
│ │ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ │ └── zh.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── scayt/
│ │ │ │ │ ├── CHANGELOG.md
│ │ │ │ │ ├── LICENSE.md
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── options.js
│ │ │ │ │ └── toolbar.css
│ │ │ │ ├── specialchar/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ ├── lang/
│ │ │ │ │ │ ├── _translationstatus.txt
│ │ │ │ │ │ ├── af.js
│ │ │ │ │ │ ├── ar.js
│ │ │ │ │ │ ├── bg.js
│ │ │ │ │ │ ├── ca.js
│ │ │ │ │ │ ├── cs.js
│ │ │ │ │ │ ├── cy.js
│ │ │ │ │ │ ├── da.js
│ │ │ │ │ │ ├── de-ch.js
│ │ │ │ │ │ ├── de.js
│ │ │ │ │ │ ├── el.js
│ │ │ │ │ │ ├── en-gb.js
│ │ │ │ │ │ ├── en.js
│ │ │ │ │ │ ├── eo.js
│ │ │ │ │ │ ├── es.js
│ │ │ │ │ │ ├── et.js
│ │ │ │ │ │ ├── eu.js
│ │ │ │ │ │ ├── fa.js
│ │ │ │ │ │ ├── fi.js
│ │ │ │ │ │ ├── fr-ca.js
│ │ │ │ │ │ ├── fr.js
│ │ │ │ │ │ ├── gl.js
│ │ │ │ │ │ ├── he.js
│ │ │ │ │ │ ├── hr.js
│ │ │ │ │ │ ├── hu.js
│ │ │ │ │ │ ├── id.js
│ │ │ │ │ │ ├── it.js
│ │ │ │ │ │ ├── ja.js
│ │ │ │ │ │ ├── km.js
│ │ │ │ │ │ ├── ko.js
│ │ │ │ │ │ ├── ku.js
│ │ │ │ │ │ ├── lt.js
│ │ │ │ │ │ ├── lv.js
│ │ │ │ │ │ ├── nb.js
│ │ │ │ │ │ ├── nl.js
│ │ │ │ │ │ ├── no.js
│ │ │ │ │ │ ├── pl.js
│ │ │ │ │ │ ├── pt-br.js
│ │ │ │ │ │ ├── pt.js
│ │ │ │ │ │ ├── ru.js
│ │ │ │ │ │ ├── si.js
│ │ │ │ │ │ ├── sk.js
│ │ │ │ │ │ ├── sl.js
│ │ │ │ │ │ ├── sq.js
│ │ │ │ │ │ ├── sv.js
│ │ │ │ │ │ ├── th.js
│ │ │ │ │ │ ├── tr.js
│ │ │ │ │ │ ├── tt.js
│ │ │ │ │ │ ├── ug.js
│ │ │ │ │ │ ├── uk.js
│ │ │ │ │ │ ├── vi.js
│ │ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ │ └── zh.js
│ │ │ │ │ └── specialchar.js
│ │ │ │ ├── table/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── table.js
│ │ │ │ ├── tabletools/
│ │ │ │ │ └── dialogs/
│ │ │ │ │ └── tableCell.js
│ │ │ │ └── wsc/
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ └── dialogs/
│ │ │ │ ├── ciframe.html
│ │ │ │ ├── tmpFrameset.html
│ │ │ │ ├── wsc.css
│ │ │ │ ├── wsc.js
│ │ │ │ └── wsc_ie.js
│ │ │ ├── samples/
│ │ │ │ ├── css/
│ │ │ │ │ └── samples.css
│ │ │ │ ├── index.html
│ │ │ │ ├── js/
│ │ │ │ │ ├── sample.js
│ │ │ │ │ └── sf.js
│ │ │ │ ├── old/
│ │ │ │ │ ├── ajax.html
│ │ │ │ │ ├── api.html
│ │ │ │ │ ├── appendto.html
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ ├── outputxhtml/
│ │ │ │ │ │ │ └── outputxhtml.css
│ │ │ │ │ │ ├── posteddata.php
│ │ │ │ │ │ └── uilanguages/
│ │ │ │ │ │ └── languages.js
│ │ │ │ │ ├── datafiltering.html
│ │ │ │ │ ├── dialog/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── my_dialog.js
│ │ │ │ │ │ └── dialog.html
│ │ │ │ │ ├── divreplace.html
│ │ │ │ │ ├── enterkey/
│ │ │ │ │ │ └── enterkey.html
│ │ │ │ │ ├── htmlwriter/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── outputforflash/
│ │ │ │ │ │ │ ├── outputforflash.fla
│ │ │ │ │ │ │ ├── outputforflash.swf
│ │ │ │ │ │ │ └── swfobject.js
│ │ │ │ │ │ ├── outputforflash.html
│ │ │ │ │ │ └── outputhtml.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── inlineall.html
│ │ │ │ │ ├── inlinebycode.html
│ │ │ │ │ ├── inlinetextarea.html
│ │ │ │ │ ├── jquery.html
│ │ │ │ │ ├── magicline/
│ │ │ │ │ │ └── magicline.html
│ │ │ │ │ ├── readonly.html
│ │ │ │ │ ├── replacebyclass.html
│ │ │ │ │ ├── replacebycode.html
│ │ │ │ │ ├── sample.css
│ │ │ │ │ ├── sample.js
│ │ │ │ │ ├── sample_posteddata.php
│ │ │ │ │ ├── tabindex.html
│ │ │ │ │ ├── toolbar/
│ │ │ │ │ │ └── toolbar.html
│ │ │ │ │ ├── uicolor.html
│ │ │ │ │ ├── uilanguages.html
│ │ │ │ │ ├── wysiwygarea/
│ │ │ │ │ │ └── fullpage.html
│ │ │ │ │ └── xhtmlstyle.html
│ │ │ │ └── toolbarconfigurator/
│ │ │ │ ├── css/
│ │ │ │ │ └── fontello.css
│ │ │ │ ├── font/
│ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ └── config.json
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ ├── abstracttoolbarmodifier.js
│ │ │ │ ├── fulltoolbareditor.js
│ │ │ │ ├── toolbarmodifier.js
│ │ │ │ └── toolbartextmodifier.js
│ │ │ ├── skins/
│ │ │ │ └── moono/
│ │ │ │ ├── dialog.css
│ │ │ │ ├── dialog_ie.css
│ │ │ │ ├── dialog_ie7.css
│ │ │ │ ├── dialog_ie8.css
│ │ │ │ ├── dialog_iequirks.css
│ │ │ │ ├── editor.css
│ │ │ │ ├── editor_gecko.css
│ │ │ │ ├── editor_ie.css
│ │ │ │ ├── editor_ie7.css
│ │ │ │ ├── editor_ie8.css
│ │ │ │ ├── editor_iequirks.css
│ │ │ │ └── readme.md
│ │ │ └── styles.js
│ │ ├── client_api.js
│ │ ├── compat.js
│ │ ├── ctx_menu.js
│ │ ├── custom_project.js
│ │ ├── date_util.js
│ │ ├── dg_table.js
│ │ ├── dg_table_action.js
│ │ ├── dg_table_editors.js
│ │ ├── dynamic_css.js
│ │ ├── effects.js
│ │ ├── environment.js
│ │ ├── events.js
│ │ ├── font-awesome-5.12.0/
│ │ │ ├── LICENSE.txt
│ │ │ ├── css/
│ │ │ │ ├── all.css
│ │ │ │ ├── brands.css
│ │ │ │ ├── fontawesome.css
│ │ │ │ ├── regular.css
│ │ │ │ ├── solid.css
│ │ │ │ ├── svg-with-js.css
│ │ │ │ └── v4-shims.css
│ │ │ ├── js/
│ │ │ │ ├── all.js
│ │ │ │ ├── brands.js
│ │ │ │ ├── conflict-detection.js
│ │ │ │ ├── fontawesome.js
│ │ │ │ ├── regular.js
│ │ │ │ ├── solid.js
│ │ │ │ └── v4-shims.js
│ │ │ ├── less/
│ │ │ │ ├── _animated.less
│ │ │ │ ├── _bordered-pulled.less
│ │ │ │ ├── _core.less
│ │ │ │ ├── _fixed-width.less
│ │ │ │ ├── _icons.less
│ │ │ │ ├── _larger.less
│ │ │ │ ├── _list.less
│ │ │ │ ├── _mixins.less
│ │ │ │ ├── _rotated-flipped.less
│ │ │ │ ├── _screen-reader.less
│ │ │ │ ├── _shims.less
│ │ │ │ ├── _stacked.less
│ │ │ │ ├── _variables.less
│ │ │ │ ├── brands.less
│ │ │ │ ├── fontawesome.less
│ │ │ │ ├── regular.less
│ │ │ │ ├── solid.less
│ │ │ │ └── v4-shims.less
│ │ │ ├── metadata/
│ │ │ │ ├── categories.yml
│ │ │ │ ├── icons.json
│ │ │ │ ├── icons.yml
│ │ │ │ ├── shims.json
│ │ │ │ ├── shims.yml
│ │ │ │ └── sponsors.yml
│ │ │ └── scss/
│ │ │ ├── _animated.scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _screen-reader.scss
│ │ │ ├── _shims.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ ├── brands.scss
│ │ │ ├── fontawesome.scss
│ │ │ ├── regular.scss
│ │ │ ├── solid.scss
│ │ │ └── v4-shims.scss
│ │ ├── fx_anim.js
│ │ ├── gantt.js
│ │ ├── html2canvas.js
│ │ ├── jquery.js
│ │ ├── js_logger.js
│ │ ├── json2.js
│ │ ├── keyboard.js
│ │ ├── mooDialog/
│ │ │ ├── MooDialog.Extra.js
│ │ │ ├── MooDialog.js
│ │ │ ├── Overlay.js
│ │ │ └── css/
│ │ │ └── MooDialog.css
│ │ ├── mooRainbow/
│ │ │ ├── Assets/
│ │ │ │ └── mooRainbow.css
│ │ │ └── Source/
│ │ │ └── mooRainbow.js
│ │ ├── mooScrollable/
│ │ │ ├── Scrollable.css
│ │ │ └── Scrollable.js
│ │ ├── mootools/
│ │ │ ├── MooTools-Core-1.6.0.js
│ │ │ ├── MooTools-More-1.6.0.js
│ │ │ ├── MooTools-Readme-1.6.0.txt
│ │ │ ├── mootools-1.2.5-core-nc.js
│ │ │ ├── mootools-1.2.5.1-more.js
│ │ │ ├── mootools-core-1.4.1-full-nocompat-yc.js
│ │ │ ├── mootools-core-1.4.1-full-nocompat.js
│ │ │ ├── mootools-more-1.4.0.1-yc.js
│ │ │ └── mootools-more-1.4.0.1.js
│ │ ├── mouse.js
│ │ ├── page_utility_widgets.js
│ │ ├── panel.js
│ │ ├── require.js
│ │ ├── rrule/
│ │ │ ├── nlp.js
│ │ │ └── rrule.js
│ │ ├── smart_menu.js
│ │ ├── spt_init.js
│ │ ├── spt_onload_startup.js
│ │ ├── tactic.js
│ │ ├── ui_playground.js
│ │ ├── upload.js
│ │ ├── utility.js
│ │ ├── validation.js
│ │ ├── video/
│ │ │ ├── video-js.css
│ │ │ ├── video.dev.js
│ │ │ └── video.js
│ │ └── xmlrpc.js
│ ├── style/
│ │ └── layout.css
│ ├── test/
│ │ └── index.html
│ └── utility/
│ ├── print_custom_page.html
│ ├── print_table_items.html
│ └── templates/
│ └── print_custom_page_TEMPLATE_body_contents.html
├── contrib/
│ ├── README.txt
│ ├── script/
│ │ ├── quicktime_sequence_script/
│ │ │ └── quicktime_sequence_script.txt
│ │ └── web_snapshot_download_script/
│ │ └── web_snapshot_download_script.txt
│ └── widget/
│ ├── add_snapshot_to_bin_wdg/
│ │ ├── add_snapshot_to_bin_btn.txt
│ │ └── add_snapshot_to_bin_wdg.txt
│ ├── adobe_photoshop_popup_wdg/
│ │ ├── adobe_photoshop_button.txt
│ │ └── adobe_photoshop_wdg.txt
│ ├── completion_expression_wdg/
│ │ ├── README.txt
│ │ ├── completion_expression_wdg.txt
│ │ └── example_element_definition.txt
│ ├── nuke_popup_wdg/
│ │ ├── README.txt
│ │ ├── init.py
│ │ ├── nuke_wdg_button.txt
│ │ ├── nuke_wdg_panel.txt
│ │ └── tactic_nuke_server.py
│ └── work_hours_insert_wdg/
│ ├── README.txt
│ ├── work_hours_insert_button.txt
│ └── work_hours_insert_wdg.txt
├── install/
│ ├── apache/
│ │ ├── load_balance.py
│ │ ├── tactic.conf
│ │ └── tactic_win32.conf
│ ├── backup/
│ │ ├── database_backup.py
│ │ └── tactic_backup.py
│ ├── config/
│ │ ├── standalone_linux-conf.xml
│ │ └── standalone_win32-conf.xml
│ ├── data/
│ │ ├── __init__.py
│ │ └── tactic_paths.py
│ ├── install.py
│ ├── postgresql/
│ │ └── pg_hba.conf
│ ├── rpm/
│ │ ├── prepare.py
│ │ ├── tactic-4.7.spec
│ │ └── tactic-4.9.spec
│ ├── service/
│ │ ├── tactic
│ │ ├── tactic.service
│ │ ├── tactic_python2
│ │ └── win32_service.py
│ ├── start/
│ │ └── config/
│ │ └── tactic-license.xml
│ └── template/
│ ├── config/
│ │ ├── load_balance.txt
│ │ ├── tactic-license.xml
│ │ ├── tactic_linux-conf.xml
│ │ ├── tactic_linux-conf_python3.xml
│ │ └── tactic_win32-conf.xml
│ └── sites/
│ ├── __init__.py
│ └── example/
│ ├── __init__.py
│ ├── context/
│ │ ├── Index.py
│ │ ├── Sthpw.py
│ │ └── __init__.py
│ └── modules/
│ ├── __init__.py
│ ├── base_index_wdg.py
│ ├── header_wdg.py
│ ├── main_tab_wdg.py
│ └── site_page.py
├── plugins/
│ ├── TACTIC/
│ │ ├── default_theme/
│ │ │ ├── config/
│ │ │ │ ├── config_url.spt
│ │ │ │ └── config_widget_config.spt
│ │ │ └── manifest.xml
│ │ ├── empty_theme/
│ │ │ ├── config/
│ │ │ │ ├── config_url.spt
│ │ │ │ └── config_widget_config.spt
│ │ │ └── manifest.xml
│ │ ├── internal/
│ │ │ ├── sample3d/
│ │ │ │ ├── manifest.xml
│ │ │ │ ├── prod_asset.spt
│ │ │ │ ├── prod_sequence.spt
│ │ │ │ ├── prod_shot.spt
│ │ │ │ └── sthpw_schema.spt
│ │ │ └── unittest/
│ │ │ ├── config_custom_script.spt
│ │ │ ├── manifest.xml
│ │ │ ├── unittest_car.spt
│ │ │ ├── unittest_city.spt
│ │ │ ├── unittest_country.spt
│ │ │ ├── unittest_no_id.spt
│ │ │ ├── unittest_person.spt
│ │ │ └── unittest_person_in_car.spt
│ │ ├── scrum/
│ │ │ ├── config/
│ │ │ │ ├── config_custom_script.spt
│ │ │ │ ├── config_trigger.spt
│ │ │ │ ├── config_url.spt
│ │ │ │ ├── config_widget_config.spt
│ │ │ │ ├── manifest.xml
│ │ │ │ ├── sthpw_pipeline.spt
│ │ │ │ ├── sthpw_project_type.spt
│ │ │ │ └── sthpw_schema.spt
│ │ │ ├── manifest.xml
│ │ │ └── stypes/
│ │ │ ├── manifest.xml
│ │ │ ├── scrum_feature.spt
│ │ │ ├── scrum_plan.spt
│ │ │ ├── scrum_plan_item.spt
│ │ │ ├── scrum_product.spt
│ │ │ ├── scrum_product_version.spt
│ │ │ ├── scrum_release_note.spt
│ │ │ ├── scrum_sprint.spt
│ │ │ ├── scrum_ticket.spt
│ │ │ ├── scrum_ticket_log.spt
│ │ │ └── scrum_ticket_status.spt
│ │ ├── themes/
│ │ │ ├── sample01_theme/
│ │ │ │ ├── config/
│ │ │ │ │ ├── config_url.spt
│ │ │ │ │ └── widget_config.spt
│ │ │ │ └── manifest.xml
│ │ │ └── sample02_theme/
│ │ │ ├── config/
│ │ │ │ ├── config_url.spt
│ │ │ │ └── widget_config.spt
│ │ │ └── manifest.xml
│ │ └── vfx/
│ │ ├── __init__.py
│ │ ├── config/
│ │ │ ├── config_custom_script.spt
│ │ │ ├── config_naming.spt
│ │ │ ├── config_process.spt
│ │ │ ├── config_prod_setting.spt
│ │ │ ├── config_sidebar.spt
│ │ │ ├── config_trigger.spt
│ │ │ ├── config_url.spt
│ │ │ ├── config_view/
│ │ │ │ ├── add_snapshot_to_review_wdg.spt
│ │ │ │ ├── sequence_planner_wdg.spt
│ │ │ │ ├── shot_planner_wdg.spt
│ │ │ │ ├── shot_sheet_wdg.spt
│ │ │ │ ├── single_shot_planner_wdg.spt
│ │ │ │ └── vfx/
│ │ │ │ ├── art_reference/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── asset/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── dashboard/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── episode/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── leica/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── script/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── sequence/
│ │ │ │ │ └── main.spt
│ │ │ │ ├── shot/
│ │ │ │ │ └── main.spt
│ │ │ │ └── storyboard/
│ │ │ │ └── main.spt
│ │ │ ├── config_widget.spt
│ │ │ ├── manifest.xml
│ │ │ ├── sthpw_pipeline.spt
│ │ │ └── sthpw_schema.spt
│ │ ├── lib/
│ │ │ ├── __init__.py
│ │ │ └── index_wdg.py
│ │ ├── manifest.xml
│ │ └── stypes/
│ │ ├── manifest.xml
│ │ ├── prod_session_contents.spt
│ │ ├── vfx_art_reference.spt
│ │ ├── vfx_asset.spt
│ │ ├── vfx_asset_category.spt
│ │ ├── vfx_asset_in_episode.spt
│ │ ├── vfx_asset_in_sequence.spt
│ │ ├── vfx_asset_in_shot.spt
│ │ ├── vfx_asset_type.spt
│ │ ├── vfx_camera.spt
│ │ ├── vfx_episode.spt
│ │ ├── vfx_layer.spt
│ │ ├── vfx_leica.spt
│ │ ├── vfx_naming.spt
│ │ ├── vfx_node_data.spt
│ │ ├── vfx_plate.spt
│ │ ├── vfx_render.spt
│ │ ├── vfx_review.spt
│ │ ├── vfx_schedule.spt
│ │ ├── vfx_script.spt
│ │ ├── vfx_sequence.spt
│ │ ├── vfx_shot.spt
│ │ ├── vfx_shot_texture.spt
│ │ ├── vfx_storyboard.spt
│ │ ├── vfx_submission.spt
│ │ └── vfx_texture.spt
│ └── __init__.py
├── pyasm/
│ ├── __init__.py
│ ├── application/
│ │ ├── __init__.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── app_environment.py
│ │ │ ├── application.py
│ │ │ ├── base_app_info.py
│ │ │ ├── client_trigger.py
│ │ │ ├── dependency.py
│ │ │ ├── interpreter/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── callback.py
│ │ │ │ ├── examples.py
│ │ │ │ ├── handler.py
│ │ │ │ ├── interpreter.py
│ │ │ │ └── tactic_client_lib/
│ │ │ │ ├── VERSION
│ │ │ │ ├── VERSION_API
│ │ │ │ ├── __init__.py
│ │ │ │ └── tactic_server_stub.py
│ │ │ ├── node_data.py
│ │ │ ├── session_builder.py
│ │ │ └── upload_multipart.py
│ │ ├── flash/
│ │ │ ├── __init__.py
│ │ │ ├── flash.py
│ │ │ ├── flash_builder.py
│ │ │ ├── flash_environment.py
│ │ │ ├── flash_info.py
│ │ │ └── flash_test.py
│ │ ├── houdini/
│ │ │ ├── __init__.py
│ │ │ ├── houdini.py
│ │ │ ├── houdini9.py
│ │ │ ├── houdini_builder.py
│ │ │ ├── houdini_environment.py
│ │ │ ├── houdini_impl.py
│ │ │ ├── houdini_socket.py
│ │ │ └── houdini_test.py
│ │ ├── maya/
│ │ │ ├── __init__.py
│ │ │ ├── maya_anim_file.py
│ │ │ ├── maya_app.py
│ │ │ ├── maya_builder.py
│ │ │ ├── maya_builder_exec.py
│ │ │ ├── maya_environment.py
│ │ │ ├── maya_impl.py
│ │ │ ├── maya_introspect.py
│ │ │ ├── maya_parser.py
│ │ │ ├── maya_parser_test.py
│ │ │ └── maya_test.py
│ │ ├── perforce/
│ │ │ ├── __init__.py
│ │ │ └── perforce.py
│ │ └── xsi/
│ │ ├── __init__.py
│ │ ├── xsi.py
│ │ ├── xsi_builder.py
│ │ ├── xsi_environment.py
│ │ ├── xsi_impl.py
│ │ └── xsi_parser.py
│ ├── biz/
│ │ ├── __init__.py
│ │ ├── biz_test.py
│ │ ├── cache.py
│ │ ├── clipboard.py
│ │ ├── code_naming.py
│ │ ├── command_trigger.py
│ │ ├── csv_import.py
│ │ ├── custom_property.py
│ │ ├── custom_script.py
│ │ ├── debug_log.py
│ │ ├── dir_naming.py
│ │ ├── expression.py
│ │ ├── expression_test.py
│ │ ├── file.py
│ │ ├── file_naming.py
│ │ ├── file_test.py
│ │ ├── folder.py
│ │ ├── hierarchical_status_attr.py
│ │ ├── naming.py
│ │ ├── naming_test.py
│ │ ├── note.py
│ │ ├── notification.py
│ │ ├── notification_test.py
│ │ ├── pipeline.py
│ │ ├── pipeline_test.py
│ │ ├── plugin_util.py
│ │ ├── preference.py
│ │ ├── prod_setting.py
│ │ ├── project.py
│ │ ├── repo_handler.py
│ │ ├── schema.py
│ │ ├── schema_test.py
│ │ ├── simple_status_attr.py
│ │ ├── snapshot.py
│ │ ├── snapshot_test.py
│ │ ├── sobject_connection.py
│ │ ├── sobject_instance.py
│ │ ├── status.py
│ │ ├── status_attr.py
│ │ ├── subscription.py
│ │ ├── task.py
│ │ ├── template.py
│ │ ├── timezone_test.py
│ │ ├── translation.py
│ │ └── work_hour.py
│ ├── checkin/
│ │ ├── __init__.py
│ │ ├── checkin.py
│ │ ├── checkin_test.py
│ │ ├── exifread/
│ │ │ ├── __init__.py
│ │ │ ├── classes.py
│ │ │ ├── tags/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── exif.py
│ │ │ │ └── makernote.py
│ │ │ └── utils.py
│ │ ├── file_checkin.py
│ │ ├── iptcinfo.py
│ │ ├── metadata.py
│ │ ├── repo.py
│ │ ├── snapshot_builder.py
│ │ ├── snapshot_builder_test.py
│ │ ├── snapshot_checkin.py
│ │ └── sync_snapshots.py
│ ├── command/
│ │ ├── __init__.py
│ │ ├── add_user_to_group_cmd.py
│ │ ├── command.py
│ │ ├── command_test.py
│ │ ├── csv_export_cmd.py
│ │ ├── csv_import_cmd.py
│ │ ├── database_cmd.py
│ │ ├── dataflow_test.py
│ │ ├── delete_cmd.py
│ │ ├── edit_cmd.py
│ │ ├── edit_wdg_action.py
│ │ ├── email_handler.py
│ │ ├── email_trigger.py
│ │ ├── file_upload.py
│ │ ├── kronos.py
│ │ ├── pickup_trigger.py
│ │ ├── remote_command.py
│ │ ├── scheduler.py
│ │ ├── sign_out_cmd.py
│ │ ├── site_upgrade.py
│ │ ├── status_trigger.py
│ │ ├── subprocess_trigger.py
│ │ ├── trigger.py
│ │ ├── undo_cmd.py
│ │ ├── widget_settings_cmd.py
│ │ ├── workflow.py
│ │ └── workflow_test.py
│ ├── common/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── common.py
│ │ ├── common_exception.py
│ │ ├── common_test.py
│ │ ├── config.py
│ │ ├── config_test.py
│ │ ├── container.py
│ │ ├── date.py
│ │ ├── directory.py
│ │ ├── encrypt_util.py
│ │ ├── environment.py
│ │ ├── format_value.py
│ │ ├── js_wrapper.py
│ │ ├── lxml_wrapper.py
│ │ ├── spt_date.py
│ │ ├── spt_date_test.py
│ │ ├── system.py
│ │ ├── system_test.py
│ │ ├── test.xml
│ │ ├── timecode.py
│ │ ├── watch_folder.py
│ │ ├── xml_test.py
│ │ ├── xml_wrapper.py
│ │ └── zip_util.py
│ ├── config/
│ │ ├── standalone_linux-conf.xml
│ │ └── standalone_win32-conf.xml
│ ├── prod/
│ │ ├── __init__.py
│ │ ├── biz/
│ │ │ ├── __init__.py
│ │ │ ├── asset.py
│ │ │ ├── biz_test.py
│ │ │ ├── episode.py
│ │ │ ├── naming.py
│ │ │ ├── prod_app_naming.py
│ │ │ ├── prod_dir_naming.py
│ │ │ ├── prod_file_naming.py
│ │ │ ├── prod_setting.py
│ │ │ ├── prod_task_filter.py
│ │ │ ├── render.py
│ │ │ ├── sequence.py
│ │ │ ├── session.py
│ │ │ ├── shot.py
│ │ │ ├── shot_test.py
│ │ │ ├── submission.py
│ │ │ └── texture.py
│ │ ├── checkin/
│ │ │ ├── __init__.py
│ │ │ ├── comp_checkin.py
│ │ │ ├── comp_test.py
│ │ │ ├── maya_checkin.py
│ │ │ ├── maya_checkin_test.py
│ │ │ ├── publisher.py
│ │ │ ├── submission_checkin.py
│ │ │ └── test/
│ │ │ ├── fusion_sample.comp
│ │ │ └── shake_sample.shk
│ │ ├── command/
│ │ │ ├── __init__.py
│ │ │ ├── code_update.py
│ │ │ ├── snapshot_action.py
│ │ │ └── task_create_action.py
│ │ ├── load/
│ │ │ ├── __init__.py
│ │ │ ├── loader.py
│ │ │ ├── loader_context.py
│ │ │ └── loader_test.py
│ │ ├── prod_test.py
│ │ ├── queue/
│ │ │ ├── __init__.py
│ │ │ ├── linux_service
│ │ │ ├── queue.py
│ │ │ ├── queue_index.py
│ │ │ ├── queue_wdg.py
│ │ │ ├── slave_startup.py
│ │ │ └── win32_service.py
│ │ ├── render/
│ │ │ ├── __init__.py
│ │ │ ├── qube_render_submit.py
│ │ │ ├── render_cmd.py
│ │ │ ├── render_cmd_builder.py
│ │ │ ├── render_context.py
│ │ │ └── render_package.py
│ │ ├── service/
│ │ │ ├── __init__.py
│ │ │ ├── api_xmlrpc.py
│ │ │ ├── api_xmlrpc_test.py
│ │ │ ├── base_sthpw_wdg.py
│ │ │ ├── base_xmlrpc.py
│ │ │ ├── tactic_remote.py
│ │ │ └── tactic_slave.py
│ │ ├── site/
│ │ │ ├── __init__.py
│ │ │ ├── admin_tab_wdg.py
│ │ │ ├── asset_tab_wdg.py
│ │ │ ├── client_tab_wdg.py
│ │ │ ├── concept_tab_wdg.py
│ │ │ ├── custom_project_tab_wdg.py
│ │ │ ├── editorial_tab_wdg.py
│ │ │ ├── main_tab_wdg.py
│ │ │ ├── maya_tab_wdg.py
│ │ │ ├── my_tactic_tab_wdg.py
│ │ │ ├── overview_tab_wdg.py
│ │ │ ├── preprod_tab_wdg.py
│ │ │ ├── setup_tab_wdg.py
│ │ │ ├── shot_tab_wdg.py
│ │ │ └── texture_tab_wdg.py
│ │ └── web/
│ │ ├── __init__.py
│ │ ├── app_load_wdg.py
│ │ ├── approval_manager_wdg.py
│ │ ├── artist_view_wdg.py
│ │ ├── asset_data_wdg.py
│ │ ├── asset_detail_wdg.py
│ │ ├── asset_filter_wdg.py
│ │ ├── asset_history_wdg.py
│ │ ├── asset_info_wdg.py
│ │ ├── asset_library_wdg.py
│ │ ├── asset_loader_wdg.py
│ │ ├── asset_task_creator_wdg.py
│ │ ├── camera_info_wdg.py
│ │ ├── composite_wdg.py
│ │ ├── csv_import_wdg.py
│ │ ├── frame_info_wdg.py
│ │ ├── layout_summary_wdg.py
│ │ ├── maya_set_wdg.py
│ │ ├── prod_checkin_cbk.py
│ │ ├── prod_checkin_wdg.py
│ │ ├── prod_context.py
│ │ ├── prod_input_wdg.py
│ │ ├── prod_setup_wdg.py
│ │ ├── prod_table_element_wdg.py
│ │ ├── prod_wdg.py
│ │ ├── publish_log_wdg.py
│ │ ├── render_wdg.py
│ │ ├── shot_instance_adder_wdg.py
│ │ ├── shot_navigator_wdg.py
│ │ ├── sobject_checkin_wdg.py
│ │ ├── sobject_planner_wdg.py
│ │ ├── sobject_task_wdg.py
│ │ ├── sobject_upload_wdg.py
│ │ ├── statistics_wdg.py
│ │ ├── submission_wdg.py
│ │ ├── task_manager_wdg.py
│ │ ├── texture_wdg.py
│ │ └── version_wdg.py
│ ├── requirements.txt
│ ├── search/
│ │ ├── __init__.py
│ │ ├── cache.py
│ │ ├── database_impl.py
│ │ ├── database_test.py
│ │ ├── db_introspect.py
│ │ ├── exception_log.py
│ │ ├── mongodb.py
│ │ ├── mongodb_test.py
│ │ ├── relationship_test.py
│ │ ├── search.py
│ │ ├── search_template_test.py
│ │ ├── search_test.py
│ │ ├── sobject_config.py
│ │ ├── sobject_default_config.py
│ │ ├── sobject_log.py
│ │ ├── sobject_mapping.py
│ │ ├── sql.py
│ │ ├── sql_dumper.py
│ │ ├── sql_test.py
│ │ ├── transaction.py
│ │ ├── transaction_log.py
│ │ ├── transaction_state.py
│ │ ├── transaction_test.py
│ │ ├── upgrade/
│ │ │ ├── __init__.py
│ │ │ ├── data/
│ │ │ │ ├── sthpw_access_rule.sql
│ │ │ │ ├── sthpw_notification.sql
│ │ │ │ ├── sthpw_pref_list.sql
│ │ │ │ ├── sthpw_project_type.sql
│ │ │ │ ├── sthpw_search_object.sql
│ │ │ │ └── sthpw_translation.sql
│ │ │ ├── data_dumper.py
│ │ │ ├── data_summary.py
│ │ │ ├── mysql/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ └── unittest_schema.sql
│ │ │ ├── oracle/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ └── unittest_schema.sql
│ │ │ ├── postgresql/
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ └── unittest_schema.sql
│ │ │ ├── project/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base_upgrade.py
│ │ │ │ ├── config_upgrade.py
│ │ │ │ ├── default_upgrade.py
│ │ │ │ ├── design_upgrade.py
│ │ │ │ ├── effects_upgrade.py
│ │ │ │ ├── game_upgrade.py
│ │ │ │ ├── prod_upgrade.py
│ │ │ │ ├── simple_upgrade.py
│ │ │ │ ├── sthpw_upgrade.py
│ │ │ │ └── unittest_upgrade.py
│ │ │ ├── schema/
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── config_schema_SQLServer.sql
│ │ │ │ ├── design_schema.sql
│ │ │ │ ├── effects_schema.sql
│ │ │ │ ├── game_schema.sql
│ │ │ │ ├── initial_sthpw_creation_SQLServer.sql
│ │ │ │ ├── prod_data.sql
│ │ │ │ ├── prod_schema.sql
│ │ │ │ ├── simple_schema.sql
│ │ │ │ ├── sthpw_data.sql
│ │ │ │ ├── sthpw_data_SQLServer.sql
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ ├── sthpw_schema_SQLServer.sql
│ │ │ │ ├── unittest_schema.sql
│ │ │ │ └── unittest_schema_SQLServer.sql
│ │ │ ├── schema_dumper.py
│ │ │ ├── sql_convert.py
│ │ │ ├── sql_parser.py
│ │ │ ├── sql_reporter.py
│ │ │ ├── sqlite/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── deprecated/
│ │ │ │ │ ├── flash_data.sql
│ │ │ │ │ └── prod_data.sql
│ │ │ │ ├── schema_dump_cmd.py
│ │ │ │ ├── simple_data.sql
│ │ │ │ ├── simple_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ ├── sthpw_data.sql
│ │ │ │ ├── sthpw_schema.sql
│ │ │ │ ├── unittest_schema.sql
│ │ │ │ ├── upgrade_convert.py
│ │ │ │ └── upgrade_output.txt
│ │ │ ├── sqlserver/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bootstrap_load.py
│ │ │ │ ├── bootstrap_schema.sql
│ │ │ │ ├── config_schema.sql
│ │ │ │ ├── sql_convert.py
│ │ │ │ └── sthpw_schema.sql
│ │ │ ├── summary.py
│ │ │ └── upgrade_db.py
│ │ └── widget_db_config.py
│ ├── security/
│ │ ├── __init__.py
│ │ ├── access_manager.py
│ │ ├── access_rule.py
│ │ ├── authenticate.py
│ │ ├── authenticate_test.py
│ │ ├── batch.py
│ │ ├── crypto_key.py
│ │ ├── drupal_password_hasher.py
│ │ ├── external_service.py
│ │ ├── external_service_test.py
│ │ ├── ldap_ad_authenticate.py
│ │ ├── security.py
│ │ ├── security_test.py
│ │ ├── tactic-license.xml
│ │ └── watermark.py
│ ├── unittest/
│ │ ├── __init__.py
│ │ ├── environment.py
│ │ ├── person.py
│ │ ├── schema.sql
│ │ ├── test_trigger.py
│ │ └── testsuite.py
│ ├── web/
│ │ ├── __init__.py
│ │ ├── app_server.py
│ │ ├── cache_startup.py
│ │ ├── callback.py
│ │ ├── cherrypy30_adapter.py
│ │ ├── cherrypy30_startup.py
│ │ ├── cherrypy_adapter.py
│ │ ├── cherrypy_startup.py
│ │ ├── command_delegator.py
│ │ ├── event_container.py
│ │ ├── html_wdg.py
│ │ ├── html_wdg_test.py
│ │ ├── mod_python_wrapper.py
│ │ ├── monitor.py
│ │ ├── palette.py
│ │ ├── simple_app_server.py
│ │ ├── test-conf.xml
│ │ ├── url_security.py
│ │ ├── web_app.py
│ │ ├── web_app_test.py
│ │ ├── web_container.py
│ │ ├── web_environment.py
│ │ ├── web_init.py
│ │ ├── web_login_cmd.py
│ │ ├── web_state.py
│ │ ├── web_tools.py
│ │ ├── webware_adapter.py
│ │ ├── widget.py
│ │ ├── widget_app_server.py
│ │ └── widget_test.py
│ └── widget/
│ ├── __init__.py
│ ├── annotate_wdg.py
│ ├── applet.py
│ ├── base_tab_wdg.py
│ ├── clipboard_wdg.py
│ ├── creator_wdg.py
│ ├── custom_info_wdg.py
│ ├── custom_view_app_wdg.py
│ ├── custom_view_wdg.py
│ ├── dependency_wdg.py
│ ├── discussion_wdg.py
│ ├── dynamic_loader_page.py
│ ├── error_wdg.py
│ ├── file_wdg.py
│ ├── filter_wdg.py
│ ├── folder_wdg.py
│ ├── gantt_wdg.py
│ ├── header_wdg.py
│ ├── icon_wdg.py
│ ├── input_wdg.py
│ ├── layout_wdg.py
│ ├── menu.py
│ ├── my_tactic_summary_wdg.py
│ ├── naming_wdg.py
│ ├── parallel_status.py
│ ├── project_wdg.py
│ ├── search_limit_wdg.py
│ ├── serial_status.py
│ ├── shadowbox_wdg.py
│ ├── sobject_browser_wdg.py
│ ├── sobject_group_wdg.py
│ ├── statistic_wdg.py
│ ├── tab_wdg.py
│ ├── table_element_wdg.py
│ ├── task_wdg.py
│ ├── timecard_wdg.py
│ ├── upload_server_page.py
│ ├── web_attr.py
│ ├── web_wdg.py
│ ├── widget_config.py
│ └── widget_config_test.py
├── tactic/
│ ├── __init__.py
│ ├── active_directory/
│ │ ├── AD_group_export.ldif
│ │ ├── AD_user_export.ldif
│ │ ├── __init__.py
│ │ ├── active_directory.py
│ │ ├── ad_authenticate.py
│ │ ├── ad_connect.py
│ │ ├── ad_get_user_info.py
│ │ ├── ad_lookup.py
│ │ ├── ad_search_wdg.py
│ │ └── ad_test.py
│ ├── command/
│ │ ├── __init__.py
│ │ ├── clipboard_cmd.py
│ │ ├── copy_config_cmd.py
│ │ ├── create_project_cmd.py
│ │ ├── global_search_trigger.py
│ │ ├── ingestion_cmd.py
│ │ ├── js_cmd.py
│ │ ├── kronos.py
│ │ ├── login_group_trigger.py
│ │ ├── naming_migrator_cmd.py
│ │ ├── notification_cmd.py
│ │ ├── package.py
│ │ ├── pipeline_task_trigger.py
│ │ ├── plugin.py
│ │ ├── project_template_cmd.py
│ │ ├── python_cmd.py
│ │ ├── queue.py
│ │ ├── rsync.py
│ │ ├── run_transaction_cmd.py
│ │ ├── scheduler.py
│ │ ├── sobject_copy_cmd.py
│ │ ├── watch_drop_folder.py
│ │ └── watch_handoff_folder.py
│ ├── protocol/
│ │ ├── __init__.py
│ │ ├── api_test.php
│ │ ├── api_test.py
│ │ ├── create_tactic_js.py
│ │ ├── graphql_handler.py
│ │ ├── python_rest_handler.py
│ │ ├── rest_handler.py
│ │ └── rest_test.py
│ ├── react/
│ │ ├── __init__.py
│ │ ├── chart.js
│ │ ├── chart.jsx
│ │ ├── common.js
│ │ ├── common.jsx
│ │ ├── config.js
│ │ ├── config.jsx
│ │ ├── config.py
│ │ ├── data_grid.js
│ │ ├── data_grid.jsx
│ │ ├── import_data.js
│ │ ├── import_data.jsx
│ │ ├── import_data.py
│ │ ├── pages.js
│ │ ├── pages.jsx
│ │ ├── react.py
│ │ ├── table_layout.js
│ │ ├── table_layout.jsx
│ │ ├── table_layout.py
│ │ └── widget/
│ │ ├── modal.js
│ │ ├── modal.jsx
│ │ ├── notes.js
│ │ ├── notes.jsx
│ │ └── notes.py
│ ├── startup/
│ │ ├── __init__.py
│ │ └── first_run_init.py
│ ├── tactic_paths.py
│ ├── triggers/
│ │ ├── __init__.py
│ │ ├── checkin_trigger.py
│ │ └── data_trigger.py
│ ├── ui/
│ │ ├── __init__.py
│ │ ├── activator/
│ │ │ ├── __init__.py
│ │ │ └── click_activate_menu_wdg.py
│ │ ├── app/
│ │ │ ├── __init__.py
│ │ │ ├── advanced_search.py
│ │ │ ├── aggregate_wdg.py
│ │ │ ├── analytics_wdg.py
│ │ │ ├── app_sobject_checkin_wdg.py
│ │ │ ├── custom_print_view_wdg.py
│ │ │ ├── custom_property_wdg.py
│ │ │ ├── db_resource_wdg.py
│ │ │ ├── diagnostics_wdg.py
│ │ │ ├── dynamic_update_wdg.py
│ │ │ ├── help_wdg.py
│ │ │ ├── js_includes.py
│ │ │ ├── license_manager_wdg.py
│ │ │ ├── message_wdg.py
│ │ │ ├── naming_migrator_wdg.py
│ │ │ ├── note_wdg.py
│ │ │ ├── notify_wdg.py
│ │ │ ├── page_header_wdg.py
│ │ │ ├── page_nav_container_wdg.py
│ │ │ ├── plugin_wdg.py
│ │ │ ├── project_start_wdg.py
│ │ │ ├── project_template_wdg.py
│ │ │ ├── project_wdg.py
│ │ │ ├── quick_box_wdg.py
│ │ │ ├── search_limit_wdg.py
│ │ │ ├── search_type_creator_wdg.py
│ │ │ ├── search_type_element_wdg.py
│ │ │ ├── search_wdg.py
│ │ │ ├── setup_manager_wdg.py
│ │ │ ├── shelf_wdg.py
│ │ │ ├── simple_search_wdg.py
│ │ │ ├── system_info_wdg.py
│ │ │ ├── tactic_branding_wdg.py
│ │ │ ├── task_wdg.py
│ │ │ ├── top_container_wdg.py
│ │ │ ├── top_wdg.py
│ │ │ ├── undo_log_wdg.py
│ │ │ ├── update_wdg.py
│ │ │ └── validation.py
│ │ ├── bootstrap_app/
│ │ │ ├── __init__.py
│ │ │ ├── bootstrap_index_wdg.py
│ │ │ └── bootstrap_tab_wdg.py
│ │ ├── cgapp/
│ │ │ ├── __init__.py
│ │ │ ├── app_init_wdg.py
│ │ │ ├── app_panel_wdg.py
│ │ │ ├── checkin_wdg.py
│ │ │ ├── connection_select_wdg.py
│ │ │ ├── introspect.py
│ │ │ ├── load_options_wdg.py
│ │ │ ├── loader_button_wdg.py
│ │ │ ├── loader_element_wdg.py
│ │ │ ├── loader_wdg.py
│ │ │ ├── publish_element_wdg.py
│ │ │ ├── session_wdg.py
│ │ │ ├── sobject_load_wdg.py
│ │ │ └── version_wdg.py
│ │ ├── chart/
│ │ │ ├── __init__.py
│ │ │ ├── bar_chart_wdg.py
│ │ │ ├── chart_builder_wdg.py
│ │ │ ├── chart_data.py
│ │ │ ├── chart_js_wdg.py
│ │ │ ├── chart_wdg.py
│ │ │ ├── chart_wdg_old.py
│ │ │ ├── sample_chart_wdg.py
│ │ │ └── sobject_chart_wdg.py
│ │ ├── checkin/
│ │ │ ├── __init__.py
│ │ │ ├── branch_wdg.py
│ │ │ ├── changelist_wdg.py
│ │ │ ├── checkin_dir_list_wdg.py
│ │ │ ├── file_properties_wdg.py
│ │ │ ├── sandbox_select_wdg.py
│ │ │ ├── scm_dir_list_wdg.py
│ │ │ ├── simple_checkin_wdg.py
│ │ │ ├── snapshot_files_wdg.py
│ │ │ └── workspace_wdg.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── base_config_wdg.py
│ │ │ ├── base_refresh_wdg.py
│ │ │ ├── base_table_element_wdg.py
│ │ │ ├── corner_generator.py
│ │ │ └── widget_class_handler.py
│ │ ├── config/
│ │ │ ├── DEFAULT-conf.xml
│ │ │ ├── admin-conf.xml
│ │ │ ├── asset-conf.xml
│ │ │ ├── bookmarks-conf.xml
│ │ │ ├── children-conf.xml
│ │ │ ├── dashboard-conf.xml
│ │ │ ├── flash-conf.xml
│ │ │ ├── prod-conf.xml
│ │ │ ├── reports-conf.xml
│ │ │ ├── sample-conf.xml
│ │ │ └── simple-conf.xml
│ │ ├── container/
│ │ │ ├── __init__.py
│ │ │ ├── arrow_wdg.py
│ │ │ ├── container_wdg.py
│ │ │ ├── content_wdg.py
│ │ │ ├── context_menu_wdg.py
│ │ │ ├── dialog_wdg.py
│ │ │ ├── dynamic_list_wdg.py
│ │ │ ├── menu_wdg.py
│ │ │ ├── panel_wdg.py
│ │ │ ├── pop_window_wdg.py
│ │ │ ├── popup_wdg.py
│ │ │ ├── resizable_table_wdg.py
│ │ │ ├── smart_menu_wdg.py
│ │ │ ├── tab_wdg.py
│ │ │ └── wizard_wdg.py
│ │ ├── examples/
│ │ │ ├── __init__.py
│ │ │ ├── base_example_wdg.py
│ │ │ ├── dev_sandbox_01_wdg.py
│ │ │ ├── dev_sandbox_02_wdg.py
│ │ │ ├── dev_sandbox_03_wdg.py
│ │ │ ├── efficient_table_example_wdg.py
│ │ │ ├── event_examples_wdg.py
│ │ │ ├── font_palettes_example_wdg.py
│ │ │ ├── fx_anim_examples_wdg.py
│ │ │ ├── keyboard_handler_examples_wdg.py
│ │ │ ├── menu_examples_wdg.py
│ │ │ ├── misc_examples_wdg.py
│ │ │ ├── panning_scroll_example_wdg.py
│ │ │ ├── search_class_tag_examples_wdg.py
│ │ │ └── ui_playground_panel_wdg.py
│ │ ├── filter/
│ │ │ ├── __init__.py
│ │ │ ├── filter_data.py
│ │ │ ├── filter_element_wdg.py
│ │ │ ├── filter_wdg.py
│ │ │ └── type_filter_element_wdg.py
│ │ ├── gantt/
│ │ │ ├── __init__.py
│ │ │ ├── gantt_item_wdg.py
│ │ │ ├── gantt_task_item_wdg.py
│ │ │ └── gantt_wdg.py
│ │ ├── input/
│ │ │ ├── __init__.py
│ │ │ ├── color_input_wdg.py
│ │ │ ├── custom_select_wdg.py
│ │ │ ├── html5_upload_wdg.py
│ │ │ ├── icon_select_wdg.py
│ │ │ ├── multitext_input_wdg.py
│ │ │ ├── navigator_wdg.py
│ │ │ ├── note_input_wdg.py
│ │ │ ├── pipeline_input_wdg.py
│ │ │ ├── process_context_wdg.py
│ │ │ ├── process_group_select_wdg.py
│ │ │ ├── search_type_input_wdg.py
│ │ │ ├── task_input_wdg.py
│ │ │ ├── text_input_wdg.py
│ │ │ └── textarea_input_wdg.py
│ │ ├── manager/
│ │ │ ├── __init__.py
│ │ │ ├── base_section_wdg.py
│ │ │ ├── element_definition_wdg.py
│ │ │ ├── format_definition_wdg.py
│ │ │ ├── view_manager_wdg.py
│ │ │ └── view_section_wdg.py
│ │ ├── panel/
│ │ │ ├── __init__.py
│ │ │ ├── action_wdg.py
│ │ │ ├── base_table_layout_wdg.py
│ │ │ ├── collection_wdg.py
│ │ │ ├── custom_layout_wdg.py
│ │ │ ├── custom_search_wdg.py
│ │ │ ├── document_wdg.py
│ │ │ ├── edit_cmd.py
│ │ │ ├── edit_layout_wdg.py
│ │ │ ├── edit_wdg.py
│ │ │ ├── element_definition_wdg.py
│ │ │ ├── freeform_layout_wdg.py
│ │ │ ├── hash_panel_wdg.py
│ │ │ ├── layout_util.py
│ │ │ ├── layout_wdg.py
│ │ │ ├── manage_view_panel_wdg.py
│ │ │ ├── mobile_wdg.py
│ │ │ ├── panel_wdg.py
│ │ │ ├── planner_layout_wdg.py
│ │ │ ├── print_layout_wdg.py
│ │ │ ├── schema_section_wdg.py
│ │ │ ├── search_type_manager_wdg.py
│ │ │ ├── search_type_panel_wdg.py
│ │ │ ├── security_manager_wdg.py
│ │ │ ├── simple_side_bar_wdg.py
│ │ │ ├── sobject_panel_wdg.py
│ │ │ ├── sql_panel_wdg.py
│ │ │ ├── static_table_layout_wdg.py
│ │ │ ├── swf_wdg.py
│ │ │ ├── table_layout_wdg.py
│ │ │ ├── test_custom_wdg.py
│ │ │ ├── test_dynamic_load_wdg.py
│ │ │ ├── tile_layout_wdg.py
│ │ │ ├── tool_layout_wdg.py
│ │ │ └── view_manager_wdg.py
│ │ ├── popups/
│ │ │ ├── __init__.py
│ │ │ ├── action_bar_wdg.py
│ │ │ ├── help_popup_wdg.py
│ │ │ └── transaction_popup_wdg.py
│ │ ├── report/
│ │ │ ├── __init__.py
│ │ │ ├── stype_report_wdg.py
│ │ │ ├── task_status_report_wdg.py
│ │ │ └── yearly_report_wdg.py
│ │ ├── startup/
│ │ │ ├── __init__.py
│ │ │ ├── client_wdg.py
│ │ │ ├── column_edit_wdg.py
│ │ │ ├── content_creator_wdg.py
│ │ │ ├── dashboards_wdg.py
│ │ │ ├── db_config_wdg.py
│ │ │ ├── home_wdg.py
│ │ │ ├── main_wdg.py
│ │ │ ├── misc_wdg.py
│ │ │ ├── pipeline_edit_wdg.py
│ │ │ ├── project_config_wdg.py
│ │ │ ├── reports_wdg.py
│ │ │ ├── security_wdg.py
│ │ │ ├── share_wdg.py
│ │ │ └── themes_wdg.py
│ │ ├── sync/
│ │ │ ├── __init__.py
│ │ │ ├── sync_filter.py
│ │ │ ├── sync_filter_test.py
│ │ │ ├── sync_import_wdg.py
│ │ │ ├── sync_security_wdg.py
│ │ │ ├── sync_settings_wdg.py
│ │ │ └── sync_utils.py
│ │ ├── table/
│ │ │ ├── __init__.py
│ │ │ ├── button_wdg.py
│ │ │ ├── custom_layout_element_wdg.py
│ │ │ ├── delete_element_wdg.py
│ │ │ ├── drop_element_wdg.py
│ │ │ ├── explorer_wdg.py
│ │ │ ├── expression_element_wdg.py
│ │ │ ├── foreign_key_element_wdg.py
│ │ │ ├── format_element_wdg.py
│ │ │ ├── gantt_element_wdg.py
│ │ │ ├── group_element_wdg.py
│ │ │ ├── hidden_row_element_wdg.py
│ │ │ ├── html_element_wdg.py
│ │ │ ├── json_element_wdg.py
│ │ │ ├── link_element_wdg.py
│ │ │ ├── metadata_element_wdg.py
│ │ │ ├── preference_wdg.py
│ │ │ ├── project_wdg.py
│ │ │ ├── projected_schedule_wdg.py
│ │ │ ├── python_element_wdg.py
│ │ │ ├── related_element_wdg.py
│ │ │ ├── snapshot_element_wdg.py
│ │ │ ├── sobject_detail_wdg.py
│ │ │ ├── sobject_summary_wdg.py
│ │ │ ├── spreadsheet_element_wdg.py
│ │ │ ├── statistic_wdg.py
│ │ │ ├── subcontext_wdg.py
│ │ │ ├── table_element_wdg.py
│ │ │ ├── task_element_wdg.js
│ │ │ ├── task_element_wdg.py
│ │ │ └── work_hours_element_wdg.py
│ │ ├── tools/
│ │ │ ├── __init__.py
│ │ │ ├── checkout_wdg.py
│ │ │ ├── custom_layout_edit_wdg.py
│ │ │ ├── db_register_wdg.py
│ │ │ ├── delete_wdg.py
│ │ │ ├── dependency_wdg.py
│ │ │ ├── doc_tool_wdg.py
│ │ │ ├── file_detail_wdg.py
│ │ │ ├── freeform_layout_wdg.py
│ │ │ ├── ingest_wdg.py
│ │ │ ├── ingestion_wdg.py
│ │ │ ├── jsx_processor.py
│ │ │ ├── mail_templates.py
│ │ │ ├── pipeline_canvas_wdg.py
│ │ │ ├── pipeline_wdg.py
│ │ │ ├── repo_browser_wdg.py
│ │ │ ├── review_wdg.py
│ │ │ ├── schedule_wdg.py
│ │ │ ├── schema_wdg.py
│ │ │ ├── sobject_wdg.py
│ │ │ ├── tab_edit_wdg.py
│ │ │ └── trigger_wdg.py
│ │ └── widget/
│ │ ├── __init__.py
│ │ ├── button_new_wdg.py
│ │ ├── button_wdg.py
│ │ ├── calendar_wdg.py
│ │ ├── checkin_wdg.py
│ │ ├── chooser_wdg.py
│ │ ├── ckeditor_wdg.py
│ │ ├── color_input_wdg.py
│ │ ├── data_export_wdg.py
│ │ ├── discussion_wdg.py
│ │ ├── embed_wdg.py
│ │ ├── file_browser_wdg.py
│ │ ├── format_value_wdg.py
│ │ ├── gallery_wdg.py
│ │ ├── gear_menu_wdg.py
│ │ ├── layout_switcher_wdg.py
│ │ ├── misc_input_wdg.py
│ │ ├── overlay_stats_wdg.py
│ │ ├── plan_wdg.py
│ │ ├── progress_wdg.py
│ │ ├── proxy_wdg.py
│ │ ├── reset_password_wdg.py
│ │ ├── review_wdg.py
│ │ ├── serialize_wdg.py
│ │ ├── smart_select_wdg.py
│ │ ├── sobject_calendar_wdg.py
│ │ ├── sobject_group_wdg.py
│ │ ├── swap_display_wdg.py
│ │ ├── text_wdg.py
│ │ ├── title_wdg.py
│ │ ├── unity_wdg.py
│ │ ├── upload_wdg.py
│ │ ├── video_wdg.py
│ │ ├── visual_notes_wdg.py
│ │ ├── week_wdg.py
│ │ └── work_hour_wdg.py
│ └── utility/
│ ├── __init__.py
│ └── database.py
├── tactic_sites/
│ ├── __init__.py
│ ├── default/
│ │ ├── __init__.py
│ │ ├── context/
│ │ │ ├── Api.py
│ │ │ ├── Config.py
│ │ │ ├── CsvDownload.py
│ │ │ ├── Error403.py
│ │ │ ├── Error404.py
│ │ │ ├── Index.py
│ │ │ ├── TitlePage.py
│ │ │ ├── UploadServer.py
│ │ │ ├── WidgetServer.py
│ │ │ ├── XMLRPC.py
│ │ │ ├── __init__.py
│ │ │ └── browser.py
│ │ └── modules/
│ │ ├── __init__.py
│ │ └── index_wdg.py
│ └── template/
│ ├── __init__.py
│ ├── context/
│ │ ├── Houdini.py
│ │ ├── Index.py
│ │ ├── JSFL/
│ │ │ └── post_stage.jsfl
│ │ ├── Maya.py
│ │ ├── Sthpw.py
│ │ ├── XMLRPC.py
│ │ ├── XSI.py
│ │ └── __init__.py
│ └── modules/
│ ├── __init__.py
│ ├── base_index_wdg.py
│ └── site_page.py
└── test/
├── ad_test.py
├── api_test.py
├── authenticate_test.py
├── biz_test.py
├── checkin_test.py
├── command_test.py
├── common_test.py
├── config_test.py
├── database_test.py
├── dataflow_test.py
├── expression_test.py
├── file_test.py
├── html_wdg_test.py
├── naming_test.py
├── notification_test.py
├── pipeline_test.py
├── rest_test.py
├── run_tests.sh
├── schema_test.py
├── search_test.py
├── security_api_test.py
├── security_test.py
├── snapshot_builder_test.py
├── snapshot_test.py
├── spt_date_test.py
├── sql_test.py
├── system_test.py
├── transaction_test.py
├── widget_config_test.py
├── widget_test.py
├── workflow_test.py
└── xml_test.py
Showing preview only (2,589K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (33037 symbols across 1421 files)
FILE: 3rd_party/babel/babel.py
class JSXTranspileCmd (line 8) | class JSXTranspileCmd():
method execute (line 10) | def execute(self, text):
FILE: 3rd_party/babel/test.jsx
class LikeButton (line 5) | class LikeButton extends React.Component {
method constructor (line 6) | constructor(props) {
method render (line 23) | render() {
FILE: 3rd_party/common/site-packages/mako/_ast_util.py
function parse (line 90) | def parse(expr, filename="<unknown>", mode="exec"):
function iter_fields (line 95) | def iter_fields(node):
class NodeVisitor (line 107) | class NodeVisitor(object):
method get_visitor (line 125) | def get_visitor(self, node):
method visit (line 134) | def visit(self, node):
method generic_visit (line 141) | def generic_visit(self, node):
class NodeTransformer (line 152) | class NodeTransformer(NodeVisitor):
method generic_visit (line 188) | def generic_visit(self, node):
class SourceGenerator (line 212) | class SourceGenerator(NodeVisitor):
method __init__ (line 220) | def __init__(self, indent_with):
method write (line 226) | def write(self, x):
method newline (line 234) | def newline(self, n=1):
method body (line 237) | def body(self, statements):
method body_or_else (line 244) | def body_or_else(self, node):
method signature (line 251) | def signature(self, node):
method decorators (line 274) | def decorators(self, node):
method visit_Assign (line 282) | def visit_Assign(self, node):
method visit_AugAssign (line 291) | def visit_AugAssign(self, node):
method visit_ImportFrom (line 297) | def visit_ImportFrom(self, node):
method visit_Import (line 305) | def visit_Import(self, node):
method visit_Expr (line 311) | def visit_Expr(self, node):
method visit_FunctionDef (line 315) | def visit_FunctionDef(self, node):
method visit_ClassDef (line 324) | def visit_ClassDef(self, node):
method visit_If (line 359) | def visit_If(self, node):
method visit_For (line 380) | def visit_For(self, node):
method visit_While (line 389) | def visit_While(self, node):
method visit_With (line 396) | def visit_With(self, node):
method visit_Pass (line 406) | def visit_Pass(self, node):
method visit_Print (line 410) | def visit_Print(self, node):
method visit_Delete (line 427) | def visit_Delete(self, node):
method visit_TryExcept (line 435) | def visit_TryExcept(self, node):
method visit_TryFinally (line 442) | def visit_TryFinally(self, node):
method visit_Global (line 450) | def visit_Global(self, node):
method visit_Nonlocal (line 454) | def visit_Nonlocal(self, node):
method visit_Return (line 458) | def visit_Return(self, node):
method visit_Break (line 463) | def visit_Break(self, node):
method visit_Continue (line 467) | def visit_Continue(self, node):
method visit_Raise (line 471) | def visit_Raise(self, node):
method visit_Attribute (line 492) | def visit_Attribute(self, node):
method visit_Call (line 496) | def visit_Call(self, node):
method visit_Name (line 524) | def visit_Name(self, node):
method visit_NameConstant (line 527) | def visit_NameConstant(self, node):
method visit_arg (line 530) | def visit_arg(self, node):
method visit_Str (line 533) | def visit_Str(self, node):
method visit_Bytes (line 536) | def visit_Bytes(self, node):
method visit_Num (line 539) | def visit_Num(self, node):
method visit_Constant (line 543) | def visit_Constant(self, node):
method visit_Tuple (line 546) | def visit_Tuple(self, node):
method sequence_visit (line 555) | def sequence_visit(left, right):
method visit_Dict (line 570) | def visit_Dict(self, node):
method visit_BinOp (line 580) | def visit_BinOp(self, node):
method visit_BoolOp (line 587) | def visit_BoolOp(self, node):
method visit_Compare (line 595) | def visit_Compare(self, node):
method visit_UnaryOp (line 603) | def visit_UnaryOp(self, node):
method visit_Subscript (line 612) | def visit_Subscript(self, node):
method visit_Slice (line 618) | def visit_Slice(self, node):
method visit_ExtSlice (line 629) | def visit_ExtSlice(self, node):
method visit_Yield (line 635) | def visit_Yield(self, node):
method visit_Lambda (line 639) | def visit_Lambda(self, node):
method visit_Ellipsis (line 645) | def visit_Ellipsis(self, node):
method generator_visit (line 648) | def generator_visit(left, right):
method visit_DictComp (line 663) | def visit_DictComp(self, node):
method visit_IfExp (line 672) | def visit_IfExp(self, node):
method visit_Starred (line 679) | def visit_Starred(self, node):
method visit_Repr (line 683) | def visit_Repr(self, node):
method visit_alias (line 691) | def visit_alias(self, node):
method visit_comprehension (line 696) | def visit_comprehension(self, node):
method visit_excepthandler (line 706) | def visit_excepthandler(self, node):
FILE: 3rd_party/common/site-packages/mako/ast.py
class PythonCode (line 17) | class PythonCode(object):
method __init__ (line 21) | def __init__(self, code, **exception_kwargs):
class ArgumentList (line 51) | class ArgumentList(object):
method __init__ (line 55) | def __init__(self, code, **exception_kwargs):
class PythonFragment (line 73) | class PythonFragment(PythonCode):
method __init__ (line 86) | def __init__(self, code, **exception_kwargs):
class FunctionDecl (line 114) | class FunctionDecl(object):
method __init__ (line 118) | def __init__(self, code, allow_kwargs=True, **exception_kwargs):
method get_argument_expressions (line 136) | def get_argument_expressions(self, as_call=False):
method allargnames (line 194) | def allargnames(self):
class FunctionArgs (line 198) | class FunctionArgs(FunctionDecl):
method __init__ (line 202) | def __init__(self, code, **kwargs):
FILE: 3rd_party/common/site-packages/mako/cache.py
class Cache (line 16) | class Cache(object):
method __init__ (line 66) | def __init__(self, template, *args):
method _load_impl (line 77) | def _load_impl(self, name):
method get_or_create (line 80) | def get_or_create(self, key, creation_function, **kw):
method _ctx_get_or_create (line 86) | def _ctx_get_or_create(self, key, creation_function, context, **kw):
method set (line 97) | def set(self, key, value, **kw):
method get (line 115) | def get(self, key, **kw):
method invalidate (line 127) | def invalidate(self, key, **kw):
method invalidate_body (line 139) | def invalidate_body(self):
method invalidate_def (line 146) | def invalidate_def(self, name):
method invalidate_closure (line 154) | def invalidate_closure(self, name):
method _get_cache_kw (line 167) | def _get_cache_kw(self, kw, context):
class CacheImpl (line 184) | class CacheImpl(object):
method __init__ (line 188) | def __init__(self, cache):
method get_or_create (line 196) | def get_or_create(self, key, creation_function, **kw):
method set (line 214) | def set(self, key, value, **kw):
method get (line 224) | def get(self, key, **kw):
method invalidate (line 233) | def invalidate(self, key, **kw):
FILE: 3rd_party/common/site-packages/mako/cmd.py
function varsplit (line 17) | def varsplit(var):
function _exit (line 23) | def _exit():
function cmdline (line 28) | def cmdline(argv=None):
FILE: 3rd_party/common/site-packages/mako/codegen.py
function compile (line 32) | def compile( # noqa
class _CompileContext (line 81) | class _CompileContext(object):
method __init__ (line 82) | def __init__(
class _GenerateRenderMethod (line 111) | class _GenerateRenderMethod(object):
method __init__ (line 118) | def __init__(self, printer, compiler, node):
method write_metadata_struct (line 167) | def write_metadata_struct(self):
method identifiers (line 185) | def identifiers(self):
method write_toplevel (line 188) | def write_toplevel(self):
method write_render_callable (line 297) | def write_render_callable(
method write_module_code (line 354) | def write_module_code(self, module_code):
method write_inherit (line 360) | def write_inherit(self, node):
method write_namespaces (line 371) | def write_namespaces(self, namespaces):
method write_variable_declares (line 464) | def write_variable_declares(self, identifiers, toplevel=False, limit=N...
method write_def_decl (line 590) | def write_def_decl(self, node, identifiers):
method write_inline_def (line 609) | def write_inline_def(self, node, identifiers, nested):
method write_def_finish (line 655) | def write_def_finish(
method write_cache_decorator (line 706) | def write_cache_decorator(
method create_filter_callable (line 789) | def create_filter_callable(self, args, target, is_expression):
method visitExpression (line 823) | def visitExpression(self, node):
method visitControlLine (line 841) | def visitControlLine(self, node):
method visitText (line 874) | def visitText(self, node):
method visitTextTag (line 878) | def visitTextTag(self, node):
method visitCode (line 897) | def visitCode(self, node):
method visitIncludeTag (line 918) | def visitIncludeTag(self, node):
method visitNamespaceTag (line 932) | def visitNamespaceTag(self, node):
method visitDefTag (line 935) | def visitDefTag(self, node):
method visitBlockTag (line 938) | def visitBlockTag(self, node):
method visitCallNamespaceTag (line 953) | def visitCallNamespaceTag(self, node):
method visitCallTag (line 959) | def visitCallTag(self, node):
class _Identifiers (line 1028) | class _Identifiers(object):
method __init__ (line 1032) | def __init__(self, compiler, node=None, parent=None, nested=False):
method branch (line 1099) | def branch(self, node, **kwargs):
method defs (line 1106) | def defs(self):
method __repr__ (line 1109) | def __repr__(self):
method check_declared (line 1124) | def check_declared(self, node):
method add_declared (line 1136) | def add_declared(self, ident):
method visitExpression (line 1141) | def visitExpression(self, node):
method visitControlLine (line 1144) | def visitControlLine(self, node):
method visitCode (line 1147) | def visitCode(self, node):
method visitNamespaceTag (line 1154) | def visitNamespaceTag(self, node):
method _check_name_exists (line 1162) | def _check_name_exists(self, collection, node):
method visitDefTag (line 1176) | def visitDefTag(self, node):
method visitBlockTag (line 1196) | def visitBlockTag(self, node):
method visitTextTag (line 1230) | def visitTextTag(self, node):
method visitIncludeTag (line 1237) | def visitIncludeTag(self, node):
method visitPageTag (line 1240) | def visitPageTag(self, node):
method visitCallNamespaceTag (line 1245) | def visitCallNamespaceTag(self, node):
method visitCallTag (line 1248) | def visitCallTag(self, node):
function mangle_mako_loop (line 1273) | def mangle_mako_loop(node, printer):
class LoopVariable (line 1296) | class LoopVariable(object):
method __init__ (line 1301) | def __init__(self):
method _loop_reference_detected (line 1304) | def _loop_reference_detected(self, node):
method visitControlLine (line 1311) | def visitControlLine(self, node):
method visitCode (line 1314) | def visitCode(self, node):
method visitExpression (line 1317) | def visitExpression(self, node):
FILE: 3rd_party/common/site-packages/mako/compat.py
function inspect_getargspec (line 23) | def inspect_getargspec(func):
function u (line 64) | def u(s):
function b (line 67) | def b(s):
function octal (line 70) | def octal(lit):
function u (line 91) | def u(s):
function b (line 94) | def b(s):
function octal (line 97) | def octal(lit):
function load_module (line 106) | def load_module(module_id, path):
function load_module (line 112) | def load_module(module_id, path):
function load_module (line 120) | def load_module(module_id, path):
function reraise (line 132) | def reraise(tp, value, tb=None, cause=None):
function exception_as (line 147) | def exception_as():
function exception_name (line 154) | def exception_name(exc):
function with_metaclass (line 161) | def with_metaclass(meta, base=object):
function arg_stringname (line 169) | def arg_stringname(func_arg):
FILE: 3rd_party/common/site-packages/mako/exceptions.py
class MakoException (line 16) | class MakoException(Exception):
class RuntimeException (line 20) | class RuntimeException(MakoException):
function _format_filepos (line 24) | def _format_filepos(lineno, pos, filename):
class CompileException (line 31) | class CompileException(MakoException):
method __init__ (line 32) | def __init__(self, message, source, lineno, pos, filename):
class SyntaxException (line 42) | class SyntaxException(MakoException):
method __init__ (line 43) | def __init__(self, message, source, lineno, pos, filename):
class UnsupportedError (line 53) | class UnsupportedError(MakoException):
class NameConflictError (line 58) | class NameConflictError(MakoException):
class TemplateLookupException (line 63) | class TemplateLookupException(MakoException):
class TopLevelLookupException (line 67) | class TopLevelLookupException(TemplateLookupException):
class RichTraceback (line 71) | class RichTraceback(object):
method __init__ (line 80) | def __init__(self, error=None, traceback=None):
method errorname (line 103) | def errorname(self):
method _init_message (line 106) | def _init_message(self):
method _get_reformatted_records (line 120) | def _get_reformatted_records(self, records):
method traceback (line 128) | def traceback(self):
method reverse_records (line 137) | def reverse_records(self):
method reverse_traceback (line 141) | def reverse_traceback(self):
method _init (line 147) | def _init(self, trcback):
function text_error_template (line 254) | def text_error_template(lookup=None):
function _install_pygments (line 282) | def _install_pygments():
function _install_fallback (line 288) | def _install_fallback():
function _install_highlighting (line 298) | def _install_highlighting():
function html_error_template (line 308) | def html_error_template():
FILE: 3rd_party/common/site-packages/mako/ext/autohandler.py
function autohandler (line 33) | def autohandler(template, context, name="autohandler"):
function _file_exists (line 64) | def _file_exists(lookup, path):
FILE: 3rd_party/common/site-packages/mako/ext/babelplugin.py
class BabelMakoExtractor (line 13) | class BabelMakoExtractor(MessageExtractor):
method __init__ (line 14) | def __init__(self, keywords, comment_tags, options):
method __call__ (line 25) | def __call__(self, fileobj):
method process_python (line 28) | def process_python(self, code, code_lineno, translator_strings):
function extract (line 44) | def extract(fileobj, keywords, comment_tags, options):
FILE: 3rd_party/common/site-packages/mako/ext/beaker_cache.py
class BeakerCacheImpl (line 22) | class BeakerCacheImpl(CacheImpl):
method __init__ (line 32) | def __init__(self, cache):
method _get_cache (line 45) | def _get_cache(self, **kw):
method get_or_create (line 68) | def get_or_create(self, key, creation_function, **kw):
method put (line 72) | def put(self, key, value, **kw):
method get (line 76) | def get(self, key, **kw):
method invalidate (line 80) | def invalidate(self, key, **kw):
FILE: 3rd_party/common/site-packages/mako/ext/extract.py
class MessageExtractor (line 14) | class MessageExtractor(object):
method process_file (line 15) | def process_file(self, fileobj):
method extract_nodes (line 22) | def extract_nodes(self, nodes):
method _split_comment (line 119) | def _split_comment(lineno, comment):
FILE: 3rd_party/common/site-packages/mako/ext/linguaplugin.py
class LinguaMakoExtractor (line 17) | class LinguaMakoExtractor(Extractor, MessageExtractor):
method __call__ (line 24) | def __call__(self, filename, options, fileobj=None):
method process_python (line 40) | def process_python(self, code, code_lineno, translator_strings):
FILE: 3rd_party/common/site-packages/mako/ext/preprocessors.py
function convert_comments (line 13) | def convert_comments(text):
FILE: 3rd_party/common/site-packages/mako/ext/pygmentplugin.py
class MakoLexer (line 31) | class MakoLexer(RegexLexer):
class MakoHtmlLexer (line 106) | class MakoHtmlLexer(DelegatingLexer):
method __init__ (line 110) | def __init__(self, **options):
class MakoXmlLexer (line 114) | class MakoXmlLexer(DelegatingLexer):
method __init__ (line 118) | def __init__(self, **options):
class MakoJavascriptLexer (line 122) | class MakoJavascriptLexer(DelegatingLexer):
method __init__ (line 126) | def __init__(self, **options):
class MakoCssLexer (line 132) | class MakoCssLexer(DelegatingLexer):
method __init__ (line 136) | def __init__(self, **options):
function syntax_highlight (line 145) | def syntax_highlight(filename="", language=None):
FILE: 3rd_party/common/site-packages/mako/ext/turbogears.py
class TGPlugin (line 12) | class TGPlugin(object):
method __init__ (line 16) | def __init__(self, extra_vars_func=None, options=None, extension="mak"):
method load_template (line 38) | def load_template(self, templatename, template_string=None):
method render (line 51) | def render(
FILE: 3rd_party/common/site-packages/mako/filters.py
function legacy_html_escape (line 29) | def legacy_html_escape(s):
function xml_escape (line 47) | def xml_escape(string):
function url_escape (line 51) | def url_escape(string):
function legacy_url_escape (line 57) | def legacy_url_escape(string):
function url_unescape (line 62) | def url_unescape(string):
function trim (line 69) | def trim(string):
class Decode (line 73) | class Decode(object):
method __getattr__ (line 74) | def __getattr__(self, key):
function is_ascii_str (line 92) | def is_ascii_str(text):
class XMLEntityEscaper (line 99) | class XMLEntityEscaper(object):
method __init__ (line 100) | def __init__(self, codepoint2name, name2codepoint):
method escape_entities (line 109) | def escape_entities(self, text):
method __escape (line 116) | def __escape(self, m):
method escape (line 125) | def escape(self, text):
method __unescape (line 151) | def __unescape(self, m):
method unescape (line 164) | def unescape(self, text):
function htmlentityreplace_errors (line 179) | def htmlentityreplace_errors(ex):
FILE: 3rd_party/common/site-packages/mako/lexer.py
class Lexer (line 20) | class Lexer(object):
method __init__ (line 21) | def __init__(
method exception_kwargs (line 55) | def exception_kwargs(self):
method match (line 63) | def match(self, regexp, flags=None):
method match_reg (line 77) | def match_reg(self, reg):
method parse_until_text (line 107) | def parse_until_text(self, watch_nesting, *text):
method append_node (line 147) | def append_node(self, nodecls, *args, **kwargs):
method decode_raw_stream (line 196) | def decode_raw_stream(self, text, decode_raw, known_encoding, filename):
method parse (line 242) | def parse(self):
method match_tag_start (line 297) | def match_tag_start(self):
method match_tag_end (line 344) | def match_tag_end(self):
method match_end (line 364) | def match_end(self):
method match_text (line 375) | def match_text(self):
method match_python_block (line 404) | def match_python_block(self):
method match_expression (line 423) | def match_expression(self):
method match_control_line (line 444) | def match_control_line(self):
method match_comment (line 483) | def match_comment(self):
FILE: 3rd_party/common/site-packages/mako/lookup.py
class TemplateCollection (line 22) | class TemplateCollection(object):
method has_template (line 39) | def has_template(self, uri):
method get_template (line 53) | def get_template(self, uri, relativeto=None):
method filename_to_uri (line 69) | def filename_to_uri(self, uri, filename):
method adjust_uri (line 75) | def adjust_uri(self, uri, filename):
class TemplateLookup (line 90) | class TemplateLookup(TemplateCollection):
method __init__ (line 156) | def __init__(
method get_template (line 238) | def get_template(self, uri):
method adjust_uri (line 266) | def adjust_uri(self, uri, relativeto):
method filename_to_uri (line 284) | def filename_to_uri(self, filename):
method _relativeize (line 295) | def _relativeize(self, filename):
method _load (line 308) | def _load(self, filename, uri):
method _check (line 339) | def _check(self, uri, template):
method put_string (line 356) | def put_string(self, uri, text):
method put_template (line 366) | def put_template(self, uri, template):
FILE: 3rd_party/common/site-packages/mako/parsetree.py
class Node (line 18) | class Node(object):
method __init__ (line 22) | def __init__(self, source, lineno, pos, filename):
method exception_kwargs (line 29) | def exception_kwargs(self):
method get_children (line 37) | def get_children(self):
method accept_visitor (line 40) | def accept_visitor(self, visitor):
class TemplateNode (line 49) | class TemplateNode(Node):
method __init__ (line 53) | def __init__(self, filename):
method get_children (line 58) | def get_children(self):
method __repr__ (line 61) | def __repr__(self):
class ControlLine (line 68) | class ControlLine(Node):
method __init__ (line 82) | def __init__(self, keyword, isend, text, **kwargs):
method get_children (line 97) | def get_children(self):
method declared_identifiers (line 100) | def declared_identifiers(self):
method undeclared_identifiers (line 103) | def undeclared_identifiers(self):
method is_ternary (line 106) | def is_ternary(self, keyword):
method __repr__ (line 116) | def __repr__(self):
class Text (line 125) | class Text(Node):
method __init__ (line 129) | def __init__(self, content, **kwargs):
method __repr__ (line 133) | def __repr__(self):
class Code (line 137) | class Code(Node):
method __init__ (line 155) | def __init__(self, text, ismodule, **kwargs):
method declared_identifiers (line 161) | def declared_identifiers(self):
method undeclared_identifiers (line 164) | def undeclared_identifiers(self):
method __repr__ (line 167) | def __repr__(self):
class Comment (line 175) | class Comment(Node):
method __init__ (line 183) | def __init__(self, text, **kwargs):
method __repr__ (line 187) | def __repr__(self):
class Expression (line 191) | class Expression(Node):
method __init__ (line 199) | def __init__(self, text, escapes, **kwargs):
method declared_identifiers (line 206) | def declared_identifiers(self):
method undeclared_identifiers (line 209) | def undeclared_identifiers(self):
method __repr__ (line 217) | def __repr__(self):
class _TagMeta (line 225) | class _TagMeta(type):
method __init__ (line 232) | def __init__(cls, clsname, bases, dict_):
method __call__ (line 237) | def __call__(cls, keyword, attributes, **kwargs):
class Tag (line 257) | class Tag(compat.with_metaclass(_TagMeta, Node)):
method __init__ (line 272) | def __init__(
method is_root (line 314) | def is_root(self):
method get_children (line 317) | def get_children(self):
method _parse_attributes (line 320) | def _parse_attributes(self, expressions, nonexpressions):
method declared_identifiers (line 362) | def declared_identifiers(self):
method undeclared_identifiers (line 365) | def undeclared_identifiers(self):
method __repr__ (line 368) | def __repr__(self):
class IncludeTag (line 378) | class IncludeTag(Tag):
method __init__ (line 381) | def __init__(self, keyword, attributes, **kwargs):
method declared_identifiers (line 394) | def declared_identifiers(self):
method undeclared_identifiers (line 397) | def undeclared_identifiers(self):
class NamespaceTag (line 406) | class NamespaceTag(Tag):
method __init__ (line 409) | def __init__(self, keyword, attributes, **kwargs):
method declared_identifiers (line 432) | def declared_identifiers(self):
class TextTag (line 436) | class TextTag(Tag):
method __init__ (line 439) | def __init__(self, keyword, attributes, **kwargs):
method undeclared_identifiers (line 447) | def undeclared_identifiers(self):
class DefTag (line 453) | class DefTag(Tag):
method __init__ (line 456) | def __init__(self, keyword, attributes, **kwargs):
method funcname (line 487) | def funcname(self):
method get_argument_expressions (line 490) | def get_argument_expressions(self, **kw):
method declared_identifiers (line 493) | def declared_identifiers(self):
method undeclared_identifiers (line 496) | def undeclared_identifiers(self):
class BlockTag (line 516) | class BlockTag(Tag):
method __init__ (line 519) | def __init__(self, keyword, attributes, **kwargs):
method is_anonymous (line 555) | def is_anonymous(self):
method funcname (line 559) | def funcname(self):
method get_argument_expressions (line 562) | def get_argument_expressions(self, **kw):
method declared_identifiers (line 565) | def declared_identifiers(self):
method undeclared_identifiers (line 568) | def undeclared_identifiers(self):
class CallTag (line 576) | class CallTag(Tag):
method __init__ (line 579) | def __init__(self, keyword, attributes, **kwargs):
method declared_identifiers (line 589) | def declared_identifiers(self):
method undeclared_identifiers (line 592) | def undeclared_identifiers(self):
class CallNamespaceTag (line 598) | class CallNamespaceTag(Tag):
method __init__ (line 599) | def __init__(self, namespace, defname, attributes, **kwargs):
method declared_identifiers (line 625) | def declared_identifiers(self):
method undeclared_identifiers (line 628) | def undeclared_identifiers(self):
class InheritTag (line 634) | class InheritTag(Tag):
method __init__ (line 637) | def __init__(self, keyword, attributes, **kwargs):
class PageTag (line 643) | class PageTag(Tag):
method __init__ (line 646) | def __init__(self, keyword, attributes, **kwargs):
method declared_identifiers (line 664) | def declared_identifiers(self):
FILE: 3rd_party/common/site-packages/mako/pygen.py
class PythonPrinter (line 14) | class PythonPrinter(object):
method __init__ (line 15) | def __init__(self, stream):
method _update_lineno (line 46) | def _update_lineno(self, num):
method start_source (line 49) | def start_source(self, lineno):
method write_blanks (line 53) | def write_blanks(self, num):
method write_indented_block (line 57) | def write_indented_block(self, block, starting_lineno=None):
method writelines (line 69) | def writelines(self, *lines):
method writeline (line 74) | def writeline(self, line):
method close (line 146) | def close(self):
method _is_unindentor (line 150) | def _is_unindentor(self, line):
method _indent_line (line 193) | def _indent_line(self, line, stripspace=""):
method _reset_multi_line_flags (line 203) | def _reset_multi_line_flags(self):
method _in_multi_line (line 209) | def _in_multi_line(self, line):
method _flush_adjusted_lines (line 232) | def _flush_adjusted_lines(self):
function adjust_whitespace (line 249) | def adjust_whitespace(text):
FILE: 3rd_party/common/site-packages/mako/pyparser.py
function parse (line 41) | def parse(code, mode="exec", **exception_kwargs):
class FindIdentifiers (line 58) | class FindIdentifiers(_ast_util.NodeVisitor):
method __init__ (line 59) | def __init__(self, listener, **exception_kwargs):
method _add_declared (line 66) | def _add_declared(self, name):
method visit_ClassDef (line 72) | def visit_ClassDef(self, node):
method visit_Assign (line 75) | def visit_Assign(self, node):
method visit_ExceptHandler (line 93) | def visit_ExceptHandler(self, node):
method visit_Lambda (line 101) | def visit_Lambda(self, node, *args):
method visit_FunctionDef (line 104) | def visit_FunctionDef(self, node):
method _expand_tuples (line 108) | def _expand_tuples(self, args):
method _visit_function (line 116) | def _visit_function(self, node, islambda):
method visit_For (line 139) | def visit_For(self, node):
method visit_Name (line 150) | def visit_Name(self, node):
method visit_Import (line 162) | def visit_Import(self, node):
method visit_ImportFrom (line 169) | def visit_ImportFrom(self, node):
class FindTuple (line 185) | class FindTuple(_ast_util.NodeVisitor):
method __init__ (line 186) | def __init__(self, listener, code_factory, **exception_kwargs):
method visit_Tuple (line 191) | def visit_Tuple(self, node):
class ParseFunc (line 206) | class ParseFunc(_ast_util.NodeVisitor):
method __init__ (line 207) | def __init__(self, listener, **exception_kwargs):
method visit_FunctionDef (line 211) | def visit_FunctionDef(self, node):
class ExpressionGenerator (line 236) | class ExpressionGenerator(object):
method __init__ (line 237) | def __init__(self, astnode):
method value (line 241) | def value(self):
FILE: 3rd_party/common/site-packages/mako/runtime.py
class Context (line 19) | class Context(object):
method __init__ (line 29) | def __init__(self, buffer, **data):
method _set_with_template (line 46) | def _set_with_template(self, t):
method lookup (line 56) | def lookup(self):
method kwargs (line 64) | def kwargs(self):
method push_caller (line 85) | def push_caller(self, caller):
method pop_caller (line 91) | def pop_caller(self):
method keys (line 97) | def keys(self):
method __getitem__ (line 102) | def __getitem__(self, key):
method _push_writer (line 108) | def _push_writer(self):
method _pop_buffer_and_writer (line 116) | def _pop_buffer_and_writer(self):
method _push_buffer (line 125) | def _push_buffer(self):
method _pop_buffer (line 130) | def _pop_buffer(self):
method get (line 135) | def get(self, key, default=None):
method write (line 140) | def write(self, string):
method writer (line 146) | def writer(self):
method _copy (line 151) | def _copy(self):
method _locals (line 162) | def _locals(self, d):
method _clean_inheritance_tokens (line 179) | def _clean_inheritance_tokens(self):
class CallerStack (line 191) | class CallerStack(list):
method __init__ (line 192) | def __init__(self):
method __nonzero__ (line 195) | def __nonzero__(self):
method __bool__ (line 198) | def __bool__(self):
method _get_caller (line 201) | def _get_caller(self):
method __getattr__ (line 206) | def __getattr__(self, key):
method _push_frame (line 209) | def _push_frame(self):
method _pop_frame (line 215) | def _pop_frame(self):
class Undefined (line 219) | class Undefined(object):
method __str__ (line 229) | def __str__(self):
method __nonzero__ (line 232) | def __nonzero__(self):
method __bool__ (line 235) | def __bool__(self):
class LoopStack (line 243) | class LoopStack(object):
method __init__ (line 249) | def __init__(self):
method _enter (line 252) | def _enter(self, iterable):
method _exit (line 256) | def _exit(self):
method _top (line 261) | def _top(self):
method _pop (line 267) | def _pop(self):
method _push (line 270) | def _push(self, iterable):
method __getattr__ (line 276) | def __getattr__(self, key):
method __iter__ (line 279) | def __iter__(self):
class LoopContext (line 283) | class LoopContext(object):
method __init__ (line 307) | def __init__(self, iterable):
method __iter__ (line 312) | def __iter__(self):
method __len__ (line 318) | def __len__(self):
method reverse_index (line 322) | def reverse_index(self):
method first (line 326) | def first(self):
method last (line 330) | def last(self):
method even (line 334) | def even(self):
method odd (line 338) | def odd(self):
method cycle (line 341) | def cycle(self, *values):
class _NSAttr (line 349) | class _NSAttr(object):
method __init__ (line 350) | def __init__(self, parent):
method __getattr__ (line 353) | def __getattr__(self, key):
class Namespace (line 363) | class Namespace(object):
method __init__ (line 380) | def __init__(
method attr (line 446) | def attr(self):
method get_namespace (line 462) | def get_namespace(self, uri):
method get_template (line 495) | def get_template(self, uri):
method get_cached (line 504) | def get_cached(self, key, **kwargs):
method cache (line 519) | def cache(self):
method include_file (line 527) | def include_file(self, uri, **kwargs):
method _populate (line 532) | def _populate(self, d, l):
method _get_star (line 540) | def _get_star(self):
method __getattr__ (line 545) | def __getattr__(self, key):
class TemplateNamespace (line 558) | class TemplateNamespace(Namespace):
method __init__ (line 562) | def __init__(
method module (line 594) | def module(self):
method filename (line 605) | def filename(self):
method uri (line 612) | def uri(self):
method _get_star (line 622) | def _get_star(self):
method __getattr__ (line 634) | def __getattr__(self, key):
class ModuleNamespace (line 651) | class ModuleNamespace(Namespace):
method __init__ (line 655) | def __init__(
method filename (line 677) | def filename(self):
method _get_star (line 683) | def _get_star(self):
method __getattr__ (line 693) | def __getattr__(self, key):
function supports_caller (line 709) | def supports_caller(func):
function capture (line 727) | def capture(context, callable_, *args, **kwargs):
function _decorate_toplevel (line 748) | def _decorate_toplevel(fn):
function _decorate_inline (line 766) | def _decorate_inline(context, fn):
function _include_file (line 778) | def _include_file(context, uri, calling_uri, **kwargs):
function _inherit_from (line 798) | def _inherit_from(context, uri, calling_uri):
function _lookup_template (line 830) | def _lookup_template(context, uri, relativeto):
function _populate_self_namespace (line 844) | def _populate_self_namespace(context, template, self_ns=None):
function _render (line 860) | def _render(template, callable_, args, data, as_unicode=False):
function _kwargs_for_callable (line 888) | def _kwargs_for_callable(callable_, data):
function _kwargs_for_include (line 903) | def _kwargs_for_include(callable_, data, **kwargs):
function _render_context (line 912) | def _render_context(tmpl, callable_, context, *args, **kwargs):
function _exec_template (line 927) | def _exec_template(callable_, context, args=None, kwargs=None):
function _render_error (line 950) | def _render_error(template, context, error):
FILE: 3rd_party/common/site-packages/mako/template.py
class Template (line 28) | class Template(object):
method __init__ (line 239) | def __init__(
method reserved_names (line 373) | def reserved_names(self):
method _setup_cache_args (line 379) | def _setup_cache_args(
method _compile_from_file (line 403) | def _compile_from_file(self, path, filename):
method source (line 434) | def source(self):
method code (line 440) | def code(self):
method cache (line 446) | def cache(self):
method cache_dir (line 450) | def cache_dir(self):
method cache_url (line 454) | def cache_url(self):
method cache_type (line 458) | def cache_type(self):
method render (line 461) | def render(self, *args, **data):
method render_unicode (line 475) | def render_unicode(self, *args, **data):
method render_context (line 482) | def render_context(self, context, *args, **kwargs):
method has_def (line 492) | def has_def(self, name):
method get_def (line 495) | def get_def(self, name):
method list_defs (line 500) | def list_defs(self):
method _get_def_callable (line 508) | def _get_def_callable(self, name):
method last_modified (line 512) | def last_modified(self):
class ModuleTemplate (line 516) | class ModuleTemplate(Template):
method __init__ (line 534) | def __init__(
class DefTemplate (line 603) | class DefTemplate(Template):
method __init__ (line 608) | def __init__(self, parent, callable_):
method get_def (line 621) | def get_def(self, name):
class ModuleInfo (line 625) | class ModuleInfo(object):
method __init__ (line 635) | def __init__(
method get_module_source_metadata (line 656) | def get_module_source_metadata(cls, module_source, full_line_map=False):
method code (line 676) | def code(self):
method source (line 683) | def source(self):
function _compile (line 701) | def _compile(template, text, filename, generate_magic_comment):
function _compile_text (line 728) | def _compile_text(template, text, filename):
function _compile_module_file (line 748) | def _compile_module_file(template, text, filename, outputpath, module_wr...
function _get_module_info_from_callable (line 769) | def _get_module_info_from_callable(callable_):
function _get_module_info (line 776) | def _get_module_info(filename):
FILE: 3rd_party/common/site-packages/mako/util.py
function update_wrapper (line 19) | def update_wrapper(decorated, fn):
class PluginLoader (line 25) | class PluginLoader(object):
method __init__ (line 26) | def __init__(self, group):
method load (line 30) | def load(self, name):
method register (line 46) | def register(self, name, modulepath, objname):
function verify_directory (line 56) | def verify_directory(dir_):
function to_list (line 70) | def to_list(x, default=None):
class memoized_property (line 79) | class memoized_property(object):
method __init__ (line 83) | def __init__(self, fget, doc=None):
method __get__ (line 88) | def __get__(self, obj, cls):
class memoized_instancemethod (line 95) | class memoized_instancemethod(object):
method __init__ (line 105) | def __init__(self, fget, doc=None):
method __get__ (line 110) | def __get__(self, obj, cls):
class SetLikeDict (line 130) | class SetLikeDict(dict):
method union (line 134) | def union(self, other):
class FastEncodingBuffer (line 143) | class FastEncodingBuffer(object):
method __init__ (line 148) | def __init__(self, encoding=None, errors="strict", as_unicode=False):
method truncate (line 159) | def truncate(self):
method getvalue (line 163) | def getvalue(self):
class LRUCache (line 172) | class LRUCache(dict):
class _Item (line 182) | class _Item(object):
method __init__ (line 183) | def __init__(self, key, value):
method __repr__ (line 188) | def __repr__(self):
method __init__ (line 191) | def __init__(self, capacity, threshold=0.5):
method __getitem__ (line 195) | def __getitem__(self, key):
method values (line 200) | def values(self):
method setdefault (line 203) | def setdefault(self, key, value):
method __setitem__ (line 210) | def __setitem__(self, key, value):
method _manage_size (line 219) | def _manage_size(self):
function parse_encoding (line 241) | def parse_encoding(fp):
function sorted_dict_repr (line 290) | def sorted_dict_repr(d):
function restore__ast (line 301) | def restore__ast(_ast):
function read_file (line 382) | def read_file(path, mode="rb"):
function read_python_file (line 391) | def read_python_file(path):
FILE: 3rd_party/common/site-packages/more_itertools/more.py
function chunked (line 87) | def chunked(iterable, n):
function first (line 111) | def first(iterable, default=_marker):
class peekable (line 141) | class peekable(object):
method __init__ (line 199) | def __init__(self, iterable):
method __iter__ (line 203) | def __iter__(self):
method __bool__ (line 206) | def __bool__(self):
method __nonzero__ (line 213) | def __nonzero__(self):
method peek (line 217) | def peek(self, default=_marker):
method prepend (line 233) | def prepend(self, *items):
method __next__ (line 264) | def __next__(self):
method _get_slice (line 272) | def _get_slice(self, index):
method __getitem__ (line 298) | def __getitem__(self, index):
function _collate (line 311) | def _collate(*iterables, **kwargs):
function collate (line 328) | def collate(*iterables, **kwargs):
function consumer (line 375) | def consumer(func):
function ilen (line 405) | def ilen(iterable):
function iterate (line 418) | def iterate(func, start):
function with_iter (line 431) | def with_iter(context_manager):
function one (line 447) | def one(iterable, too_short=None, too_long=None):
function distinct_permutations (line 508) | def distinct_permutations(iterable):
function intersperse (line 554) | def intersperse(e, iterable, n=1):
function unique_to_each (line 580) | def unique_to_each(*iterables):
function windowed (line 613) | def windowed(seq, n, fillvalue=None, step=1):
class bucket (line 665) | class bucket(object):
method __init__ (line 698) | def __init__(self, iterable, key, validator=None):
method __contains__ (line 704) | def __contains__(self, value):
method _get_values (line 717) | def _get_values(self, value):
method __getitem__ (line 740) | def __getitem__(self, value):
function spy (line 747) | def spy(iterable, n=1):
function interleave (line 790) | def interleave(*iterables):
function interleave_longest (line 804) | def interleave_longest(*iterables):
function collapse (line 820) | def collapse(iterable, base_type=None, levels=None):
function side_effect (line 867) | def side_effect(func, iterable, chunk_size=None, before=None, after=None):
function sliced (line 929) | def sliced(seq, n):
function split_at (line 948) | def split_at(iterable, pred):
function split_before (line 969) | def split_before(iterable, pred):
function split_after (line 989) | def split_after(iterable, pred):
function padded (line 1010) | def padded(iterable, fillvalue=None, n=None, next_multiple=False):
function distribute (line 1043) | def distribute(n, iterable):
function stagger (line 1078) | def stagger(iterable, offsets=(-1, 0, 1), longest=False, fillvalue=None):
function zip_offset (line 1106) | def zip_offset(*iterables, **kwargs):
function sort_together (line 1149) | def sort_together(iterables, key_list=(0,), reverse=False):
function divide (line 1182) | def divide(n, iterable):
function always_iterable (line 1226) | def always_iterable(obj, base_type=(text_type, binary_type)):
function adjacent (line 1279) | def adjacent(predicate, iterable, distance=1):
function groupby_transform (line 1318) | def groupby_transform(iterable, keyfunc=None, valuefunc=None):
function numeric_range (line 1352) | def numeric_range(*args):
function count_cycle (line 1413) | def count_cycle(iterable, n=None):
function locate (line 1429) | def locate(iterable, pred=bool):
function lstrip (line 1471) | def lstrip(iterable, pred):
function rstrip (line 1489) | def rstrip(iterable, pred):
function strip (line 1515) | def strip(iterable, pred):
function islice_extended (line 1532) | def islice_extended(iterable, *args):
function always_reversible (line 1650) | def always_reversible(iterable):
function consecutive_groups (line 1668) | def consecutive_groups(iterable, ordering=lambda x: x):
function difference (line 1705) | def difference(iterable, func=sub):
class SequenceView (line 1743) | class SequenceView(Sequence):
method __init__ (line 1772) | def __init__(self, target):
method __getitem__ (line 1777) | def __getitem__(self, index):
method __len__ (line 1780) | def __len__(self):
method __repr__ (line 1783) | def __repr__(self):
class seekable (line 1787) | class seekable(object):
method __init__ (line 1839) | def __init__(self, iterable):
method __iter__ (line 1844) | def __iter__(self):
method __next__ (line 1847) | def __next__(self):
method elements (line 1863) | def elements(self):
method seek (line 1866) | def seek(self, index):
class run_length (line 1873) | class run_length(object):
method encode (line 1894) | def encode(iterable):
method decode (line 1898) | def decode(iterable):
function exactly_n (line 1902) | def exactly_n(iterable, n, predicate=bool):
function circular_shifts (line 1920) | def circular_shifts(iterable):
function make_decorator (line 1930) | def make_decorator(wrapping_func, result_index=0):
FILE: 3rd_party/common/site-packages/more_itertools/recipes.py
function accumulate (line 51) | def accumulate(iterable, func=operator.add):
function take (line 81) | def take(n, iterable):
function tabulate (line 96) | def tabulate(function, start=0):
function tail (line 114) | def tail(n, iterable):
function consume (line 125) | def consume(iterator, n=None):
function nth (line 165) | def nth(iterable, n, default=None):
function all_equal (line 178) | def all_equal(iterable):
function quantify (line 192) | def quantify(iterable, pred=bool):
function padnone (line 202) | def padnone(iterable):
function ncycles (line 216) | def ncycles(iterable, n):
function dotproduct (line 226) | def dotproduct(vec1, vec2):
function flatten (line 236) | def flatten(listOfLists):
function repeatfunc (line 248) | def repeatfunc(func, times=None, *args):
function pairwise (line 275) | def pairwise(iterable):
function grouper (line 287) | def grouper(n, iterable, fillvalue=None):
function roundrobin (line 298) | def roundrobin(*iterables):
function partition (line 324) | def partition(pred, iterable):
function powerset (line 342) | def powerset(iterable):
function unique_everseen (line 353) | def unique_everseen(iterable, key=None):
function unique_justseen (line 393) | def unique_justseen(iterable, key=None):
function iter_except (line 405) | def iter_except(func, exception, first=None):
function first_true (line 426) | def first_true(iterable, default=False, pred=None):
function random_product (line 446) | def random_product(*args, **kwds):
function random_permutation (line 466) | def random_permutation(iterable, r=None):
function random_combination (line 484) | def random_combination(iterable, r):
function random_combination_with_replacement (line 500) | def random_combination_with_replacement(iterable, r):
function nth_combination (line 517) | def nth_combination(iterable, r, index):
FILE: 3rd_party/common/site-packages/more_itertools/tests/test_more.py
function load_tests (line 26) | def load_tests(loader, tests, ignore):
class CollateTests (line 32) | class CollateTests(TestCase):
method test_default (line 36) | def test_default(self):
method test_key (line 44) | def test_key(self):
method test_empty (line 53) | def test_empty(self):
method test_one (line 57) | def test_one(self):
method test_reverse (line 61) | def test_reverse(self):
method test_alias (line 71) | def test_alias(self):
class ChunkedTests (line 76) | class ChunkedTests(TestCase):
method test_even (line 79) | def test_even(self):
method test_odd (line 85) | def test_odd(self):
class FirstTests (line 95) | class FirstTests(TestCase):
method test_many (line 98) | def test_many(self):
method test_one (line 104) | def test_one(self):
method test_empty_stop_iteration (line 108) | def test_empty_stop_iteration(self):
method test_default (line 112) | def test_default(self):
class PeekableTests (line 117) | class PeekableTests(TestCase):
method test_peek_default (line 122) | def test_peek_default(self):
method test_truthiness (line 127) | def test_truthiness(self):
method test_simple_peeking (line 138) | def test_simple_peeking(self):
method test_indexing (line 148) | def test_indexing(self):
method test_slicing (line 174) | def test_slicing(self):
method test_slicing_reset (line 197) | def test_slicing_reset(self):
method test_slicing_error (line 211) | def test_slicing_error(self):
method test_passthrough (line 227) | def test_passthrough(self):
method test_prepend (line 237) | def test_prepend(self):
method test_multi_prepend (line 257) | def test_multi_prepend(self):
method test_empty (line 267) | def test_empty(self):
method test_prepend_truthiness (line 275) | def test_prepend_truthiness(self):
method test_multi_prepend_peek (line 289) | def test_multi_prepend_peek(self):
method test_prepend_after_stop (line 304) | def test_prepend_after_stop(self):
method test_prepend_slicing (line 313) | def test_prepend_slicing(self):
method test_prepend_indexing (line 331) | def test_prepend_indexing(self):
method test_prepend_iterable (line 350) | def test_prepend_iterable(self):
method test_prepend_many (line 360) | def test_prepend_many(self):
method test_prepend_reversed (line 370) | def test_prepend_reversed(self):
class ConsumerTests (line 379) | class ConsumerTests(TestCase):
method test_consumer (line 382) | def test_consumer(self):
class DistinctPermutationsTests (line 392) | class DistinctPermutationsTests(TestCase):
method test_distinct_permutations (line 393) | def test_distinct_permutations(self):
class IlenTests (line 404) | class IlenTests(TestCase):
method test_ilen (line 405) | def test_ilen(self):
class WithIterTests (line 419) | class WithIterTests(TestCase):
method test_with_iter (line 420) | def test_with_iter(self):
class OneTests (line 430) | class OneTests(TestCase):
method test_basic (line 431) | def test_basic(self):
method test_too_short (line 435) | def test_too_short(self):
method test_too_long (line 440) | def test_too_long(self):
class IntersperseTest (line 449) | class IntersperseTest(TestCase):
method test_even (line 452) | def test_even(self):
method test_odd (line 458) | def test_odd(self):
method test_nested (line 464) | def test_nested(self):
method test_not_iterable (line 471) | def test_not_iterable(self):
method test_n (line 474) | def test_n(self):
method test_n_zero (line 489) | def test_n_zero(self):
class UniqueToEachTests (line 495) | class UniqueToEachTests(TestCase):
method test_all_unique (line 498) | def test_all_unique(self):
method test_duplicates (line 504) | def test_duplicates(self):
method test_mixed (line 512) | def test_mixed(self):
class WindowedTests (line 519) | class WindowedTests(TestCase):
method test_basic (line 522) | def test_basic(self):
method test_large_size (line 527) | def test_large_size(self):
method test_fillvalue (line 536) | def test_fillvalue(self):
method test_zero (line 549) | def test_zero(self):
method test_negative (line 555) | def test_negative(self):
method test_step (line 560) | def test_step(self):
class BucketTests (line 580) | class BucketTests(TestCase):
method test_basic (line 583) | def test_basic(self):
method test_in (line 596) | def test_in(self):
method test_validator (line 608) | def test_validator(self):
class SpyTests (line 619) | class SpyTests(TestCase):
method test_basic (line 622) | def test_basic(self):
method test_unpacking (line 630) | def test_unpacking(self):
method test_too_many (line 640) | def test_too_many(self):
method test_zero (line 646) | def test_zero(self):
class InterleaveTests (line 653) | class InterleaveTests(TestCase):
method test_even (line 654) | def test_even(self):
method test_short (line 659) | def test_short(self):
method test_mixed_types (line 664) | def test_mixed_types(self):
class InterleaveLongestTests (line 673) | class InterleaveLongestTests(TestCase):
method test_even (line 674) | def test_even(self):
method test_short (line 679) | def test_short(self):
method test_mixed_types (line 684) | def test_mixed_types(self):
class TestCollapse (line 693) | class TestCollapse(TestCase):
method test_collapse (line 696) | def test_collapse(self):
method test_collapse_to_string (line 700) | def test_collapse_to_string(self):
method test_collapse_flatten (line 704) | def test_collapse_flatten(self):
method test_collapse_to_level (line 708) | def test_collapse_to_level(self):
method test_collapse_to_list (line 716) | def test_collapse_to_list(self):
class SideEffectTests (line 723) | class SideEffectTests(TestCase):
method test_individual (line 726) | def test_individual(self):
method test_chunked (line 737) | def test_chunked(self):
method test_before_after (line 748) | def test_before_after(self):
method test_before_fails (line 775) | def test_before_fails(self):
class SlicedTests (line 794) | class SlicedTests(TestCase):
method test_even (line 797) | def test_even(self):
method test_odd (line 802) | def test_odd(self):
method test_not_sliceable (line 807) | def test_not_sliceable(self):
class SplitAtTests (line 814) | class SplitAtTests(TestCase):
method comp_with_str_split (line 817) | def comp_with_str_split(self, str_to_split, delim):
method test_seperators (line 823) | def test_seperators(self):
class SplitBeforeTest (line 829) | class SplitBeforeTest(TestCase):
method test_starts_with_sep (line 832) | def test_starts_with_sep(self):
method test_ends_with_sep (line 837) | def test_ends_with_sep(self):
method test_no_sep (line 842) | def test_no_sep(self):
class SplitAfterTest (line 848) | class SplitAfterTest(TestCase):
method test_starts_with_sep (line 851) | def test_starts_with_sep(self):
method test_ends_with_sep (line 856) | def test_ends_with_sep(self):
method test_no_sep (line 861) | def test_no_sep(self):
class PaddedTest (line 867) | class PaddedTest(TestCase):
method test_no_n (line 870) | def test_no_n(self):
method test_invalid_n (line 881) | def test_invalid_n(self):
method test_valid_n (line 885) | def test_valid_n(self):
method test_next_multiple (line 902) | def test_next_multiple(self):
class DistributeTest (line 934) | class DistributeTest(TestCase):
method test_invalid_n (line 937) | def test_invalid_n(self):
method test_basic (line 941) | def test_basic(self):
method test_large_n (line 954) | def test_large_n(self):
class StaggerTest (line 962) | class StaggerTest(TestCase):
method test_default (line 965) | def test_default(self):
method test_offsets (line 971) | def test_offsets(self):
method test_longest (line 981) | def test_longest(self):
class ZipOffsetTest (line 997) | class ZipOffsetTest(TestCase):
method test_shortest (line 1000) | def test_shortest(self):
method test_longest (line 1010) | def test_longest(self):
method test_mismatch (line 1028) | def test_mismatch(self):
class SortTogetherTest (line 1037) | class SortTogetherTest(TestCase):
method test_key_list (line 1040) | def test_key_list(self):
method test_invalid_key_list (line 1084) | def test_invalid_key_list(self):
method test_reverse (line 1096) | def test_reverse(self):
method test_uneven_iterables (line 1111) | def test_uneven_iterables(self):
class DivideTest (line 1127) | class DivideTest(TestCase):
method test_invalid_n (line 1130) | def test_invalid_n(self):
method test_basic (line 1134) | def test_basic(self):
method test_large_n (line 1147) | def test_large_n(self):
class TestAlwaysIterable (line 1155) | class TestAlwaysIterable(TestCase):
method test_single (line 1157) | def test_single(self):
method test_strings (line 1160) | def test_strings(self):
method test_base_type (line 1166) | def test_base_type(self):
method test_iterables (line 1185) | def test_iterables(self):
method test_none (line 1195) | def test_none(self):
method test_generator (line 1198) | def test_generator(self):
class AdjacentTests (line 1206) | class AdjacentTests(TestCase):
method test_typical (line 1207) | def test_typical(self):
method test_empty_iterable (line 1213) | def test_empty_iterable(self):
method test_length_one (line 1218) | def test_length_one(self):
method test_consecutive_true (line 1227) | def test_consecutive_true(self):
method test_distance (line 1235) | def test_distance(self):
method test_large_distance (line 1246) | def test_large_distance(self):
method test_zero_distance (line 1257) | def test_zero_distance(self):
method test_negative_distance (line 1265) | def test_negative_distance(self):
method test_grouping (line 1275) | def test_grouping(self):
method test_call_once (line 1288) | def test_call_once(self):
class GroupByTransformTests (line 1303) | class GroupByTransformTests(TestCase):
method assertAllGroupsEqual (line 1304) | def assertAllGroupsEqual(self, groupby1, groupby2):
method test_default_funcs (line 1314) | def test_default_funcs(self):
method test_valuefunc (line 1321) | def test_valuefunc(self):
method test_no_valuefunc (line 1348) | def test_no_valuefunc(self):
class NumericRangeTests (line 1363) | class NumericRangeTests(TestCase):
method test_basic (line 1364) | def test_basic(self):
method test_arg_count (line 1391) | def test_arg_count(self):
method test_zero_step (line 1397) | def test_zero_step(self):
class CountCycleTests (line 1403) | class CountCycleTests(TestCase):
method test_basic (line 1404) | def test_basic(self):
method test_empty (line 1416) | def test_empty(self):
method test_negative (line 1420) | def test_negative(self):
class LocateTests (line 1424) | class LocateTests(TestCase):
method test_default_pred (line 1425) | def test_default_pred(self):
method test_no_matches (line 1431) | def test_no_matches(self):
method test_custom_pred (line 1437) | def test_custom_pred(self):
class StripFunctionTests (line 1445) | class StripFunctionTests(TestCase):
method test_hashable (line 1446) | def test_hashable(self):
method test_not_hashable (line 1454) | def test_not_hashable(self):
method test_math (line 1464) | def test_math(self):
class IsliceExtendedTests (line 1473) | class IsliceExtendedTests(TestCase):
method test_all (line 1474) | def test_all(self):
method test_zero_step (line 1487) | def test_zero_step(self):
class ConsecutiveGroupsTest (line 1492) | class ConsecutiveGroupsTest(TestCase):
method test_numbers (line 1493) | def test_numbers(self):
method test_custom_ordering (line 1499) | def test_custom_ordering(self):
method test_exotic_ordering (line 1506) | def test_exotic_ordering(self):
class DifferenceTest (line 1525) | class DifferenceTest(TestCase):
method test_normal (line 1526) | def test_normal(self):
method test_custom (line 1532) | def test_custom(self):
method test_roundtrip (line 1538) | def test_roundtrip(self):
method test_one (line 1544) | def test_one(self):
method test_empty (line 1547) | def test_empty(self):
class SeekableTest (line 1551) | class SeekableTest(TestCase):
method test_exhaustion_reset (line 1552) | def test_exhaustion_reset(self):
method test_partial_reset (line 1562) | def test_partial_reset(self):
method test_forward (line 1571) | def test_forward(self):
method test_past_end (line 1583) | def test_past_end(self):
method test_elements (line 1595) | def test_elements(self):
class SequenceViewTests (line 1611) | class SequenceViewTests(TestCase):
method test_init (line 1612) | def test_init(self):
method test_update (line 1617) | def test_update(self):
method test_indexing (line 1627) | def test_indexing(self):
method test_slicing (line 1633) | def test_slicing(self):
method test_abc_methods (line 1644) | def test_abc_methods(self):
class RunLengthTest (line 1666) | class RunLengthTest(TestCase):
method test_encode (line 1667) | def test_encode(self):
method test_decode (line 1673) | def test_decode(self):
class ExactlyNTests (line 1680) | class ExactlyNTests(TestCase):
method test_true (line 1683) | def test_true(self):
method test_false (line 1690) | def test_false(self):
method test_empty (line 1698) | def test_empty(self):
class AlwaysReversibleTests (line 1704) | class AlwaysReversibleTests(TestCase):
method test_regular_reversed (line 1707) | def test_regular_reversed(self):
method test_nonseq_reversed (line 1715) | def test_nonseq_reversed(self):
class CircularShiftsTests (line 1728) | class CircularShiftsTests(TestCase):
method test_empty (line 1729) | def test_empty(self):
method test_simple_circular_shifts (line 1733) | def test_simple_circular_shifts(self):
method test_duplicates (line 1740) | def test_duplicates(self):
class MakeDecoratorTests (line 1748) | class MakeDecoratorTests(TestCase):
method test_basic (line 1749) | def test_basic(self):
method test_result_index (line 1764) | def test_result_index(self):
method test_wrap_class (line 1783) | def test_wrap_class(self):
FILE: 3rd_party/common/site-packages/more_itertools/tests/test_recipes.py
function load_tests (line 10) | def load_tests(loader, tests, ignore):
class AccumulateTests (line 16) | class AccumulateTests(TestCase):
method test_empty (line 19) | def test_empty(self):
method test_default (line 23) | def test_default(self):
method test_bogus_function (line 27) | def test_bogus_function(self):
method test_custom_function (line 32) | def test_custom_function(self):
class TakeTests (line 39) | class TakeTests(TestCase):
method test_simple_take (line 42) | def test_simple_take(self):
method test_null_take (line 47) | def test_null_take(self):
method test_negative_take (line 52) | def test_negative_take(self):
method test_take_too_much (line 56) | def test_take_too_much(self):
class TabulateTests (line 65) | class TabulateTests(TestCase):
method test_simple_tabulate (line 68) | def test_simple_tabulate(self):
method test_count (line 74) | def test_count(self):
class TailTests (line 81) | class TailTests(TestCase):
method test_greater (line 84) | def test_greater(self):
method test_equal (line 88) | def test_equal(self):
method test_less (line 94) | def test_less(self):
class ConsumeTests (line 101) | class ConsumeTests(TestCase):
method test_sanity (line 104) | def test_sanity(self):
method test_null_consume (line 110) | def test_null_consume(self):
method test_negative_consume (line 116) | def test_negative_consume(self):
method test_total_consume (line 121) | def test_total_consume(self):
class NthTests (line 128) | class NthTests(TestCase):
method test_basic (line 131) | def test_basic(self):
method test_default (line 137) | def test_default(self):
method test_negative_item_raises (line 142) | def test_negative_item_raises(self):
class AllEqualTests (line 147) | class AllEqualTests(TestCase):
method test_true (line 150) | def test_true(self):
method test_false (line 155) | def test_false(self):
method test_tricky (line 160) | def test_tricky(self):
method test_empty (line 165) | def test_empty(self):
method test_one (line 170) | def test_one(self):
class QuantifyTests (line 176) | class QuantifyTests(TestCase):
method test_happy_path (line 179) | def test_happy_path(self):
method test_custom_predicate (line 184) | def test_custom_predicate(self):
class PadnoneTests (line 190) | class PadnoneTests(TestCase):
method test_happy_path (line 193) | def test_happy_path(self):
class NcyclesTests (line 200) | class NcyclesTests(TestCase):
method test_happy_path (line 203) | def test_happy_path(self):
method test_null_case (line 212) | def test_null_case(self):
method test_pathalogical_case (line 217) | def test_pathalogical_case(self):
class DotproductTests (line 223) | class DotproductTests(TestCase):
method test_happy_path (line 226) | def test_happy_path(self):
class FlattenTests (line 231) | class FlattenTests(TestCase):
method test_basic_usage (line 234) | def test_basic_usage(self):
method test_single_level (line 239) | def test_single_level(self):
class RepeatfuncTests (line 245) | class RepeatfuncTests(TestCase):
method test_simple_repeat (line 248) | def test_simple_repeat(self):
method test_finite_repeat (line 253) | def test_finite_repeat(self):
method test_added_arguments (line 258) | def test_added_arguments(self):
method test_null_times (line 263) | def test_null_times(self):
class PairwiseTests (line 269) | class PairwiseTests(TestCase):
method test_base_case (line 272) | def test_base_case(self):
method test_short_case (line 277) | def test_short_case(self):
class GrouperTests (line 283) | class GrouperTests(TestCase):
method test_even (line 286) | def test_even(self):
method test_odd (line 295) | def test_odd(self):
method test_fill_value (line 304) | def test_fill_value(self):
class RoundrobinTests (line 312) | class RoundrobinTests(TestCase):
method test_even_groups (line 315) | def test_even_groups(self):
method test_uneven_groups (line 322) | def test_uneven_groups(self):
class PartitionTests (line 330) | class PartitionTests(TestCase):
method test_bool (line 333) | def test_bool(self):
method test_arbitrary (line 339) | def test_arbitrary(self):
class PowersetTests (line 346) | class PowersetTests(TestCase):
method test_combinatorics (line 349) | def test_combinatorics(self):
class UniqueEverseenTests (line 358) | class UniqueEverseenTests(TestCase):
method test_everseen (line 361) | def test_everseen(self):
method test_custom_key (line 369) | def test_custom_key(self):
method test_unhashable (line 374) | def test_unhashable(self):
method test_unhashable_key (line 380) | def test_unhashable_key(self):
class UniqueJustseenTests (line 387) | class UniqueJustseenTests(TestCase):
method test_justseen (line 390) | def test_justseen(self):
method test_custom_key (line 395) | def test_custom_key(self):
class IterExceptTests (line 401) | class IterExceptTests(TestCase):
method test_exact_exception (line 404) | def test_exact_exception(self):
method test_generic_exception (line 410) | def test_generic_exception(self):
method test_uncaught_exception_is_raised (line 416) | def test_uncaught_exception_is_raised(self):
method test_first (line 422) | def test_first(self):
class FirstTrueTests (line 430) | class FirstTrueTests(TestCase):
method test_something_true (line 433) | def test_something_true(self):
method test_nothing_true (line 437) | def test_nothing_true(self):
method test_default (line 441) | def test_default(self):
method test_pred (line 445) | def test_pred(self):
class RandomProductTests (line 452) | class RandomProductTests(TestCase):
method test_simple_lists (line 460) | def test_simple_lists(self):
method test_list_with_repeat (line 479) | def test_list_with_repeat(self):
class RandomPermutationTests (line 495) | class RandomPermutationTests(TestCase):
method test_full_permutation (line 498) | def test_full_permutation(self):
method test_partial_permutation (line 511) | def test_partial_permutation(self):
class RandomCombinationTests (line 534) | class RandomCombinationTests(TestCase):
method test_psuedorandomness (line 537) | def test_psuedorandomness(self):
method test_no_replacement (line 547) | def test_no_replacement(self):
class RandomCombinationWithReplacementTests (line 558) | class RandomCombinationWithReplacementTests(TestCase):
method test_replacement (line 561) | def test_replacement(self):
method test_pseudorandomness (line 569) | def test_pseudorandomness(self):
class NthCombinationTests (line 580) | class NthCombinationTests(TestCase):
method test_basic (line 581) | def test_basic(self):
method test_long (line 588) | def test_long(self):
FILE: 3rd_party/common/site-packages/tzlocal_olson/darwin.py
function _get_localzone (line 9) | def _get_localzone():
function get_localzone (line 25) | def get_localzone():
function reload_localzone (line 33) | def reload_localzone():
FILE: 3rd_party/common/site-packages/tzlocal_olson/tests.py
class TzLocalTests (line 8) | class TzLocalTests(unittest.TestCase):
method setUp (line 9) | def setUp(self):
method test_env (line 13) | def test_env(self):
method test_timezone (line 33) | def test_timezone(self):
method test_zone_setting (line 39) | def test_zone_setting(self):
method test_timezone_setting (line 45) | def test_timezone_setting(self):
method test_symlink_localtime (line 51) | def test_symlink_localtime(self):
method test_only_localtime (line 57) | def test_only_localtime(self):
class TzWin32Tests (line 67) | class TzWin32Tests(unittest.TestCase):
method test_win32 (line 69) | def test_win32(self):
FILE: 3rd_party/common/site-packages/tzlocal_olson/unix.py
function _tz_from_env (line 8) | def _tz_from_env(tzenv):
function _get_localzone (line 27) | def _get_localzone(_root='/'):
function get_localzone (line 118) | def get_localzone():
function reload_localzone (line 125) | def reload_localzone():
FILE: 3rd_party/common/site-packages/tzlocal_olson/win32.py
function valuestodict (line 11) | def valuestodict(key):
function get_localzone_name (line 20) | def get_localzone_name():
function get_localzone (line 83) | def get_localzone():
function reload_localzone (line 90) | def reload_localzone():
FILE: 3rd_party/python2/site-packages/cheroot/_compat.py
function ntob (line 8) | def ntob(n, encoding='ISO-8859-1'):
function ntou (line 14) | def ntou(n, encoding='ISO-8859-1'):
function bton (line 20) | def bton(b, encoding='ISO-8859-1'):
function ntob (line 25) | def ntob(n, encoding='ISO-8859-1'):
function ntou (line 33) | def ntou(n, encoding='ISO-8859-1'):
function bton (line 50) | def bton(b, encoding='ISO-8859-1'):
function assert_native (line 55) | def assert_native(n):
FILE: 3rd_party/python2/site-packages/cheroot/errors.py
class MaxSizeExceeded (line 7) | class MaxSizeExceeded(Exception):
class NoSSLError (line 14) | class NoSSLError(Exception):
class FatalSSLAlert (line 18) | class FatalSSLAlert(Exception):
function plat_specific_errors (line 22) | def plat_specific_errors(*errnames):
FILE: 3rd_party/python2/site-packages/cheroot/makefile.py
class BufferedWriter (line 12) | class BufferedWriter(io.BufferedWriter):
method write (line 15) | def write(self, b):
method _flush_unlocked (line 26) | def _flush_unlocked(self):
function MakeFile_PY3 (line 38) | def MakeFile_PY3(sock, mode='r', bufsize=io.DEFAULT_BUFFER_SIZE):
class MakeFile_PY2 (line 46) | class MakeFile_PY2(getattr(socket, '_fileobject', object)):
method __init__ (line 49) | def __init__(self, *args, **kwargs):
method write (line 55) | def write(self, data):
method send (line 65) | def send(self, data):
method flush (line 71) | def flush(self):
method recv (line 78) | def recv(self, size):
class FauxSocket (line 93) | class FauxSocket(object):
method _reuse (line 96) | def _reuse(self):
method read (line 106) | def read(self, size=-1):
method readline (line 172) | def readline(self, size=-1):
method read (line 263) | def read(self, size=-1):
method readline (line 306) | def readline(self, size=-1):
FILE: 3rd_party/python2/site-packages/cheroot/server.py
class HeaderReader (line 109) | class HeaderReader(object):
method __call__ (line 115) | def __call__(self, rfile, hdict=None):
method _allow_header (line 167) | def _allow_header(self, key_name):
method _transform_key (line 170) | def _transform_key(self, key_name):
class DropUnderscoreHeaderReader (line 175) | class DropUnderscoreHeaderReader(HeaderReader):
method _allow_header (line 178) | def _allow_header(self, key_name):
class SizeCheckWrapper (line 183) | class SizeCheckWrapper(object):
method __init__ (line 186) | def __init__(self, rfile, maxlen):
method _check_length (line 197) | def _check_length(self):
method read (line 201) | def read(self, size=None):
method readline (line 215) | def readline(self, size=None):
method readlines (line 242) | def readlines(self, sizehint=0):
method close (line 263) | def close(self):
method __iter__ (line 267) | def __iter__(self):
method __next__ (line 271) | def __next__(self):
method next (line 278) | def next(self):
class KnownLengthRFile (line 286) | class KnownLengthRFile(object):
method __init__ (line 289) | def __init__(self, rfile, content_length):
method read (line 299) | def read(self, size=None):
method readline (line 319) | def readline(self, size=None):
method readlines (line 339) | def readlines(self, sizehint=0):
method close (line 360) | def close(self):
method __iter__ (line 364) | def __iter__(self):
method __next__ (line 368) | def __next__(self):
class ChunkedRFile (line 375) | class ChunkedRFile(object):
method __init__ (line 383) | def __init__(self, rfile, maxlen, bufsize=8192):
method _fetch (line 398) | def _fetch(self):
method read (line 436) | def read(self, size=None):
method readline (line 468) | def readline(self, size=None):
method readlines (line 510) | def readlines(self, sizehint=0):
method read_trailer_lines (line 531) | def read_trailer_lines(self):
method close (line 559) | def close(self):
class HTTPRequest (line 564) | class HTTPRequest(object):
method __init__ (line 602) | def __init__(self, server, conn, proxy_mode=False, strict_mode=True):
method parse_request (line 635) | def parse_request(self):
method read_request_line (line 665) | def read_request_line(self):
method read_request_headers (line 881) | def read_request_headers(self):
method respond (line 958) | def respond(self):
method simple_response (line 982) | def simple_response(self, status, msg=''):
method write (line 1019) | def write(self, chunk):
method send_headers (line 1028) | def send_headers(self):
class HTTPConnection (line 1105) | class HTTPConnection(object):
method __init__ (line 1115) | def __init__(self, server, sock, makefile=MakeFile):
method communicate (line 1130) | def communicate(self):
method _handle_no_ssl (line 1183) | def _handle_no_ssl(self, req):
method _conditional_error (line 1195) | def _conditional_error(self, req, response):
method close (line 1211) | def close(self):
method _close_kernel_socket (line 1227) | def _close_kernel_socket(self):
function prevent_socket_inheritance (line 1256) | def prevent_socket_inheritance(sock):
function prevent_socket_inheritance (line 1260) | def prevent_socket_inheritance(sock):
function prevent_socket_inheritance (line 1265) | def prevent_socket_inheritance(sock):
class HTTPServer (line 1272) | class HTTPServer(object):
method __init__ (line 1341) | def __init__(
method clear_stats (line 1365) | def clear_stats(self):
method runtime (line 1398) | def runtime(self):
method __str__ (line 1405) | def __str__(self):
method _get_bind_addr (line 1410) | def _get_bind_addr(self):
method _set_bind_addr (line 1413) | def _set_bind_addr(self, value):
method safe_start (line 1446) | def safe_start(self):
method start (line 1461) | def start(self):
method error_log (line 1552) | def error_log(self, msg='', level=20, traceback=False):
method bind (line 1568) | def bind(self, family, type, proto=0):
method tick (line 1604) | def tick(self):
method _get_interrupt (line 1696) | def _get_interrupt(self):
method _set_interrupt (line 1699) | def _set_interrupt(self, interrupt):
method stop (line 1707) | def stop(self):
class Gateway (line 1753) | class Gateway(object):
method __init__ (line 1756) | def __init__(self, req):
method respond (line 1764) | def respond(self):
function get_ssl_adapter_class (line 1777) | def get_ssl_adapter_class(name='builtin'):
FILE: 3rd_party/python2/site-packages/cheroot/ssl/__init__.py
class Adapter (line 9) | class Adapter(object):
method __init__ (line 20) | def __init__(
method bind (line 31) | def bind(self, sock):
method wrap (line 36) | def wrap(self, sock):
method get_environ (line 41) | def get_environ(self):
method makefile (line 46) | def makefile(self, sock, mode='r', bufsize=-1):
FILE: 3rd_party/python2/site-packages/cheroot/ssl/builtin.py
class BuiltinSSLAdapter (line 28) | class BuiltinSSLAdapter(Adapter):
method __init__ (line 46) | def __init__(
method bind (line 64) | def bind(self, sock):
method wrap (line 68) | def wrap(self, sock):
method get_environ (line 109) | def get_environ(self, sock):
method makefile (line 122) | def makefile(self, sock, mode='r', bufsize=DEFAULT_BUFFER_SIZE):
FILE: 3rd_party/python2/site-packages/cheroot/ssl/pyopenssl.py
class SSL_fileobject (line 49) | class SSL_fileobject(MakeFile):
method _safe_call (line 55) | def _safe_call(self, is_reader, call, *args, **kwargs):
method recv (line 100) | def recv(self, size):
method sendall (line 104) | def sendall(self, *args, **kwargs):
method send (line 109) | def send(self, *args, **kwargs):
class SSLConnection (line 115) | class SSLConnection:
method __init__ (line 121) | def __init__(self, *args):
method shutdown (line 142) | def shutdown(self, *args):
class pyOpenSSLAdapter (line 154) | class pyOpenSSLAdapter(Adapter):
method __init__ (line 175) | def __init__(
method bind (line 187) | def bind(self, sock):
method wrap (line 195) | def wrap(self, sock):
method get_context (line 199) | def get_context(self):
method get_environ (line 209) | def get_environ(self):
method makefile (line 256) | def makefile(self, sock, mode='r', bufsize=-1):
FILE: 3rd_party/python2/site-packages/cheroot/test/helper.py
class CherootWebCase (line 36) | class CherootWebCase(webtest.WebCase):
method setup_class (line 47) | def setup_class(cls):
method teardown_class (line 80) | def teardown_class(cls):
method start (line 86) | def start(cls):
method stop (line 93) | def stop(cls):
method base (line 99) | def base(self):
method exit (line 109) | def exit(self):
method skip (line 112) | def skip(self, msg='skipped '):
method assertEqualDates (line 117) | def assertEqualDates(self, dt1, dt2, seconds=None):
class Request (line 131) | class Request(object):
method __init__ (line 133) | def __init__(self, environ):
class Response (line 137) | class Response(object):
method __init__ (line 139) | def __init__(self):
method output (line 144) | def output(self):
class Controller (line 155) | class Controller(object):
method __call__ (line 157) | def __call__(self, environ, start_response):
class CherootProcess (line 183) | class CherootProcess(object):
method __init__ (line 200) | def __init__(self, wait=False, daemonize=False, ssl=False,
method write_conf (line 208) | def write_conf(self, extra=''):
method start (line 229) | def start(self, imports=None):
method get_pid (line 270) | def get_pid(self):
method join (line 275) | def join(self):
method _join_daemon (line 281) | def _join_daemon(self):
FILE: 3rd_party/python2/site-packages/cheroot/test/test_config_server.py
class ServerConfigTests (line 19) | class ServerConfigTests(helper.CherootWebCase):
method setup_server (line 22) | def setup_server():
method testBasicConfig (line 58) | def testBasicConfig(self):
method testAdditionalServers (line 62) | def testAdditionalServers(self):
method testMaxRequestSizePerHandler (line 72) | def testMaxRequestSizePerHandler(self):
method testMaxRequestSize (line 89) | def testMaxRequestSize(self):
FILE: 3rd_party/python2/site-packages/cheroot/test/test_conn.py
class Controller (line 21) | class Controller(helper.Controller):
method hello (line 22) | def hello(req, resp):
method pov (line 25) | def pov(req, resp):
method stream (line 28) | def stream(req, resp):
method upload (line 38) | def upload(req, resp):
method custom_204 (line 44) | def custom_204(req, resp):
method custom_304 (line 48) | def custom_304(req, resp):
method err_before_read (line 52) | def err_before_read(req, resp):
method one_megabyte_of_a (line 56) | def one_megabyte_of_a(req, resp):
method wrong_cl_buffered (line 59) | def wrong_cl_buffered(req, resp):
method wrong_cl_unbuffered (line 63) | def wrong_cl_unbuffered(req, resp):
method _munge (line 67) | def _munge(string):
class ConnectionCloseTests (line 93) | class ConnectionCloseTests(helper.CherootWebCase):
method setup_server (line 96) | def setup_server(cls):
method test_HTTP11_persistent_connections (line 106) | def test_HTTP11_persistent_connections(self):
method test_Streaming_no_len_11 (line 133) | def test_Streaming_no_len_11(self):
method test_Streaming_with_len_11 (line 136) | def test_Streaming_with_len_11(self):
method test_Streaming_no_len_10 (line 139) | def test_Streaming_no_len_10(self):
method test_Streaming_with_len_10 (line 142) | def test_Streaming_with_len_10(self):
method _streaming_11 (line 145) | def _streaming_11(self, set_cl):
method _streaming_10 (line 200) | def _streaming_10(self, set_cl):
method test_HTTP10_to_10_KeepAlive (line 237) | def test_HTTP10_to_10_KeepAlive(self):
method test_HTTP10_to_11_KeepAlive (line 241) | def test_HTTP10_to_11_KeepAlive(self):
method _keepalive (line 245) | def _keepalive(self):
method test_HTTP11_Timeout (line 269) | def test_HTTP11_Timeout(self):
method test_HTTP11_Timeout_after_request (line 307) | def test_HTTP11_Timeout_after_request(self):
method test_HTTP11_pipelining (line 403) | def test_HTTP11_pipelining(self):
method test_100_Continue (line 446) | def test_100_Continue(self):
method test_readall_or_close (line 500) | def test_readall_or_close(self):
method test_No_Message_Body (line 567) | def test_No_Message_Body(self):
method _test_Chunked_Encoding (line 593) | def _test_Chunked_Encoding(self):
method test_Content_Length_in (line 636) | def test_Content_Length_in(self):
method test_Content_Length_out_preheaders (line 655) | def test_Content_Length_out_preheaders(self):
method test_Content_Length_out_postheaders (line 673) | def test_Content_Length_out_postheaders(self):
method test_598 (line 690) | def test_598(self):
method test_No_CRLF (line 713) | def test_No_CRLF(self):
FILE: 3rd_party/python2/site-packages/cheroot/test/test_core.py
class HelloController (line 23) | class HelloController(helper.Controller):
method hello (line 24) | def hello(req, resp):
method body_required (line 27) | def body_required(req, resp):
method query_string (line 33) | def query_string(req, resp):
method asterisk (line 36) | def asterisk(req, resp):
method _munge (line 41) | def _munge(string):
class HTTPTests (line 62) | class HTTPTests(helper.CherootWebCase):
method setup_server (line 65) | def setup_server(cls):
method _get_http_connection (line 69) | def _get_http_connection(self):
method _get_http_response (line 78) | def _get_http_response(connection, method='GET'):
method test_http_connect_request (line 85) | def test_http_connect_request(self):
method test_normal_request (line 89) | def test_normal_request(self):
method test_query_string_request (line 94) | def test_query_string_request(self):
method _test_parse_acceptable_uri (line 99) | def _test_parse_acceptable_uri(self, uri):
method test_parse_uri_plain (line 103) | def test_parse_uri_plain(self):
method test_parse_uri_query (line 106) | def test_parse_uri_query(self):
method test_parse_uri_quoted_unicode (line 109) | def test_parse_uri_quoted_unicode(self):
method test_parse_uri_unsafe_uri (line 116) | def test_parse_uri_unsafe_uri(self):
method test_parse_uri_invalid_uri (line 144) | def test_parse_uri_invalid_uri(self):
method _test_parse_no_leading_slash_invalid (line 154) | def _test_parse_no_leading_slash_invalid(self, uri):
method test_parse_no_leading_slash_invalid_ascii (line 165) | def test_parse_no_leading_slash_invalid_ascii(self):
method test_parse_no_leading_slash_invalid_non_ascii (line 168) | def test_parse_no_leading_slash_invalid_non_ascii(self):
method test_parse_uri_absolute_uri (line 171) | def test_parse_uri_absolute_uri(self):
method test_parse_uri_asterisk_uri (line 176) | def test_parse_uri_asterisk_uri(self):
method test_parse_uri_fragment_uri (line 181) | def test_parse_uri_fragment_uri(self):
method test_no_content_length (line 186) | def test_no_content_length(self):
method test_content_length_required (line 200) | def test_content_length_required(self):
method test_malformed_request_line (line 213) | def test_malformed_request_line(self):
method test_malformed_http_method (line 243) | def test_malformed_http_method(self):
method test_malformed_header (line 256) | def test_malformed_header(self):
method test_request_line_split_issue_1220 (line 271) | def test_request_line_split_issue_1220(self):
method test_garbage_in (line 286) | def test_garbage_in(self):
FILE: 3rd_party/python2/site-packages/cheroot/test/test_wsgiapps.py
class WSGIGraftTests (line 9) | class WSGIGraftTests(helper.CherootWebCase):
method setup_server (line 12) | def setup_server():
method test_01_standard_app (line 77) | def test_01_standard_app(self):
method test_04_pure_wsgi (line 81) | def test_04_pure_wsgi(self):
method test_05_wrapped_cp_app (line 86) | def test_05_wrapped_cp_app(self):
method test_06_empty_string_app (line 93) | def test_06_empty_string_app(self):
FILE: 3rd_party/python2/site-packages/cheroot/test/webtest.py
function interface (line 34) | def interface(host):
class TerseTestResult (line 49) | class TerseTestResult(unittest._TextTestResult):
method printErrors (line 51) | def printErrors(self):
class TerseTestRunner (line 60) | class TerseTestRunner(unittest.TextTestRunner):
method _makeResult (line 63) | def _makeResult(self):
method run (line 66) | def run(self, test):
class ReloadingTestLoader (line 85) | class ReloadingTestLoader(unittest.TestLoader):
method loadTestsFromName (line 87) | def loadTestsFromName(self, name, module=None):
function getchar (line 151) | def getchar():
function getchar (line 158) | def getchar():
function getchar (line 165) | def getchar():
class NonDataProperty (line 177) | class NonDataProperty(object):
method __init__ (line 178) | def __init__(self, fget):
method __get__ (line 183) | def __get__(self, obj, objtype=None):
class WebCase (line 189) | class WebCase(unittest.TestCase):
method _Conn (line 207) | def _Conn(self):
method get_conn (line 215) | def get_conn(self, auto_open=False):
method set_persistent (line 223) | def set_persistent(self, on=True, auto_open=False):
method persistent (line 244) | def persistent(self):
method persistent (line 248) | def persistent(self, on):
method interface (line 251) | def interface(self):
method getPage (line 259) | def getPage(self, url, headers=None, method='GET', body=None,
method interactive (line 308) | def interactive(self):
method _handlewebError (line 320) | def _handlewebError(self, msg):
method exit (line 366) | def exit(self):
method status_code (line 370) | def status_code(self):
method status_matches (line 373) | def status_matches(self, expected):
method assertStatus (line 381) | def assertStatus(self, status, msg=None):
method assertHeader (line 394) | def assertHeader(self, key, value=None, msg=None):
method assertHeaderIn (line 409) | def assertHeaderIn(self, key, values, msg=None):
method assertHeaderItemValue (line 422) | def assertHeaderItemValue(self, key, value, msg=None):
method assertNoHeader (line 433) | def assertNoHeader(self, key, msg=None):
method assertNoHeaderItemValue (line 442) | def assertNoHeaderItemValue(self, key, value, msg=None):
method assertBody (line 452) | def assertBody(self, value, msg=None):
method assertInBody (line 462) | def assertInBody(self, value, msg=None):
method assertNotInBody (line 471) | def assertNotInBody(self, value, msg=None):
method assertMatchesBody (line 480) | def assertMatchesBody(self, pattern, msg=None, flags=0):
function cleanHeaders (line 493) | def cleanHeaders(headers, method, body, host, port):
function shb (line 526) | def shb(response):
function openURL (line 549) | def openURL(url, headers=None, method='GET', body=None,
function strip_netloc (line 606) | def strip_netloc(url):
class ServerError (line 639) | class ServerError(Exception):
function server_error (line 643) | def server_error(exc=None):
FILE: 3rd_party/python2/site-packages/cheroot/workers/threadpool.py
class TrueyZero (line 14) | class TrueyZero(object):
method __add__ (line 17) | def __add__(self, other):
method __radd__ (line 20) | def __radd__(self, other):
class WorkerThread (line 29) | class WorkerThread(threading.Thread):
method __init__ (line 49) | def __init__(self, server):
method run (line 92) | def run(self):
class ThreadPool (line 123) | class ThreadPool(object):
method __init__ (line 130) | def __init__(
method start (line 153) | def start(self):
method _get_idle (line 164) | def _get_idle(self):
method put (line 169) | def put(self, obj):
method grow (line 180) | def grow(self, amount):
method _spawn_worker (line 195) | def _spawn_worker(self):
method shrink (line 201) | def shrink(self, amount):
method stop (line 222) | def stop(self, timeout=5):
method _get_qsize (line 265) | def _get_qsize(self):
FILE: 3rd_party/python2/site-packages/cheroot/wsgi.py
class Server (line 38) | class Server(server.HTTPServer):
method __init__ (line 44) | def __init__(self, bind_addr, wsgi_app, numthreads=10, server_name=None,
method _get_numthreads (line 80) | def _get_numthreads(self):
method _set_numthreads (line 83) | def _set_numthreads(self, value):
class Gateway (line 88) | class Gateway(server.Gateway):
method __init__ (line 91) | def __init__(self, req):
method gateway_map (line 103) | def gateway_map(cls):
method get_environ (line 115) | def get_environ(self):
method respond (line 119) | def respond(self):
method start_response (line 141) | def start_response(self, status, headers, exc_info=None):
method _encode_status (line 176) | def _encode_status(status):
method write (line 190) | def write(self, chunk):
class Gateway_10 (line 226) | class Gateway_10(Gateway):
method get_environ (line 231) | def get_environ(self):
class Gateway_u0 (line 286) | class Gateway_u0(Gateway_10):
method get_environ (line 295) | def get_environ(self):
method _decode_key (line 317) | def _decode_key(item):
method _decode_value (line 324) | def _decode_value(item):
class PathInfoDispatcher (line 335) | class PathInfoDispatcher(object):
method __init__ (line 338) | def __init__(self, apps):
method __call__ (line 359) | def __call__(self, environ, start_response):
FILE: 3rd_party/python2/site-packages/cherrypy/__init__.py
class _HandleSignalsPlugin (line 130) | class _HandleSignalsPlugin(object):
method __init__ (line 136) | def __init__(self, bus):
method subscribe (line 139) | def subscribe(self):
function quickstart (line 154) | def quickstart(root=None, script_name='', config=None):
class _Serving (line 181) | class _Serving(_local):
method load (line 203) | def load(self, request, response):
method clear (line 207) | def clear(self):
class _ThreadLocalProxy (line 215) | class _ThreadLocalProxy(object):
method __init__ (line 219) | def __init__(self, attrname):
method __getattr__ (line 222) | def __getattr__(self, name):
method __setattr__ (line 226) | def __setattr__(self, name, value):
method __delattr__ (line 233) | def __delattr__(self, name):
method _get_dict (line 237) | def _get_dict(self):
method __getitem__ (line 244) | def __getitem__(self, key):
method __setitem__ (line 248) | def __setitem__(self, key, value):
method __delitem__ (line 252) | def __delitem__(self, key):
method __contains__ (line 256) | def __contains__(self, key):
method __len__ (line 260) | def __len__(self):
method __nonzero__ (line 264) | def __nonzero__(self):
class _ThreadData (line 280) | class _ThreadData(_local):
function _cherrypy_pydoc_resolve (line 291) | def _cherrypy_pydoc_resolve(thing, forceload=0):
class _GlobalLogManager (line 306) | class _GlobalLogManager(_cplogging.LogManager):
method __call__ (line 316) | def __call__(self, *args, **kwargs):
method access (line 330) | def access(self):
function _buslog (line 351) | def _buslog(msg, level):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpchecker.py
class Checker (line 11) | class Checker(object):
method __init__ (line 28) | def __init__(self):
method __call__ (line 32) | def __call__(self):
method formatwarning (line 46) | def formatwarning(self, message, category, filename, lineno, line=None):
method check_app_config_entries_dont_start_with_script_name (line 53) | def check_app_config_entries_dont_start_with_script_name(self):
method check_site_config_entries_in_app_config (line 71) | def check_site_config_entries_in_app_config(self):
method check_skipped_app_config (line 94) | def check_skipped_app_config(self):
method check_app_config_brackets (line 110) | def check_app_config_brackets(self):
method check_static_paths (line 125) | def check_static_paths(self):
method _compat (line 195) | def _compat(self, config):
method check_compatibility (line 216) | def check_compatibility(self):
method _known_ns (line 227) | def _known_ns(self, app):
method check_config_namespaces (line 264) | def check_config_namespaces(self):
method _populate_known_types (line 274) | def _populate_known_types(self):
method _known_types (line 293) | def _known_types(self, config):
method check_config_types (line 308) | def check_config_types(self):
method check_localhost (line 317) | def check_localhost(self):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpcompat.py
function ntob (line 25) | def ntob(n, encoding='ISO-8859-1'):
function ntou (line 33) | def ntou(n, encoding='ISO-8859-1'):
function tonative (line 41) | def tonative(n, encoding='ISO-8859-1'):
function ntob (line 49) | def ntob(n, encoding='ISO-8859-1'):
function ntou (line 59) | def ntou(n, encoding='ISO-8859-1'):
function tonative (line 78) | def tonative(n, encoding='ISO-8859-1'):
function assert_native (line 86) | def assert_native(n):
function base64_decode (line 91) | def base64_decode(n, encoding='ISO-8859-1'):
function unquote_qs (line 101) | def unquote_qs(atom, encoding, errors='strict'):
function json_encode (line 123) | def json_encode(value):
function escape_html (line 151) | def escape_html(s, escape_quote=False):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpconfig.py
function merge (line 126) | def merge(base, other):
class Config (line 146) | class Config(reprconf.Config):
method update (line 149) | def update(self, config):
method _apply (line 156) | def _apply(self, config):
method __call__ (line 167) | def __call__(*args, **kwargs):
class _Vars (line 180) | class _Vars(object):
method __init__ (line 183) | def __init__(self, target):
method setdefault (line 186) | def setdefault(self, key, default):
function _server_namespace_handler (line 232) | def _server_namespace_handler(k, v):
function _engine_namespace_handler (line 262) | def _engine_namespace_handler(k, v):
function _tree_namespace_handler (line 291) | def _tree_namespace_handler(k, v):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpdispatch.py
class PageHandler (line 23) | class PageHandler(object):
method __init__ (line 27) | def __init__(self, callable, *args, **kwargs):
method get_args (line 32) | def get_args(self):
method set_args (line 35) | def set_args(self, args):
method get_kwargs (line 45) | def get_kwargs(self):
method set_kwargs (line 48) | def set_kwargs(self, kwargs):
method __call__ (line 58) | def __call__(self):
function test_callable_spec (line 72) | def test_callable_spec(callable, callable_args, callable_kwargs):
function test_callable_spec (line 212) | def test_callable_spec(callable, args, kwargs): # noqa: F811
function getargspec (line 219) | def getargspec(callable):
class LateParamPageHandler (line 223) | class LateParamPageHandler(PageHandler):
method _get_kwargs (line 233) | def _get_kwargs(self):
method _set_kwargs (line 239) | def _set_kwargs(self, kwargs):
function validate_translator (line 252) | def validate_translator(t):
function validate_translator (line 260) | def validate_translator(t):
class Dispatcher (line 265) | class Dispatcher(object):
method __init__ (line 286) | def __init__(self, dispatch_method_name=None,
method __call__ (line 293) | def __call__(self, path_info):
method find_handler (line 305) | def find_handler(self, path):
class MethodDispatcher (line 461) | class MethodDispatcher(Dispatcher):
method __call__ (line 473) | def __call__(self, path_info):
class RoutesDispatcher (line 505) | class RoutesDispatcher(object):
method __init__ (line 509) | def __init__(self, full_result=False, **mapper_options):
method connect (line 523) | def connect(self, name, route, controller, **kwargs):
method redirect (line 527) | def redirect(self, url):
method __call__ (line 530) | def __call__(self, path_info):
method find_handler (line 538) | def find_handler(self, path_info):
function XMLRPCDispatcher (line 620) | def XMLRPCDispatcher(next_dispatcher=Dispatcher()):
function VirtualHost (line 629) | def VirtualHost(next_dispatcher=Dispatcher(), use_x_forwarded_host=True,
FILE: 3rd_party/python2/site-packages/cherrypy/_cperror.py
class CherryPyException (line 136) | class CherryPyException(Exception):
class InternalRedirect (line 142) | class InternalRedirect(CherryPyException):
method __init__ (line 152) | def __init__(self, path, query_string=''):
class HTTPRedirect (line 173) | class HTTPRedirect(CherryPyException):
method __init__ (line 205) | def __init__(self, urls, status=None, encoding=None):
method default_status (line 233) | def default_status(cls):
method status (line 244) | def status(self):
method set_response (line 249) | def set_response(self):
method __call__ (line 312) | def __call__(self):
function clean_headers (line 317) | def clean_headers(status):
class HTTPError (line 341) | class HTTPError(CherryPyException):
method __init__ (line 370) | def __init__(self, status=500, message=None):
method set_response (line 385) | def set_response(self):
method get_error_page (line 411) | def get_error_page(self, *args, **kwargs):
method __call__ (line 414) | def __call__(self):
method handle (line 420) | def handle(cls, exception, status=500, message=''):
class NotFound (line 428) | class NotFound(HTTPError):
method __init__ (line 436) | def __init__(self, path=None):
function get_error_page (line 477) | def get_error_page(status, **kwargs):
function _be_ie_unfriendly (line 557) | def _be_ie_unfriendly(status):
function format_exc (line 580) | def format_exc(exc=None):
function bare_error (line 593) | def bare_error(extrabody=None):
FILE: 3rd_party/python2/site-packages/cherrypy/_cplogging.py
class NullHandler (line 127) | class NullHandler(logging.Handler):
method handle (line 131) | def handle(self, record):
method emit (line 134) | def emit(self, record):
method createLock (line 137) | def createLock(self):
class LogManager (line 141) | class LogManager(object):
method __init__ (line 175) | def __init__(self, appid=None, logger_root='cherrypy'):
method reopen_files (line 195) | def reopen_files(self):
method error (line 205) | def error(self, msg='', context='', severity=logging.INFO,
method __call__ (line 225) | def __call__(self, *args, **kwargs):
method access (line 229) | def access(self):
method time (line 313) | def time(self):
method _get_builtin_handler (line 322) | def _get_builtin_handler(self, log, key):
method _set_screen_handler (line 328) | def _set_screen_handler(self, log, enable, stream=None):
method _get_screen (line 341) | def _get_screen(self):
method _set_screen (line 346) | def _set_screen(self, newvalue):
method _add_builtin_file_handler (line 358) | def _add_builtin_file_handler(self, log, fname):
method _set_file_handler (line 364) | def _set_file_handler(self, log, filename):
method _get_error_file (line 379) | def _get_error_file(self):
method _set_error_file (line 385) | def _set_error_file(self, newvalue):
method _get_access_file (line 394) | def _get_access_file(self):
method _set_access_file (line 400) | def _set_access_file(self, newvalue):
method _set_wsgi_handler (line 411) | def _set_wsgi_handler(self, log, enable):
method _get_wsgi (line 422) | def _get_wsgi(self):
method _set_wsgi (line 425) | def _set_wsgi(self, newvalue):
class WSGIErrorHandler (line 437) | class WSGIErrorHandler(logging.Handler):
method flush (line 441) | def flush(self):
method emit (line 450) | def emit(self, record):
class LazyRfc3339UtcTime (line 474) | class LazyRfc3339UtcTime(object):
method __str__ (line 475) | def __str__(self):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpmodpy.py
function setup (line 75) | def setup(req):
class _ReadOnlyRequest (line 130) | class _ReadOnlyRequest:
method __init__ (line 133) | def __init__(self, req):
function handler (line 143) | def handler(req):
function send_response (line 254) | def send_response(req, status, headers, body, stream=False):
function popen (line 282) | def popen(fullcmd):
function popen (line 288) | def popen(fullcmd):
function read_process (line 293) | def read_process(cmd, args=''):
class ModPythonServer (line 311) | class ModPythonServer(object):
method __init__ (line 328) | def __init__(self, loc='/', port=80, opts=None, apache_path='apache',
method start (line 336) | def start(self):
method stop (line 356) | def stop(self):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpnative_server.py
class NativeGateway (line 14) | class NativeGateway(cheroot.server.Gateway):
method respond (line 19) | def respond(self):
method send_response (line 93) | def send_response(self, status, headers, body):
class CPHTTPServer (line 112) | class CPHTTPServer(cheroot.server.HTTPServer):
method __init__ (line 121) | def __init__(self, server_adapter=cherrypy.server):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpreqbody.py
function unquote_plus (line 121) | def unquote_plus(bs):
function process_urlencoded (line 144) | def process_urlencoded(entity):
function process_multipart (line 189) | def process_multipart(entity):
function process_multipart_form_data (line 223) | def process_multipart_form_data(entity):
function _old_process_multipart (line 251) | def _old_process_multipart(entity):
class Entity (line 280) | class Entity(object):
method __init__ (line 410) | def __init__(self, fp, headers, params=None, parts=None):
method read (line 481) | def read(self, size=None, fp_out=None):
method readline (line 484) | def readline(self, size=None):
method readlines (line 487) | def readlines(self, sizehint=None):
method __iter__ (line 490) | def __iter__(self):
method __next__ (line 493) | def __next__(self):
method next (line 499) | def next(self):
method read_into_file (line 502) | def read_into_file(self, fp_out=None):
method make_file (line 512) | def make_file(self):
method get_path (line 530) | def get_path(self):
method fullvalue (line 537) | def fullvalue(self):
method decode_entity (line 549) | def decode_entity(self, value):
method process (line 566) | def process(self):
method default_proc (line 583) | def default_proc(self):
class Part (line 593) | class Part(Entity):
method __init__ (line 634) | def __init__(self, fp, headers, boundary):
method from_fp (line 641) | def from_fp(cls, fp, boundary):
method read_headers (line 646) | def read_headers(cls, fp):
method read_lines_to_boundary (line 675) | def read_lines_to_boundary(self, fp_out=None):
method default_proc (line 733) | def default_proc(self):
method read_into_file (line 747) | def read_into_file(self, fp_out=None):
class SizedReader (line 763) | class SizedReader:
method __init__ (line 765) | def __init__(self, fp, length, maxbytes, bufsize=DEFAULT_BUFFER_SIZE,
method read (line 777) | def read(self, size=None, fp_out=None):
method readline (line 868) | def readline(self, size=None):
method readlines (line 889) | def readlines(self, sizehint=None):
method finish (line 909) | def finish(self):
class RequestBody (line 942) | class RequestBody(Entity):
method __init__ (line 967) | def __init__(self, fp, headers, params=None, request_params=None):
method process (line 989) | def process(self):
FILE: 3rd_party/python2/site-packages/cherrypy/_cprequest.py
class Hook (line 16) | class Hook(object):
method __init__ (line 41) | def __init__(self, callback, failsafe=None, priority=None, **kwargs):
method __lt__ (line 54) | def __lt__(self, other):
method __call__ (line 61) | def __call__(self):
method __repr__ (line 65) | def __repr__(self):
class HookMap (line 74) | class HookMap(dict):
method __new__ (line 78) | def __new__(cls, points=None):
method __init__ (line 84) | def __init__(self, *a, **kw):
method attach (line 87) | def attach(self, point, callback, failsafe=None, priority=None, **kwar...
method run (line 91) | def run(self, point):
method __copy__ (line 116) | def __copy__(self):
method __repr__ (line 125) | def __repr__(self):
function hooks_namespace (line 136) | def hooks_namespace(k, v):
function request_namespace (line 149) | def request_namespace(k, v):
function response_namespace (line 159) | def response_namespace(k, v):
function error_page_namespace (line 169) | def error_page_namespace(k, v):
class Request (line 182) | class Request(object):
method __init__ (line 481) | def __init__(self, local_host, remote_host, scheme='http',
method close (line 506) | def close(self):
method run (line 514) | def run(self, method, path, query_string, req_protocol, headers, rfile):
method respond (line 626) | def respond(self, path_info):
method _do_respond (line 648) | def _do_respond(self, path_info):
method process_query_string (line 697) | def process_query_string(self):
method process_headers (line 716) | def process_headers(self):
method get_resource (line 749) | def get_resource(self, path):
method handle_error (line 760) | def handle_error(self):
method _get_body_params (line 775) | def _get_body_params(self):
class ResponseBody (line 796) | class ResponseBody(object):
method __get__ (line 804) | def __get__(self, obj, objclass=None):
method __set__ (line 811) | def __set__(self, obj, value):
class Response (line 839) | class Response(object):
method __init__ (line 876) | def __init__(self):
method collapse_body (line 892) | def collapse_body(self):
method finalize (line 908) | def finalize(self):
class LazyUUID4 (line 954) | class LazyUUID4(object):
method __str__ (line 955) | def __str__(self):
method uuid4 (line 960) | def uuid4(self):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpserver.py
class Server (line 14) | class Server(ServerAdapter):
method _get_socket_host (line 30) | def _get_socket_host(self):
method _set_socket_host (line 33) | def _set_socket_host(self, value):
method __init__ (line 150) | def __init__(self):
method httpserver_from_self (line 157) | def httpserver_from_self(self, httpserver=None):
method start (line 169) | def start(self):
method _get_bind_addr (line 176) | def _get_bind_addr(self):
method _set_bind_addr (line 183) | def _set_bind_addr(self, value):
method base (line 206) | def base(self):
FILE: 3rd_party/python2/site-packages/cherrypy/_cptools.py
function _getargs (line 36) | def _getargs(func):
class Tool (line 57) | class Tool(object):
method __init__ (line 66) | def __init__(self, point, callable, name=None, priority=50):
method _get_on (line 74) | def _get_on(self):
method _set_on (line 77) | def _set_on(self, value):
method _setargs (line 81) | def _setargs(self):
method _merged_args (line 100) | def _merged_args(self, d=None):
method __call__ (line 116) | def __call__(self, *args, **kwargs):
method _setup (line 141) | def _setup(self):
class HandlerTool (line 155) | class HandlerTool(Tool):
method __init__ (line 167) | def __init__(self, callable, name=None):
method handler (line 170) | def handler(self, *args, **kwargs):
method _wrapper (line 187) | def _wrapper(self, **kwargs):
method _setup (line 191) | def _setup(self):
class HandlerWrapperTool (line 205) | class HandlerWrapperTool(Tool):
method __init__ (line 225) | def __init__(self, newhandler, point='before_handler', name=None,
method callable (line 232) | def callable(self, *args, **kwargs):
class ErrorTool (line 240) | class ErrorTool(Tool):
method __init__ (line 244) | def __init__(self, callable, name=None):
method _wrapper (line 247) | def _wrapper(self):
method _setup (line 250) | def _setup(self):
class SessionTool (line 262) | class SessionTool(Tool):
method __init__ (line 281) | def __init__(self):
method _lock_session (line 285) | def _lock_session(self):
method _setup (line 288) | def _setup(self):
method regenerate (line 318) | def regenerate(self):
class XMLRPCController (line 333) | class XMLRPCController(object):
method default (line 372) | def default(self, *vpath, **params):
class SessionAuthTool (line 405) | class SessionAuthTool(HandlerTool):
class CachingTool (line 409) | class CachingTool(Tool):
method _wrapper (line 413) | def _wrapper(self, **kwargs):
method _setup (line 424) | def _setup(self):
class Toolbox (line 433) | class Toolbox(object):
method __init__ (line 441) | def __init__(self, namespace):
method __setattr__ (line 444) | def __setattr__(self, name, value):
method __enter__ (line 452) | def __enter__(self):
method __exit__ (line 462) | def __exit__(self, exc_type, exc_val, exc_tb):
method register (line 471) | def register(self, point, **kwargs):
FILE: 3rd_party/python2/site-packages/cherrypy/_cptree.py
class Application (line 13) | class Application(object):
method __init__ (line 48) | def __init__(self, root, script_name='', config=None):
method __repr__ (line 63) | def __repr__(self):
method _get_script_name (line 84) | def _get_script_name(self):
method _set_script_name (line 92) | def _set_script_name(self, value):
method merge (line 99) | def merge(self, config):
method find_config (line 106) | def find_config(self, path, key, default=None):
method get_serving (line 125) | def get_serving(self, local, remote, scheme, sproto):
method release_serving (line 140) | def release_serving(self):
method __call__ (line 153) | def __call__(self, environ, start_response):
class Tree (line 158) | class Tree(object):
method __init__ (line 173) | def __init__(self):
method mount (line 177) | def mount(self, root, script_name='', config=None):
method graft (line 241) | def graft(self, wsgi_callable, script_name=''):
method script_name (line 247) | def script_name(self, path=None):
method __call__ (line 270) | def __call__(self, environ, start_response):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpwsgi.py
function downgrade_wsgi_ux_to_1x (line 22) | def downgrade_wsgi_ux_to_1x(environ):
class VirtualHost (line 38) | class VirtualHost(object):
method __init__ (line 77) | def __init__(self, default, domains=None, use_x_forwarded_host=True):
method __call__ (line 82) | def __call__(self, environ, start_response):
class InternalRedirector (line 93) | class InternalRedirector(object):
method __init__ (line 97) | def __init__(self, nextapp, recursive=False):
method __call__ (line 101) | def __call__(self, environ, start_response):
class ExceptionTrapper (line 141) | class ExceptionTrapper(object):
method __init__ (line 145) | def __init__(self, nextapp, throws=(KeyboardInterrupt, SystemExit)):
method __call__ (line 149) | def __call__(self, environ, start_response):
class _TrappedResponse (line 158) | class _TrappedResponse(object):
method __init__ (line 162) | def __init__(self, nextapp, environ, start_response, throws):
method __iter__ (line 173) | def __iter__(self):
method __next__ (line 177) | def __next__(self):
method close (line 184) | def close(self):
method trap (line 188) | def trap(self, func, *args, **kwargs):
class AppResponse (line 234) | class AppResponse(object):
method __init__ (line 238) | def __init__(self, environ, start_response, cpapp):
method __iter__ (line 282) | def __iter__(self):
method __next__ (line 285) | def __next__(self):
method close (line 292) | def close(self):
method run (line 308) | def run(self):
method recode_path_qs (line 358) | def recode_path_qs(self, path, qs):
method translate_headers (line 386) | def translate_headers(self, environ):
class CPWSGIApp (line 398) | class CPWSGIApp(object):
method __init__ (line 426) | def __init__(self, cpapp, pipeline=None):
method tail (line 433) | def tail(self, environ, start_response):
method __call__ (line 441) | def __call__(self, environ, start_response):
method namespace_handler (line 453) | def namespace_handler(self, k, v):
FILE: 3rd_party/python2/site-packages/cherrypy/_cpwsgi_server.py
class CPWSGIHTTPRequest (line 14) | class CPWSGIHTTPRequest(cheroot.server.HTTPRequest):
method __init__ (line 21) | def __init__(self, server, conn):
class CPWSGIServer (line 35) | class CPWSGIServer(cheroot.wsgi.Server):
method __init__ (line 47) | def __init__(self, server_adapter=cherrypy.server):
method error_log (line 106) | def error_log(self, msg='', level=20, traceback=False):
FILE: 3rd_party/python2/site-packages/cherrypy/_helper.py
function expose (line 11) | def expose(func=None, alias=None):
function popargs (line 59) | def popargs(*args, **kwargs):
function url (line 192) | def url(path='', qs='', script_name=None, base=None, relative=None):
function normalize_path (line 287) | def normalize_path(path):
class _ClassPropertyDescriptor (line 316) | class _ClassPropertyDescriptor(object):
method __init__ (line 323) | def __init__(self, fget, fset=None):
method __get__ (line 328) | def __get__(self, obj, klass=None):
function classproperty (line 335) | def classproperty(func):
FILE: 3rd_party/python2/site-packages/cherrypy/daemon.py
function start (line 10) | def start(configfiles=None, daemonize=False, environment=None,
function run (line 75) | def run():
FILE: 3rd_party/python2/site-packages/cherrypy/lib/__init__.py
function is_iterator (line 4) | def is_iterator(obj):
function is_closable_iterator (line 23) | def is_closable_iterator(obj):
class file_generator (line 47) | class file_generator(object):
method __init__ (line 53) | def __init__(self, input, chunkSize=65536):
method __iter__ (line 58) | def __iter__(self):
method __next__ (line 62) | def __next__(self):
function file_generator_limited (line 74) | def file_generator_limited(fileobj, count, chunk_size=65536):
function set_vary_header (line 90) | def set_vary_header(response, header_name):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/auth.py
function import_httpauth (line 16) | def import_httpauth():
function check_auth (line 27) | def check_auth(users, encrypt=None, realm=None):
function basic_auth (line 78) | def basic_auth(realm, users, encrypt=None, debug=False):
function digest_auth (line 107) | def digest_auth(realm, users, debug=False):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/auth_basic.py
function checkpassword_dict (line 32) | def checkpassword_dict(user_password_dict):
function basic_auth (line 47) | def basic_auth(realm, checkpassword, debug=False):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/auth_digest.py
function md5_hex (line 34) | def md5_hex(s):
function TRACE (line 45) | def TRACE(msg):
function get_ha1_dict_plain (line 52) | def get_ha1_dict_plain(user_password_dict):
function get_ha1_dict (line 69) | def get_ha1_dict(user_ha1_dict):
function get_ha1_file_htdigest (line 84) | def get_ha1_file_htdigest(filename):
function synthesize_nonce (line 111) | def synthesize_nonce(s, key, timestamp=None):
function H (line 133) | def H(s):
class HttpDigestAuthorization (line 138) | class HttpDigestAuthorization (object):
method errmsg (line 144) | def errmsg(self, s):
method __init__ (line 147) | def __init__(self, auth_header, http_method, debug=False):
method __str__ (line 204) | def __str__(self):
method validate_nonce (line 207) | def validate_nonce(self, s, key):
method is_nonce_stale (line 234) | def is_nonce_stale(self, max_age_seconds=600):
method HA2 (line 250) | def HA2(self, entity_body=''):
method request_digest (line 269) | def request_digest(self, ha1, entity_body=''):
function www_authenticate (line 310) | def www_authenticate(realm, key, algorithm='MD5', nonce=None, qop=qop_auth,
function digest_auth (line 327) | def digest_auth(realm, get_ha1, key, debug=False):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/caching.py
class Cache (line 47) | class Cache(object):
method get (line 51) | def get(self):
method put (line 55) | def put(self, obj, size):
method delete (line 59) | def delete(self):
method clear (line 63) | def clear(self):
class AntiStampedeCache (line 69) | class AntiStampedeCache(dict):
method wait (line 73) | def wait(self, key, timeout=5, debug=False):
method __setitem__ (line 121) | def __setitem__(self, key, value):
class MemoryCache (line 132) | class MemoryCache(Cache):
method __init__ (line 169) | def __init__(self):
method clear (line 178) | def clear(self):
method expire_cache (line 189) | def expire_cache(self):
method get (line 216) | def get(self):
method put (line 235) | def put(self, variant, size):
method delete (line 265) | def delete(self):
function get (line 271) | def get(invalid_methods=('POST', 'PUT', 'DELETE'), debug=False, **kwargs):
function tee_output (line 387) | def tee_output():
function expires (line 417) | def expires(secs=0, force=False, debug=False):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/covercp.py
function start (line 41) | def start():
function start (line 53) | def start():
function _percent (line 193) | def _percent(statements, missing):
function _show_branch (line 201) | def _show_branch(root, base, path, pct=0, showpct=False, exclude='',
function _skip_file (line 252) | def _skip_file(path, exclude):
function _graft (line 257) | def _graft(path, tree):
function get_tree (line 277) | def get_tree(base, exclude, coverage=the_coverage):
class CoverStats (line 287) | class CoverStats(object):
method __init__ (line 289) | def __init__(self, coverage, root=None):
method index (line 298) | def index(self):
method menu (line 302) | def menu(self, base='/', pct='50', showpct='',
method annotated_file (line 337) | def annotated_file(self, filename, statements, excluded, missing):
method report (line 360) | def report(self, name):
function serve (line 376) | def serve(path=localFile, port=8080, root=None):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/cpstats.py
function extrapolate_statistics (line 207) | def extrapolate_statistics(scope):
function proc_time (line 254) | def proc_time(s):
class ByteCountWrapper (line 258) | class ByteCountWrapper(object):
method __init__ (line 262) | def __init__(self, rfile):
method read (line 266) | def read(self, size=-1):
method readline (line 271) | def readline(self, size=-1):
method readlines (line 276) | def readlines(self, sizehint=0):
method close (line 289) | def close(self):
method __iter__ (line 292) | def __iter__(self):
method next (line 295) | def next(self):
function average_uriset_time (line 301) | def average_uriset_time(s):
function _get_threading_ident (line 305) | def _get_threading_ident():
class StatsTool (line 311) | class StatsTool(cherrypy.Tool):
method __init__ (line 315) | def __init__(self):
method _setup (line 318) | def _setup(self):
method record_start (line 328) | def record_start(self):
method record_stop (line 351) | def record_stop(
function locale_date (line 411) | def locale_date(v):
function iso_format (line 415) | def iso_format(v):
function pause_resume (line 419) | def pause_resume(ns):
class StatsPage (line 440) | class StatsPage(object):
method index (line 481) | def index(self):
method get_namespaces (line 585) | def get_namespaces(self):
method get_dict_collection (line 612) | def get_dict_collection(self, v, formatting):
method get_list_collection (line 645) | def get_list_collection(self, v, formatting):
method data (line 679) | def data(self):
method pause (line 685) | def pause(self, namespace):
method resume (line 692) | def resume(self, namespace):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/cptools.py
function validate_etags (line 18) | def validate_etags(autotags=False, debug=False):
function validate_since (line 96) | def validate_since():
function allow (line 125) | def allow(methods=None, debug=False):
function proxy (line 155) | def proxy(base=None, local='X-Forwarded-Host', remote='X-Forwarded-For',
function ignore_headers (line 219) | def ignore_headers(headers=('Range',), debug=False):
function response_headers (line 235) | def response_headers(headers=None, debug=False):
function referer (line 247) | def referer(pattern, accept=True, accept_missing=False, error=403,
class SessionAuth (line 285) | class SessionAuth(object):
method check_username_and_password (line 292) | def check_username_and_password(self, username, password):
method anonymous (line 295) | def anonymous(self):
method on_login (line 299) | def on_login(self, username):
method on_logout (line 302) | def on_logout(self, username):
method on_check (line 305) | def on_check(self, username):
method login_screen (line 308) | def login_screen(self, from_page='..', username='', error_msg='',
method do_login (line 323) | def do_login(self, username, password, from_page='..', **kwargs):
method do_logout (line 340) | def do_logout(self, from_page='..', **kwargs):
method do_check (line 350) | def do_check(self):
method _debug_message (line 376) | def _debug_message(self, template, context={}):
method run (line 381) | def run(self):
function session_auth (line 408) | def session_auth(**kwargs):
function log_traceback (line 426) | def log_traceback(severity=logging.ERROR, debug=False):
function log_request_headers (line 431) | def log_request_headers(debug=False):
function log_hooks (line 437) | def log_hooks(debug=False):
function redirect (line 459) | def redirect(url='', internal=True, debug=False):
function trailing_slash (line 471) | def trailing_slash(missing=True, extra=False, status=None, debug=False):
function flatten (line 493) | def flatten(debug=False):
function accept (line 515) | def accept(media=None, debug=False):
class MonitoredHeaderMap (line 590) | class MonitoredHeaderMap(_httputil.HeaderMap):
method transform_key (line 592) | def transform_key(self, key):
method __init__ (line 596) | def __init__(self):
function autovary (line 601) | def autovary(ignore=None, debug=False):
function convert_params (line 627) | def convert_params(exception=ValueError, error=400):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/encoding.py
function decode (line 14) | def decode(encoding=None, default_encoding='utf-8'):
class UTF8StreamEncoder (line 41) | class UTF8StreamEncoder:
method __init__ (line 42) | def __init__(self, iterator):
method __iter__ (line 45) | def __iter__(self):
method next (line 48) | def next(self):
method __next__ (line 51) | def __next__(self):
method close (line 57) | def close(self):
method __getattr__ (line 61) | def __getattr__(self, attr):
class ResponseEncoder (line 67) | class ResponseEncoder:
method __init__ (line 77) | def __init__(self, **kwargs):
method encode_stream (line 90) | def encode_stream(self, encoding):
method encode_string (line 108) | def encode_string(self, encoding):
method find_acceptable_charset (line 124) | def find_acceptable_charset(self):
method __call__ (line 219) | def __call__(self, *args, **kwargs):
function compress (line 275) | def compress(body, compress_level):
function decompress (line 305) | def decompress(body):
function gzip (line 317) | def gzip(compress_level=5, mime_types=['text/html', 'text/plain'],
FILE: 3rd_party/python2/site-packages/cherrypy/lib/gctools.py
class ReferrerTree (line 16) | class ReferrerTree(object):
method __init__ (line 22) | def __init__(self, ignore=None, maxdepth=2, maxparents=10):
method ascend (line 28) | def ascend(self, obj, depth=1):
method peek (line 56) | def peek(self, s):
method _format (line 64) | def _format(self, obj, descend=True):
method format (line 89) | def format(self, tree):
function get_instances (line 102) | def get_instances(cls):
class RequestCounter (line 106) | class RequestCounter(SimplePlugin):
method start (line 108) | def start(self):
method before_request (line 111) | def before_request(self):
method after_request (line 114) | def after_request(self):
function get_context (line 122) | def get_context(obj):
class GCRoot (line 134) | class GCRoot(object):
method index (line 148) | def index(self):
method stats (line 152) | def stats(self):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/httpauth.py
function calculateNonce (line 103) | def calculateNonce(realm, algorithm=MD5):
function digestAuth (line 119) | def digestAuth(realm, algorithm=MD5, nonce=None, qop=AUTH):
function basicAuth (line 133) | def basicAuth(realm):
function doAuth (line 140) | def doAuth(realm):
function _parseDigestAuthorization (line 153) | def _parseDigestAuthorization(auth_params):
function _parseBasicAuthorization (line 177) | def _parseBasicAuthorization(auth_params):
function parseAuthorization (line 188) | def parseAuthorization(credentials):
function md5SessionKey (line 210) | def md5SessionKey(params, password):
function _A1 (line 238) | def _A1(params, password):
function _A2 (line 257) | def _A2(params, method, kwargs):
function _computeDigestResponse (line 280) | def _computeDigestResponse(auth_map, password, method='GET', A1=None,
function _checkDigestResponse (line 328) | def _checkDigestResponse(auth_map, password, method='GET', A1=None, **kw...
function _checkBasicResponse (line 349) | def _checkBasicResponse(auth_map, password, method='GET', encrypt=None,
function checkResponse (line 370) | def checkResponse(auth_map, password, method='GET', encrypt=None, **kwar...
FILE: 3rd_party/python2/site-packages/cherrypy/lib/httputil.py
function urljoin (line 40) | def urljoin(*atoms):
function urljoin_bytes (line 53) | def urljoin_bytes(*atoms):
function protocol_from_http (line 66) | def protocol_from_http(protocol_str):
function get_ranges (line 71) | def get_ranges(headervalue, content_length):
class HeaderElement (line 129) | class HeaderElement(object):
method __init__ (line 133) | def __init__(self, value, params=None):
method __cmp__ (line 139) | def __cmp__(self, other):
method __lt__ (line 142) | def __lt__(self, other):
method __str__ (line 145) | def __str__(self):
method __bytes__ (line 149) | def __bytes__(self):
method __unicode__ (line 152) | def __unicode__(self):
method parse (line 156) | def parse(elementstr):
method from_str (line 162) | def from_str(cls, elementstr):
class AcceptElement (line 171) | class AcceptElement(HeaderElement):
method from_str (line 183) | def from_str(cls, elementstr):
method qvalue (line 200) | def qvalue(self):
method __cmp__ (line 207) | def __cmp__(self, other):
method __lt__ (line 213) | def __lt__(self, other):
function header_elements (line 223) | def header_elements(fieldname, fieldvalue):
function decode_TEXT (line 240) | def decode_TEXT(value):
function decode_TEXT_maybe (line 256) | def decode_TEXT_maybe(value):
function valid_status (line 263) | def valid_status(status):
function _parse_qs (line 314) | def _parse_qs(qs, keep_blank_values=0, strict_parsing=0, encoding='utf-8'):
function parse_query_string (line 362) | def parse_query_string(query_string, keep_blank_values=True, encoding='u...
class KeyTransformingDict (line 382) | class KeyTransformingDict(dict):
method transform_key (line 388) | def transform_key(key):
method __init__ (line 391) | def __init__(self, *args, **kargs):
method __setitem__ (line 399) | def __setitem__(self, key, val):
method __getitem__ (line 403) | def __getitem__(self, key):
method __contains__ (line 407) | def __contains__(self, key):
method __delitem__ (line 411) | def __delitem__(self, key):
method get (line 415) | def get(self, key, *args, **kwargs):
method setdefault (line 419) | def setdefault(self, key, *args, **kwargs):
method pop (line 424) | def pop(self, key, *args, **kwargs):
method matching_key_for (line 428) | def matching_key_for(self, key):
class CaseInsensitiveDict (line 440) | class CaseInsensitiveDict(KeyTransformingDict):
method transform_key (line 448) | def transform_key(key):
class HeaderMap (line 466) | class HeaderMap(CaseInsensitiveDict):
method elements (line 486) | def elements(self, key):
method values (line 492) | def values(self, key):
method output (line 496) | def output(self):
method encode_header_items (line 501) | def encode_header_items(cls, header_items):
method encode (line 526) | def encode(cls, v):
class Host (line 548) | class Host(object):
method __init__ (line 562) | def __init__(self, ip, port, name=None):
method __repr__ (line 569) | def __repr__(self):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/jsontools.py
function json_processor (line 5) | def json_processor(entity):
function json_in (line 15) | def json_in(content_type=[ntou('application/json'), ntou('text/javascrip...
function json_handler (line 57) | def json_handler(*args, **kwargs):
function json_out (line 62) | def json_out(content_type='application/json', debug=False,
FILE: 3rd_party/python2/site-packages/cherrypy/lib/lockfile.py
class LockError (line 18) | class LockError(Exception):
method __init__ (line 24) | def __init__(self, path):
class UnlockError (line 28) | class UnlockError(LockError):
class NaiveLockFile (line 36) | class NaiveLockFile(object):
method __init__ (line 43) | def __init__(self, path):
method release (line 51) | def release(self):
method remove (line 54) | def remove(self):
class SystemLockFile (line 58) | class SystemLockFile(object):
method __init__ (line 64) | def __init__(self, path):
method release (line 89) | def release(self):
method remove (line 96) | def remove(self):
method _unlock_file (line 105) | def _unlock_file(self):
class WindowsLockFile (line 110) | class WindowsLockFile(SystemLockFile):
method _lock_file (line 112) | def _lock_file(self):
method _unlock_file (line 119) | def _unlock_file(self):
class UnixLockFile (line 127) | class UnixLockFile(SystemLockFile):
method _lock_file (line 129) | def _lock_file(self):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/locking.py
class NeverExpires (line 4) | class NeverExpires(object):
method expired (line 5) | def expired(self):
class Timer (line 9) | class Timer(object):
method __init__ (line 13) | def __init__(self, expiration):
method after (line 18) | def after(cls, elapsed):
method expired (line 24) | def expired(self):
class LockTimeout (line 28) | class LockTimeout(Exception):
class LockChecker (line 32) | class LockChecker(object):
method __init__ (line 36) | def __init__(self, session_id, timeout):
method expired (line 43) | def expired(self):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/profiler.py
function new_func_strip_path (line 49) | def new_func_strip_path(func_name):
class Profiler (line 70) | class Profiler(object):
method __init__ (line 72) | def __init__(self, path=None):
method run (line 79) | def run(self, func, *args, **params):
method statfiles (line 89) | def statfiles(self):
method stats (line 95) | def stats(self, filename, sortby='cumulative'):
method index (line 121) | def index(self):
method menu (line 132) | def menu(self):
method report (line 142) | def report(self, filename):
class ProfileAggregator (line 147) | class ProfileAggregator(Profiler):
method __init__ (line 149) | def __init__(self, path=None):
method run (line 155) | def run(self, func, *args, **params):
class make_app (line 162) | class make_app:
method __init__ (line 164) | def __init__(self, nextapp, path=None, aggregate=False):
method __call__ (line 195) | def __call__(self, environ, start_response):
function serve (line 204) | def serve(path=None, port=8080):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/reprconf.py
function as_dict (line 40) | def as_dict(config):
class NamespaceSet (line 49) | class NamespaceSet(dict):
method __call__ (line 64) | def __call__(self, config):
method __repr__ (line 114) | def __repr__(self):
method __copy__ (line 118) | def __copy__(self):
class Config (line 125) | class Config(dict):
method __init__ (line 136) | def __init__(self, file=None, **kwargs):
method reset (line 143) | def reset(self):
method update (line 148) | def update(self, config):
method _apply (line 160) | def _apply(self, config):
method __setitem__ (line 172) | def __setitem__(self, k, v):
class Parser (line 177) | class Parser(ConfigParser):
method optionxform (line 183) | def optionxform(self, optionstr):
method read (line 186) | def read(self, filenames):
method as_dict (line 200) | def as_dict(self, raw=False, vars=None):
method dict_from_file (line 220) | def dict_from_file(self, file):
class _Builder2 (line 231) | class _Builder2:
method build (line 233) | def build(self, o):
method astnode (line 240) | def astnode(self, s):
method build_Subscript (line 252) | def build_Subscript(self, o):
method build_CallFunc (line 258) | def build_CallFunc(self, o):
method build_Keyword (line 279) | def build_Keyword(self, o):
method build_List (line 285) | def build_List(self, o):
method build_Const (line 288) | def build_Const(self, o):
method build_Dict (line 291) | def build_Dict(self, o):
method build_Tuple (line 298) | def build_Tuple(self, o):
method build_Name (line 301) | def build_Name(self, o):
method build_Add (line 324) | def build_Add(self, o):
method build_Mul (line 328) | def build_Mul(self, o):
method build_Getattr (line 332) | def build_Getattr(self, o):
method build_NoneType (line 336) | def build_NoneType(self, o):
method build_UnarySub (line 339) | def build_UnarySub(self, o):
method build_UnaryAdd (line 342) | def build_UnaryAdd(self, o):
class _Builder3 (line 346) | class _Builder3:
method build (line 348) | def build(self, o):
method astnode (line 355) | def astnode(self, s):
method build_Subscript (line 367) | def build_Subscript(self, o):
method build_Index (line 370) | def build_Index(self, o):
method _build_call35 (line 373) | def _build_call35(self, o):
method build_Call (line 402) | def build_Call(self, o):
method build_List (line 428) | def build_List(self, o):
method build_Str (line 431) | def build_Str(self, o):
method build_Num (line 434) | def build_Num(self, o):
method build_Dict (line 437) | def build_Dict(self, o):
method build_Tuple (line 441) | def build_Tuple(self, o):
method build_Name (line 444) | def build_Name(self, o):
method build_NameConstant (line 468) | def build_NameConstant(self, o):
method build_UnaryOp (line 471) | def build_UnaryOp(self, o):
method build_BinOp (line 475) | def build_BinOp(self, o):
method build_Add (line 479) | def build_Add(self, o):
method build_Mult (line 482) | def build_Mult(self, o):
method build_USub (line 485) | def build_USub(self, o):
method build_Attribute (line 488) | def build_Attribute(self, o):
method build_NoneType (line 492) | def build_NoneType(self, o):
function unrepr (line 496) | def unrepr(s):
function modules (line 508) | def modules(modulePath):
function attributes (line 514) | def attributes(full_attribute_name):
FILE: 3rd_party/python2/site-packages/cherrypy/lib/sessions.py
class Session (line 122) | class Session(object):
method _get_id (line 131) | def _get_id(self):
method _set_id (line 134) | def _set_id(self, value):
method __init__ (line 175) | def __init__(self, id=None, **kwargs):
method now (line 203) | def now(self):
method regenerate (line 211) | def regenerate(self):
method _regenerate (line 216) | def _regenerate(self):
method clean_up (line 246) | def clean_up(self):
method generate_id (line 250) | def generate_id(self):
method save (line 254) | def save(self):
method load (line 279) | def load(self):
method delete (line 310) | def delete(self):
method __getitem__ (line 319) | def __getitem__(self, key):
method __setitem__ (line 324) | def __setitem__(self, key, value):
method __delitem__ (line 329) | def __delitem__(self, key):
method pop (line 334) | def pop(self, key, default=missing):
method __contains__ (line 346) | def __contains__(self, key):
method get (line 351) | def get(self, key, default=None):
method update (line 357) | def update(self, d):
method setdefault (line 363) | def setdefault(self, key, default=None):
method clear (line 369) | def clear(self):
method keys (line 375) | def keys(self):
method items (line 381) | def items(self):
method values (line 387) | def values(self):
class RamSession (line 394) | class RamSession(Session):
method clean_up (line 400) | def clean_up(self):
method _exists (line 427) | def _exists(self):
method _load (line 430) | def _load(self):
method _save (line 433) | def _save(self, expiration_time):
method _delete (line 436) | def _delete(self):
method acquire_lock (line 439) | def acquire_lock(self):
method release_lock (line 444) | def release_lock(self):
method __len__ (line 449) | def __len__(self):
class FileSession (line 454) | class FileSession(Session):
method __init__ (line 473) | def __init__(self, id=None, **kwargs):
method setup (line 489) | def setup(cls, **kwargs):
method _get_file_path (line 501) | def _get_file_path(self):
method _exists (line 507) | def _exists(self):
method _load (line 511) | def _load(self, path=None):
method _save (line 529) | def _save(self, expiration_time):
method _delete (line 538) | def _delete(self):
method acquire_lock (line 546) | def acquire_lock(self, path=None):
method release_lock (line 563) | def release_lock(self, path=None):
method clean_up (line 569) | def clean_up(self):
method __len__ (line 601) | def __len__(self):
class MemcachedSession (line 608) | class MemcachedSession(Session):
method setup (line 620) | def setup(cls, **kwargs):
method _exists (line 632) | def _exists(self):
method _load (line 639) | def _load(self):
method _save (line 646) | def _save(self, expiration_time):
method _delete (line 657) | def _delete(self):
method acquire_lock (line 660) | def acquire_lock(self):
method release_lock (line 667) | def release_lock(self):
method __len__ (line 672) | def __len__(self):
function save (line 679) | def save():
function close (line 707) | def close():
function init (line 721) | def init(storage_type=None, path=None, path_header=None, name='session_id',
function set_response_cookie (line 838) | def set_response_cookie(path=None, path_header=None, name='session_id',
function _add_MSIE_max_age_workaround (line 891) | def _add_MSIE_max_age_workaround(cookie, timeout):
function expire (line 902) | def expire():
FILE: 3rd_party/python2/site-packages/cherrypy/lib/static.py
function _setup_mimetypes (line 19) | def _setup_mimetypes():
function serve_file (line 32) | def serve_file(path, content_type=None, disposition=None, name=None,
function serve_fileobj (line 108) | def serve_fileobj(fileobj, content_type=None, disposition=None, name=None,
function _serve_fileobj (line 161) | def _serve_fileobj(fileobj, content_type, content_length, debug=False):
function serve_download (line 245) | def serve_download(path, name=None):
function _attempt (line 251) | def _attempt(filename, content_types, debug=False):
function staticdir (line 272) | def staticdir(section, dir, root='', match='', content_types=None, index...
function staticfile (line 354) | def staticfile(filename, root=None, match='', content_types=None, debug=...
FILE: 3rd_party/python2/site-packages/cherrypy/lib/xmlrpcutil.py
function process_body (line 13) | def process_body():
function patched_path (line 21) | def patched_path(path):
function _set_response (line 31) | def _set_response(body):
function respond (line 44) | def respond(body, encoding='utf-8', allow_none=0):
function on_error (line 58) | def on_error(*args, **kwargs):
FILE: 3rd_party/python2/site-packages/cherrypy/process/plugins.py
class SimplePlugin (line 34) | class SimplePlugin(object):
method __init__ (line 42) | def __init__(self, bus):
method subscribe (line 45) | def subscribe(self):
method unsubscribe (line 53) | def unsubscribe(self):
class SignalHandler (line 62) | class SignalHandler(object):
method __init__ (line 98) | def __init__(self, bus):
method _jython_SIGINT_handler (line 117) | def _jython_SIGINT_handler(self, signum=None, frame=None):
method _is_daemonized (line 122) | def _is_daemonized(self):
method subscribe (line 140) | def subscribe(self):
method unsubscribe (line 148) | def unsubscribe(self):
method set_handler (line 169) | def set_handler(self, signal, listener=None):
method _handle_signal (line 197) | def _handle_signal(self, signum=None, frame=None):
method handle_SIGHUP (line 203) | def handle_SIGHUP(self):
class DropPrivileges (line 221) | class DropPrivileges(SimplePlugin):
method __init__ (line 229) | def __init__(self, bus, umask=None, uid=None, gid=None):
method _get_uid (line 236) | def _get_uid(self):
method _set_uid (line 239) | def _set_uid(self, val):
method _get_gid (line 251) | def _get_gid(self):
method _set_gid (line 254) | def _set_gid(self, val):
method _get_umask (line 266) | def _get_umask(self):
method _set_umask (line 269) | def _set_umask(self, val):
method start (line 288) | def start(self):
class Daemonizer (line 335) | class Daemonizer(SimplePlugin):
method __init__ (line 353) | def __init__(self, bus, stdin='/dev/null', stdout='/dev/null',
method start (line 361) | def start(self):
method daemonize (line 381) | def daemonize(
class PIDFile (line 426) | class PIDFile(SimplePlugin):
method __init__ (line 430) | def __init__(self, bus, pidfile):
method start (line 435) | def start(self):
method exit (line 445) | def exit(self):
class PerpetualTimer (line 455) | class PerpetualTimer(Timer):
method __init__ (line 464) | def __init__(self, *args, **kwargs):
method run (line 469) | def run(self):
class BackgroundTask (line 485) | class BackgroundTask(threading.Thread):
method __init__ (line 496) | def __init__(self, interval, function, args=[], kwargs={}, bus=None):
method cancel (line 508) | def cancel(self):
method run (line 511) | def run(self):
class Monitor (line 527) | class Monitor(SimplePlugin):
method __init__ (line 542) | def __init__(self, bus, callback, frequency=60, name=None):
method start (line 549) | def start(self):
method stop (line 563) | def stop(self):
method graceful (line 578) | def graceful(self):
class Autoreloader (line 584) | class Autoreloader(Monitor):
method __init__ (line 615) | def __init__(self, bus, frequency=1, match='.*'):
method start (line 621) | def start(self):
method sysfiles (line 628) | def sysfiles(self):
method run (line 651) | def run(self):
class ThreadManager (line 684) | class ThreadManager(SimplePlugin):
method __init__ (line 704) | def __init__(self, bus):
method acquire_thread (line 712) | def acquire_thread(self):
method release_thread (line 726) | def release_thread(self):
method stop (line 733) | def stop(self):
FILE: 3rd_party/python2/site-packages/cherrypy/process/servers.py
class Timeouts (line 129) | class Timeouts:
class ServerAdapter (line 134) | class ServerAdapter(object):
method __init__ (line 149) | def __init__(self, bus, httpserver=None, bind_addr=None):
method subscribe (line 156) | def subscribe(self):
method unsubscribe (line 160) | def unsubscribe(self):
method start (line 164) | def start(self):
method description (line 190) | def description(self):
method _get_base (line 202) | def _get_base(self):
method _start_http_thread (line 217) | def _start_http_thread(self):
method wait (line 242) | def wait(self):
method bound_addr (line 263) | def bound_addr(self):
method stop (line 274) | def stop(self):
method restart (line 288) | def restart(self):
class FlupCGIServer (line 294) | class FlupCGIServer(object):
method __init__ (line 298) | def __init__(self, *args, **kwargs):
method start (line 303) | def start(self):
method stop (line 313) | def stop(self):
class FlupFCGIServer (line 318) | class FlupFCGIServer(object):
method __init__ (line 322) | def __init__(self, *args, **kwargs):
method start (line 334) | def start(self):
method stop (line 354) | def stop(self):
class FlupSCGIServer (line 364) | class FlupSCGIServer(object):
method __init__ (line 368) | def __init__(self, *args, **kwargs):
method start (line 373) | def start(self):
method stop (line 393) | def stop(self):
function _safe_wait (line 403) | def _safe_wait(host, port):
FILE: 3rd_party/python2/site-packages/cherrypy/process/win32.py
class ConsoleCtrlHandler (line 13) | class ConsoleCtrlHandler(plugins.SimplePlugin):
method __init__ (line 17) | def __init__(self, bus):
method start (line 21) | def start(self):
method stop (line 34) | def stop(self):
method handle (line 52) | def handle(self, event):
class Win32Bus (line 71) | class Win32Bus(wspbus.Bus):
method __init__ (line 78) | def __init__(self):
method _get_state_event (line 82) | def _get_state_event(self, state):
method _get_state (line 93) | def _get_state(self):
method _set_state (line 96) | def _set_state(self, value):
method wait (line 102) | def wait(self, state, interval=0.1, channel=None):
class _ControlCodes (line 121) | class _ControlCodes(dict):
method key_for (line 133) | def key_for(self, obj):
function signal_child (line 144) | def signal_child(service, command):
class PyWebService (line 153) | class PyWebService(win32serviceutil.ServiceFramework):
method SvcDoRun (line 166) | def SvcDoRun(self):
method SvcStop (line 171) | def SvcStop(self):
method SvcOther (line 176) | def SvcOther(self, control):
FILE: 3rd_party/python2/site-packages/cherrypy/process/wspbus.py
class ChannelFailures (line 96) | class ChannelFailures(Exception):
method __init__ (line 101) | def __init__(self, *args, **kwargs):
method handle_exception (line 106) | def handle_exception(self):
method get_instances (line 110) | def get_instances(self):
method __str__ (line 114) | def __str__(self):
method __bool__ (line 121) | def __bool__(self):
class _StateEnum (line 129) | class _StateEnum(object):
class State (line 131) | class State(object):
method __repr__ (line 134) | def __repr__(self):
method __setattr__ (line 137) | def __setattr__(self, key, value):
class Bus (line 162) | class Bus(object):
method __init__ (line 177) | def __init__(self):
method subscribe (line 188) | def subscribe(self, channel, callback=None, priority=None):
method unsubscribe (line 208) | def unsubscribe(self, channel, callback):
method publish (line 215) | def publish(self, channel, *args, **kwargs):
method _clean_exit (line 251) | def _clean_exit(self):
method start (line 261) | def start(self):
method exit (line 285) | def exit(self):
method restart (line 312) | def restart(self):
method graceful (line 321) | def graceful(self):
method block (line 326) | def block(self, interval=0.1):
method wait (line 371) | def wait(self, state, interval=0.1, channel=None):
method _do_execv (line 396) | def _do_execv(self):
method _get_interpreter_argv (line 425) | def _get_interpreter_argv():
method _get_true_argv (line 443) | def _get_true_argv():
method _extend_pythonpath (line 528) | def _extend_pythonpath(env):
method _set_cloexec (line 552) | def _set_cloexec(self):
method stop (line 570) | def stop(self):
method start_with_callback (line 578) | def start_with_callback(self, func, args=None, kwargs=None):
method log (line 597) | def log(self, msg='', level=20, traceback=False):
FILE: 3rd_party/python2/site-packages/cherrypy/scaffold/__init__.py
class Root (line 23) | class Root:
method index (line 27) | def index(self):
method default (line 38) | def default(self, *args, **kwargs):
method other (line 43) | def other(self, a=2, b='bananas', c=None):
FILE: 3rd_party/python2/site-packages/cherrypy/test/__init__.py
function newexit (line 9) | def newexit():
function setup (line 13) | def setup():
function teardown (line 20) | def teardown():
FILE: 3rd_party/python2/site-packages/cherrypy/test/_test_decorators.py
class ExposeExamples (line 7) | class ExposeExamples(object):
method no_call (line 10) | def no_call(self):
method call_empty (line 14) | def call_empty(self):
method nesbitt (line 18) | def nesbitt(self):
method andrews (line 22) | def andrews(self):
method watson (line 26) | def watson(self):
class ToolExamples (line 30) | class ToolExamples(object):
method blah (line 38) | def blah(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/_test_states_demo.py
class Root (line 10) | class Root:
method index (line 13) | def index(self):
method mtimes (line 17) | def mtimes(self):
method pid (line 21) | def pid(self):
method start (line 25) | def start(self):
method exit (line 29) | def exit(self):
function unsub_sig (line 39) | def unsub_sig():
function starterror (line 57) | def starterror():
function log_test_case_name (line 63) | def log_test_case_name():
FILE: 3rd_party/python2/site-packages/cherrypy/test/benchmark.py
class Root (line 49) | class Root:
method index (line 52) | def index(self):
method hello (line 69) | def hello(self):
method sizer (line 73) | def sizer(self, size):
class NullRequest (line 105) | class NullRequest:
method __init__ (line 109) | def __init__(self, local, remote, scheme='http'):
method close (line 112) | def close(self):
method run (line 115) | def run(self, method, path, query_string, protocol, headers, rfile):
class NullResponse (line 126) | class NullResponse:
class ABSession (line 130) | class ABSession:
method __init__ (line 204) | def __init__(self, path=SCRIPT_NAME + '/hello', requests=1000,
method args (line 210) | def args(self):
method run (line 220) | def run(self):
function thread_report (line 243) | def thread_report(path=SCRIPT_NAME + '/hello', concurrency=safe_threads):
function size_report (line 269) | def size_report(sizes=(10, 100, 1000, 10000, 100000, 100000000),
function print_report (line 280) | def print_report(rows):
function run_standard_benchmarks (line 288) | def run_standard_benchmarks():
function startup_modpython (line 307) | def startup_modpython(req=None):
function run_modpython (line 325) | def run_modpython(use_wsgi=False):
function run (line 376) | def run():
function run (line 384) | def run():
class NullWriter (line 400) | class NullWriter(object):
method write (line 404) | def write(self, data):
FILE: 3rd_party/python2/site-packages/cherrypy/test/checkerdemo.py
class Root (line 13) | class Root:
FILE: 3rd_party/python2/site-packages/cherrypy/test/helper.py
class Supervisor (line 30) | class Supervisor(object):
method __init__ (line 34) | def __init__(self, **kwargs):
function log_to_stderr (line 41) | def log_to_stderr(msg, level):
class LocalSupervisor (line 45) | class LocalSupervisor(Supervisor):
method __init__ (line 59) | def __init__(self, **kwargs):
method start (line 74) | def start(self, modulename=None):
method sync_apps (line 85) | def sync_apps(self):
method stop (line 89) | def stop(self):
class NativeServerSupervisor (line 102) | class NativeServerSupervisor(LocalSupervisor):
method __str__ (line 110) | def __str__(self):
class LocalWSGISupervisor (line 114) | class LocalWSGISupervisor(LocalSupervisor):
method __str__ (line 122) | def __str__(self):
method sync_apps (line 125) | def sync_apps(self):
method get_app (line 129) | def get_app(self, app=None):
function get_cpmodpy_supervisor (line 147) | def get_cpmodpy_supervisor(**options):
function get_modpygw_supervisor (line 154) | def get_modpygw_supervisor(**options):
function get_modwsgi_supervisor (line 162) | def get_modwsgi_supervisor(**options):
function get_modfcgid_supervisor (line 167) | def get_modfcgid_supervisor(**options):
function get_modfastcgi_supervisor (line 172) | def get_modfastcgi_supervisor(**options):
function get_wsgi_u_supervisor (line 177) | def get_wsgi_u_supervisor(**options):
class CPWebCase (line 182) | class CPWebCase(webtest.WebCase):
method _setup_server (line 199) | def _setup_server(cls, supervisor, conf):
method setup_class (line 243) | def setup_class(cls):
method teardown_class (line 281) | def teardown_class(cls):
method test_gc (line 288) | def test_gc(self):
method prefix (line 298) | def prefix(self):
method base (line 301) | def base(self):
method exit (line 311) | def exit(self):
method getPage (line 314) | def getPage(self, url, headers=None, method='GET', body=None,
method skip (line 328) | def skip(self, msg='skipped '):
method assertErrorPage (line 331) | def assertErrorPage(self, status, message=None, pattern=''):
method assertEqualDates (line 368) | def assertEqualDates(self, dt1, dt2, seconds=None):
function _test_method_sorter (line 382) | def _test_method_sorter(_, x, y):
function setup_client (line 398) | def setup_client():
class CPProcess (line 408) | class CPProcess(object):
method __init__ (line 425) | def __init__(self, wait=False, daemonize=False, ssl=False,
method write_conf (line 433) | def write_conf(self, extra=''):
method start (line 454) | def start(self, imports=None):
method get_pid (line 514) | def get_pid(self):
method join (line 519) | def join(self):
method _join_daemon (line 525) | def _join_daemon(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/logtest.py
function getchar (line 16) | def getchar():
function getchar (line 23) | def getchar():
class LogCase (line 34) | class LogCase(object):
method _handleLogError (line 52) | def _handleLogError(self, msg, data, marker, pattern):
method exit (line 94) | def exit(self):
method emptyLog (line 97) | def emptyLog(self):
method markLog (line 101) | def markLog(self, key=None):
method _read_marked_region (line 110) | def _read_marked_region(self, marker=None):
method assertInLog (line 138) | def assertInLog(self, line, marker=None):
method assertNotInLog (line 152) | def assertNotInLog(self, line, marker=None):
method assertValidUUIDv4 (line 165) | def assertValidUUIDv4(self, marker=None):
method assertLog (line 192) | def assertLog(self, sliceargs, lines, marker=None):
FILE: 3rd_party/python2/site-packages/cherrypy/test/modfastcgi.py
function read_process (line 46) | def read_process(cmd, args=''):
function erase_script_name (line 83) | def erase_script_name(environ, start_response):
class ModFCGISupervisor (line 88) | class ModFCGISupervisor(helper.LocalWSGISupervisor):
method __str__ (line 95) | def __str__(self):
method start (line 98) | def start(self, modulename):
method start_apache (line 109) | def start_apache(self):
method stop (line 129) | def stop(self):
method sync_apps (line 134) | def sync_apps(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/modfcgid.py
function read_process (line 47) | def read_process(cmd, args=''):
class ModFCGISupervisor (line 80) | class ModFCGISupervisor(helper.LocalSupervisor):
method __str__ (line 86) | def __str__(self):
method start (line 89) | def start(self, modulename):
method start_apache (line 98) | def start_apache(self):
method stop (line 118) | def stop(self):
method sync_apps (line 123) | def sync_apps(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/modpy.py
function read_process (line 46) | def read_process(cmd, args=''):
class ModPythonSupervisor (line 96) | class ModPythonSupervisor(helper.Supervisor):
method __str__ (line 102) | def __str__(self):
method start (line 105) | def start(self, modulename):
method stop (line 122) | def stop(self):
function wsgisetup (line 130) | def wsgisetup(req):
function cpmodpysetup (line 152) | def cpmodpysetup(req):
FILE: 3rd_party/python2/site-packages/cherrypy/test/modwsgi.py
function read_process (line 50) | def read_process(cmd, args=''):
class ModWSGISupervisor (line 96) | class ModWSGISupervisor(helper.Supervisor):
method __str__ (line 104) | def __str__(self):
method start (line 107) | def start(self, modulename):
method stop (line 131) | def stop(self):
function application (line 139) | def application(environ, start_response):
FILE: 3rd_party/python2/site-packages/cherrypy/test/sessiondemo.py
class Root (line 101) | class Root(object):
method page (line 103) | def page(self):
method index (line 137) | def index(self):
method expire (line 143) | def expire(self):
method regen (line 148) | def regen(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_auth_basic.py
class BasicAuthTest (line 13) | class BasicAuthTest(helper.CPWebCase):
method setup_server (line 16) | def setup_server():
method testPublic (line 63) | def testPublic(self):
method testBasic (line 69) | def testBasic(self):
method testBasic2 (line 83) | def testBasic2(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_auth_digest.py
class DigestAuthTest (line 12) | class DigestAuthTest(helper.CPWebCase):
method setup_server (line 15) | def setup_server():
method testPublic (line 43) | def testPublic(self):
method testDigest (line 49) | def testDigest(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_bus.py
class PublishSubscribeTests (line 11) | class PublishSubscribeTests(unittest.TestCase):
method get_listener (line 13) | def get_listener(self, channel, index):
method test_builtin_channels (line 18) | def test_builtin_channels(self):
method test_custom_channels (line 36) | def test_custom_channels(self):
method test_listener_errors (line 56) | def test_listener_errors(self):
class BusMethodTests (line 74) | class BusMethodTests(unittest.TestCase):
method log (line 76) | def log(self, bus):
method assertLog (line 83) | def assertLog(self, entries):
method get_listener (line 86) | def get_listener(self, channel, index):
method test_start (line 91) | def test_start(self):
method test_stop (line 115) | def test_stop(self):
method test_graceful (line 134) | def test_graceful(self):
method test_exit (line 152) | def test_exit(self):
method test_wait (line 175) | def test_wait(self):
method test_block (line 195) | def test_block(self):
method test_start_with_callback (line 225) | def test_start_with_callback(self):
method test_log (line 248) | def test_log(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_caching.py
class CacheTest (line 27) | class CacheTest(helper.CPWebCase):
method setup_server (line 30) | def setup_server():
method testCaching (line 147) | def testCaching(self):
method testVaryHeader (line 197) | def testVaryHeader(self):
method testExpiresTool (line 220) | def testExpiresTool(self):
method _assert_resp_len_and_enc_for_gzip (line 286) | def _assert_resp_len_and_enc_for_gzip(self, uri):
method testGzipStaticCache (line 310) | def testGzipStaticCache(self):
method testLastModified (line 322) | def testLastModified(self):
method test_antistampede (line 344) | def test_antistampede(self):
method test_cache_control (line 372) | def test_cache_control(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_compat.py
class StringTester (line 12) | class StringTester(unittest.TestCase):
method test_ntob_non_native (line 16) | def test_ntob_non_native(self):
class EscapeTester (line 26) | class EscapeTester(unittest.TestCase):
method test_escape_quote (line 29) | def test_escape_quote(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_config.py
function StringIOFromNative (line 18) | def StringIOFromNative(x):
function setup_server (line 22) | def setup_server():
class ConfigTests (line 145) | class ConfigTests(helper.CPWebCase):
method testConfig (line 148) | def testConfig(self):
method testUnrepr (line 189) | def testUnrepr(self):
method testRespNamespaces (line 219) | def testRespNamespaces(self):
method testCustomNamespaces (line 224) | def testCustomNamespaces(self):
method testHandlerToolConfigOverride (line 231) | def testHandlerToolConfigOverride(self):
method test_request_body_namespace (line 239) | def test_request_body_namespace(self):
class VariableSubstitutionTests (line 247) | class VariableSubstitutionTests(unittest.TestCase):
method test_config (line 250) | def test_config(self):
class CallablesInConfigTest (line 273) | class CallablesInConfigTest(unittest.TestCase):
method test_call_with_literal_dict (line 276) | def test_call_with_literal_dict(self):
method test_call_with_kwargs (line 286) | def test_call_with_kwargs(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_config_server.py
class ServerConfigTests (line 15) | class ServerConfigTests(helper.CPWebCase):
method setup_server (line 18) | def setup_server():
method testBasicConfig (line 55) | def testBasicConfig(self):
method testAdditionalServers (line 59) | def testAdditionalServers(self):
method testMaxRequestSizePerHandler (line 69) | def testMaxRequestSizePerHandler(self):
method testMaxRequestSize (line 86) | def testMaxRequestSize(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_conn.py
function setup_server (line 25) | def setup_server():
class ConnectionCloseTests (line 106) | class ConnectionCloseTests(helper.CPWebCase):
method test_HTTP11 (line 109) | def test_HTTP11(self):
method test_Streaming_no_len (line 138) | def test_Streaming_no_len(self):
method test_Streaming_with_len (line 147) | def test_Streaming_with_len(self):
method _streaming (line 156) | def _streaming(self, set_cl):
method test_HTTP10_KeepAlive (line 246) | def test_HTTP10_KeepAlive(self):
class PipelineTests (line 276) | class PipelineTests(helper.CPWebCase):
method test_HTTP11_Timeout (line 279) | def test_HTTP11_Timeout(self):
method test_HTTP11_Timeout_after_request (line 319) | def test_HTTP11_Timeout_after_request(self):
method test_HTTP11_pipelining (line 417) | def test_HTTP11_pipelining(self):
method test_100_Continue (line 460) | def test_100_Continue(self):
class ConnectionTests (line 521) | class ConnectionTests(helper.CPWebCase):
method test_readall_or_close (line 524) | def test_readall_or_close(self):
method test_No_Message_Body (line 596) | def test_No_Message_Body(self):
method test_Chunked_Encoding (line 625) | def test_Chunked_Encoding(self):
method test_Content_Length_in (line 675) | def test_Content_Length_in(self):
method test_Content_Length_out_preheaders (line 692) | def test_Content_Length_out_preheaders(self):
method test_Content_Length_out_postheaders (line 709) | def test_Content_Length_out_postheaders(self):
method test_598 (line 725) | def test_598(self):
function setup_upload_server (line 750) | def setup_upload_server():
class LimitedRequestQueueTests (line 784) | class LimitedRequestQueueTests(helper.CPWebCase):
method test_queue_full (line 788) | def test_queue_full(self):
class BadRequestTests (line 853) | class BadRequestTests(helper.CPWebCase):
method test_No_CRLF (line 856) | def test_No_CRLF(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_core.py
class CoreRequestHandlingTest (line 26) | class CoreRequestHandlingTest(helper.CPWebCase):
method setup_server (line 29) | def setup_server():
method testStatus (line 292) | def testStatus(self):
method test_on_end_resource_status (line 316) | def test_on_end_resource_status(self):
method testSlashes (line 322) | def testSlashes(self):
method testRedirect (line 360) | def testRedirect(self):
method test_redirect_with_xss (line 456) | def test_redirect_with_xss(self):
method test_redirect_with_unicode (line 464) | def test_redirect_with_unicode(self):
method test_InternalRedirect (line 476) | def test_InternalRedirect(self):
method testFlatten (line 520) | def testFlatten(self):
method testRanges (line 527) | def testRanges(self):
method testFavicon (line 583) | def testFavicon(self):
method skip_if_bad_cookies (line 593) | def skip_if_bad_cookies(self):
method testCookies (line 606) | def testCookies(self):
method testDefaultContentType (line 623) | def testDefaultContentType(self):
method test_multiple_headers (line 631) | def test_multiple_headers(self):
method test_cherrypy_url (line 641) | def test_cherrypy_url(self):
method test_expose_decorator (line 724) | def test_expose_decorator(self):
class ErrorTests (line 762) | class ErrorTests(helper.CPWebCase):
method setup_server (line 765) | def setup_server():
method test_start_response_error (line 791) | def test_start_response_error(self):
method test_contextmanager (line 797) | def test_contextmanager(self):
class TestBinding (line 807) | class TestBinding:
method test_bind_ephemeral_port (line 808) | def test_bind_ephemeral_port(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_dynamicobjectmapping.py
function setup_server (line 9) | def setup_server():
class DynamicObjectMappingTest (line 268) | class DynamicObjectMappingTest(helper.CPWebCase):
method testObjectMapping (line 271) | def testObjectMapping(self):
method testMethodDispatch (line 339) | def testMethodDispatch(self):
method testVpathDispatch (line 398) | def testVpathDispatch(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_encoding.py
class EncodingTests (line 23) | class EncodingTests(helper.CPWebCase):
method setup_server (line 26) | def setup_server():
method test_query_string_decoding (line 122) | def test_query_string_decoding(self):
method test_urlencoded_decoding (line 145) | def test_urlencoded_decoding(self):
method test_decode_tool (line 199) | def test_decode_tool(self):
method test_multipart_decoding (line 237) | def test_multipart_decoding(self):
method test_multipart_decoding_bigger_maxrambytes (line 262) | def test_multipart_decoding_bigger_maxrambytes(self):
method test_multipart_decoding_no_charset (line 269) | def test_multipart_decoding_no_charset(self):
method test_multipart_decoding_no_successful_charset (line 291) | def test_multipart_decoding_no_successful_charset(self):
method test_nontext (line 317) | def test_nontext(self):
method testEncoding (line 322) | def testEncoding(self):
method testGzip (line 363) | def testGzip(self):
method test_UnicodeHeaders (line 419) | def test_UnicodeHeaders(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_etags.py
class ETagTest (line 6) | class ETagTest(helper.CPWebCase):
method setup_server (line 9) | def setup_server():
method test_etags (line 35) | def test_etags(self):
method test_errors (line 63) | def test_errors(self):
method test_unicode_body (line 78) | def test_unicode_body(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_http.py
function encode_multipart_formdata (line 19) | def encode_multipart_formdata(files):
class HTTPTests (line 41) | class HTTPTests(helper.CPWebCase):
method make_connection (line 43) | def make_connection(self):
method setup_server (line 50) | def setup_server():
method test_no_content_length (line 95) | def test_no_content_length(self):
method test_post_multipart (line 134) | def test_post_multipart(self):
method test_post_filename_with_special_characters (line 159) | def test_post_filename_with_special_characters(self):
method test_malformed_request_line (line 186) | def test_malformed_request_line(self):
method test_request_line_split_issue_1220 (line 205) | def test_request_line_split_issue_1220(self):
method test_malformed_header (line 219) | def test_malformed_header(self):
method test_http_over_https (line 233) | def test_http_over_https(self):
method test_garbage_in (line 255) | def test_garbage_in(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_httpauth.py
class HTTPAuthTest (line 10) | class HTTPAuthTest(helper.CPWebCase):
method setup_server (line 13) | def setup_server():
method testPublic (line 77) | def testPublic(self):
method testBasic (line 83) | def testBasic(self):
method testBasic2 (line 95) | def testBasic2(self):
method testDigest (line 107) | def testDigest(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_httputil.py
function test_urljoin (line 29) | def test_urljoin(script_name, path_info, expected_url):
function test_valid_status (line 56) | def test_valid_status(status, expected_status):
function test_invalid_status (line 75) | def test_invalid_status(status_code, error_msg):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_iterator.py
class IteratorBase (line 7) | class IteratorBase(object):
method incr (line 13) | def incr(cls):
method decr (line 17) | def decr(cls):
class OurGenerator (line 21) | class OurGenerator(IteratorBase):
method __iter__ (line 23) | def __iter__(self):
class OurIterator (line 32) | class OurIterator(IteratorBase):
method increment (line 38) | def increment(self):
method decrement (line 41) | def decrement(self):
method __iter__ (line 46) | def __iter__(self):
method __next__ (line 49) | def __next__(self):
method __del__ (line 60) | def __del__(self):
class OurClosableIterator (line 64) | class OurClosableIterator(OurIterator):
method close (line 66) | def close(self):
class OurNotClosableIterator (line 70) | class OurNotClosableIterator(OurIterator):
method close (line 73) | def close(self, somearg):
class OurUnclosableIterator (line 77) | class OurUnclosableIterator(OurIterator):
class IteratorTest (line 81) | class IteratorTest(helper.CPWebCase):
method setup_server (line 84) | def setup_server():
method test_iterator (line 105) | def test_iterator(self):
method _test_iterator (line 111) | def _test_iterator(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_json.py
class JsonTest (line 11) | class JsonTest(helper.CPWebCase):
method setup_server (line 14) | def setup_server():
method test_json_output (line 53) | def test_json_output(self):
method test_json_input (line 70) | def test_json_input(self):
method test_cached (line 93) | def test_cached(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_logging.py
function setup_server (line 21) | def setup_server():
class AccessLogTests (line 68) | class AccessLogTests(helper.CPWebCase, logtest.LogCase):
method testNormalReturn (line 73) | def testNormalReturn(self):
method testNormalYield (line 94) | def testNormalYield(self):
method testCustomLogFormat (line 116) | def testCustomLogFormat(self):
method testTimezLogFormat (line 133) | def testTimezLogFormat(self):
method testUUIDv4ParameterLogFormat (line 155) | def testUUIDv4ParameterLogFormat(self):
method testEscapedOutput (line 161) | def testEscapedOutput(self):
class ErrorLogTests (line 192) | class ErrorLogTests(helper.CPWebCase, logtest.LogCase):
method testTracebacks (line 197) | def testTracebacks(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_mime.py
function setup_server (line 8) | def setup_server():
class MultipartTest (line 32) | class MultipartTest(helper.CPWebCase):
method test_multipart (line 35) | def test_multipart(self):
method test_multipart_form_data (line 67) | def test_multipart_form_data(self):
class SafeMultipartHandlingTest (line 96) | class SafeMultipartHandlingTest(helper.CPWebCase):
method test_Flash_Upload (line 99) | def test_Flash_Upload(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_misc_tools.py
function setup_server (line 12) | def setup_server():
class ResponseHeadersTest (line 97) | class ResponseHeadersTest(helper.CPWebCase):
method testResponseHeadersDecorator (line 100) | def testResponseHeadersDecorator(self):
method testResponseHeaders (line 105) | def testResponseHeaders(self):
class RefererTest (line 111) | class RefererTest(helper.CPWebCase):
method testReferer (line 114) | def testReferer(self):
class AcceptTest (line 133) | class AcceptTest(helper.CPWebCase):
method test_Accept_Tool (line 136) | def test_Accept_Tool(self):
method test_accept_selection (line 170) | def test_accept_selection(self):
class AutoVaryTest (line 201) | class AutoVaryTest(helper.CPWebCase):
method testAutoVary (line 204) | def testAutoVary(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_objectmapping.py
class ObjectMappingTest (line 10) | class ObjectMappingTest(helper.CPWebCase):
method setup_server (line 13) | def setup_server():
method testObjectMapping (line 177) | def testObjectMapping(self):
method test_translate (line 287) | def test_translate(self):
method test_redir_using_url (line 300) | def test_redir_using_url(self):
method testPositionalParams (line 324) | def testPositionalParams(self):
method testExpose (line 338) | def testExpose(self):
method testMethodDispatch (line 358) | def testMethodDispatch(self):
method testTreeMounting (line 388) | def testTreeMounting(self):
method testKeywords (line 418) | def testKeywords(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_params.py
class ParamsTest (line 8) | class ParamsTest(helper.CPWebCase):
method setup_server (line 10) | def setup_server():
method test_pass (line 22) | def test_pass(self):
method test_error (line 31) | def test_error(self):
method test_syntax (line 45) | def test_syntax(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_proxy.py
class ProxyTest (line 7) | class ProxyTest(helper.CPWebCase):
method setup_server (line 10) | def setup_server():
method testProxy (line 71) | def testProxy(self):
method test_no_base_port_in_host (line 147) | def test_no_base_port_in_host(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_refleaks.py
class ReferenceTests (line 17) | class ReferenceTests(helper.CPWebCase):
method setup_server (line 20) | def setup_server():
method test_threadlocal_garbage (line 31) | def test_threadlocal_garbage(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_request_obj.py
class RequestObjectTests (line 26) | class RequestObjectTests(helper.CPWebCase):
method setup_server (line 29) | def setup_server():
method test_scheme (line 323) | def test_scheme(self):
method test_per_request_uuid4 (line 327) | def test_per_request_uuid4(self):
method testRelativeURIPathInfo (line 342) | def testRelativeURIPathInfo(self):
method testAbsoluteURIPathInfo (line 346) | def testAbsoluteURIPathInfo(self):
method testParams (line 351) | def testParams(self):
method testParamErrors (line 396) | def testParamErrors(self):
method testErrorHandling (line 554) | def testErrorHandling(self):
method testExpect (line 633) | def testExpect(self):
method testHeaderElements (line 641) | def testHeaderElements(self):
method test_repeated_headers (line 703) | def test_repeated_headers(self):
method test_encoded_headers (line 719) | def test_encoded_headers(self):
method test_header_presence (line 748) | def test_header_presence(self):
method test_basic_HTTPMethods (line 761) | def test_basic_HTTPMethods(self):
method test_CONNECT_method (line 888) | def test_CONNECT_method(self):
method test_CONNECT_method_invalid_authority (line 911) | def test_CONNECT_method_invalid_authority(self):
method testEmptyThreadlocals (line 927) | def testEmptyThreadlocals(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_routes.py
class RoutesDispatchTest (line 13) | class RoutesDispatchTest(helper.CPWebCase):
method setup_server (line 17) | def setup_server():
method test_Routes_Dispatch (line 61) | def test_Routes_Dispatch(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_session.py
function http_methods_allowed (line 25) | def http_methods_allowed(methods=['GET', 'HEAD']):
function setup_server (line 35) | def setup_server():
class SessionTest (line 142) | class SessionTest(helper.CPWebCase):
method tearDown (line 145) | def tearDown(self):
method test_0_Session (line 153) | def test_0_Session(self):
method test_1_Ram_Concurrency (line 231) | def test_1_Ram_Concurrency(self):
method test_2_File_Concurrency (line 236) | def test_2_File_Concurrency(self):
method _test_Concurrency (line 240) | def _test_Concurrency(self):
method test_3_Redirect (line 290) | def test_3_Redirect(self):
method test_4_File_deletion (line 296) | def test_4_File_deletion(self):
method test_5_Error_paths (line 305) | def test_5_Error_paths(self):
method test_6_regenerate (line 317) | def test_6_regenerate(self):
method test_7_session_cookies (line 338) | def test_7_session_cookies(self):
method test_8_Ram_Cleanup (line 381) | def test_8_Ram_Cleanup(self):
class MemcachedSessionTest (line 422) | class MemcachedSessionTest(helper.CPWebCase):
method test (line 425) | def test(self):
method test_0_Session (line 431) | def test_0_Session(self):
method test_1_Concurrency (line 459) | def test_1_Concurrency(self):
method test_3_Redirect (line 495) | def test_3_Redirect(self):
method test_5_Error_paths (line 501) | def test_5_Error_paths(self):
class MemcachedSessionTest (line 428) | class MemcachedSessionTest(helper.CPWebCase):
method test (line 425) | def test(self):
method test_0_Session (line 431) | def test_0_Session(self):
method test_1_Concurrency (line 459) | def test_1_Concurrency(self):
method test_3_Redirect (line 495) | def test_3_Redirect(self):
method test_5_Error_paths (line 501) | def test_5_Error_paths(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_sessionauthenticate.py
class SessionAuthenticateTest (line 5) | class SessionAuthenticateTest(helper.CPWebCase):
method setup_server (line 8) | def setup_server():
method testSessionAuthenticate (line 39) | def testSessionAuthenticate(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_states.py
class Dependency (line 20) | class Dependency:
method __init__ (line 22) | def __init__(self, bus):
method subscribe (line 29) | def subscribe(self):
method start (line 36) | def start(self):
method stop (line 40) | def stop(self):
method graceful (line 43) | def graceful(self):
method startthread (line 46) | def startthread(self, thread_id):
method stopthread (line 49) | def stopthread(self, thread_id):
function setup_server (line 56) | def setup_server():
class ServerStateTests (line 82) | class ServerStateTests(helper.CPWebCase):
method setUp (line 85) | def setUp(self):
method test_0_NormalStateFlow (line 89) | def test_0_NormalStateFlow(self):
method test_1_Restart (line 131) | def test_1_Restart(self):
method test_2_KeyboardInterrupt (line 167) | def test_2_KeyboardInterrupt(self):
method test_4_Autoreload (line 225) | def test_4_Autoreload(self):
method test_5_Start_Error (line 260) | def test_5_Start_Error(self):
class PluginTests (line 280) | class PluginTests(helper.CPWebCase):
method test_daemonize (line 282) | def test_daemonize(self):
class SignalHandlingTests (line 314) | class SignalHandlingTests(helper.CPWebCase):
method test_SIGHUP_tty (line 316) | def test_SIGHUP_tty(self):
method test_SIGHUP_daemonized (line 333) | def test_SIGHUP_daemonized(self):
method _require_signal_and_kill (line 367) | def _require_signal_and_kill(self, signal_name):
method test_SIGTERM (line 374) | def test_SIGTERM(self):
method test_signal_handler_unsubscribe (line 400) | def test_signal_handler_unsubscribe(self):
class WaitTests (line 430) | class WaitTests(unittest.TestCase):
method test_safe_wait_INADDR_ANY (line 432) | def test_safe_wait_INADDR_ANY(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_static.py
function unicode_filesystem (line 23) | def unicode_filesystem(tmpdir):
function ensure_unicode_filesystem (line 33) | def ensure_unicode_filesystem():
class StaticTest (line 56) | class StaticTest(helper.CPWebCase):
method setup_server (line 59) | def setup_server():
method teardown_server (line 157) | def teardown_server():
method test_static (line 165) | def test_static(self):
method test_static_longpath (line 193) | def test_static_longpath(self):
method test_fallthrough (line 201) | def test_fallthrough(self):
method test_index (line 212) | def test_index(self):
method test_config_errors (line 228) | def test_config_errors(self):
method test_security (line 244) | def test_security(self):
method test_modif (line 249) | def test_modif(self):
method test_755_vhost (line 265) | def test_755_vhost(self):
method test_serve_fileobj (line 272) | def test_serve_fileobj(self):
method test_serve_bytesio (line 278) | def test_serve_bytesio(self):
method test_file_stream (line 286) | def test_file_stream(self):
method test_file_stream_deadlock (line 364) | def test_file_stream_deadlock(self):
method test_error_page_with_serve_file (line 393) | def test_error_page_with_serve_file(self):
method test_null_bytes (line 398) | def test_null_bytes(self):
method unicode_file (line 404) | def unicode_file():
method test_unicode (line 419) | def test_unicode(self):
function error_page_404 (line 432) | def error_page_404(status, message, traceback, version):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_tools.py
class ToolTests (line 28) | class ToolTests(helper.CPWebCase):
method setup_server (line 31) | def setup_server():
method testHookErrors (line 262) | def testHookErrors(self):
method testEndRequestOnDrop (line 307) | def testEndRequestOnDrop(self):
method testGuaranteedHooks (line 340) | def testGuaranteedHooks(self):
method testCombinedTools (line 352) | def testCombinedTools(self):
method testBareHooks (line 386) | def testBareHooks(self):
method testHandlerWrapperTool (line 394) | def testHandlerWrapperTool(self):
method testToolWithConfig (line 398) | def testToolWithConfig(self):
method testWarnToolOn (line 405) | def testWarnToolOn(self):
method testDecorator (line 422) | def testDecorator(self):
class SessionAuthTest (line 440) | class SessionAuthTest(unittest.TestCase):
method test_login_screen_returns_bytes (line 442) | def test_login_screen_returns_bytes(self):
class TestHooks (line 454) | class TestHooks:
method test_priorities (line 455) | def test_priorities(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_tutorials.py
class TutorialTest (line 12) | class TutorialTest(helper.CPWebCase):
method setup_server (line 15) | def setup_server(cls):
method load_module (line 24) | def load_module(name):
method setup_tutorial (line 36) | def setup_tutorial(cls, name, root_name, config={}):
method test01HelloWorld (line 49) | def test01HelloWorld(self):
method test02ExposeMethods (line 54) | def test02ExposeMethods(self):
method test03GetAndPost (line 59) | def test03GetAndPost(self):
method test04ComplexSite (line 79) | def test04ComplexSite(self):
method test05DerivedObjects (line 94) | def test05DerivedObjects(self):
method test06DefaultMethod (line 117) | def test06DefaultMethod(self):
method test07Sessions (line 123) | def test07Sessions(self):
method test08GeneratorsAndYield (line 138) | def test08GeneratorsAndYield(self):
method test09Files (line 146) | def test09Files(self):
method test10HTTPErrors (line 177) | def test10HTTPErrors(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_virtualhost.py
class VirtualHostTest (line 9) | class VirtualHostTest(helper.CPWebCase):
method setup_server (line 12) | def setup_server():
method testVirtualHost (line 68) | def testVirtualHost(self):
method test_VHost_plus_Static (line 96) | def test_VHost_plus_Static(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_wsgi_ns.py
class WSGI_Namespace_Test (line 5) | class WSGI_Namespace_Test(helper.CPWebCase):
method setup_server (line 8) | def setup_server():
method test_pipeline (line 87) | def test_pipeline(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_wsgi_unix_socket.py
function usocket_path (line 14) | def usocket_path():
class USocketHTTPConnection (line 24) | class USocketHTTPConnection(HTTPConnection):
method __init__ (line 29) | def __init__(self, path):
method __call__ (line 33) | def __call__(self, *args, **kwargs):
method connect (line 40) | def connect(self):
class WSGI_UnixSocket_Test (line 51) | class WSGI_UnixSocket_Test(helper.CPWebCase):
method setup_server (line 61) | def setup_server():
method tearDown (line 78) | def tearDown(self):
method test_simple_request (line 81) | def test_simple_request(self):
method test_not_found (line 86) | def test_not_found(self):
method test_internal_error (line 90) | def test_internal_error(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_wsgi_vhost.py
class WSGI_VirtualHost_Test (line 5) | class WSGI_VirtualHost_Test(helper.CPWebCase):
method setup_server (line 8) | def setup_server():
method test_welcome (line 28) | def test_welcome(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_wsgiapps.py
class WSGIGraftTests (line 8) | class WSGIGraftTests(helper.CPWebCase):
method setup_server (line 11) | def setup_server():
method test_01_standard_app (line 95) | def test_01_standard_app(self):
method test_04_pure_wsgi (line 99) | def test_04_pure_wsgi(self):
method test_05_wrapped_cp_app (line 106) | def test_05_wrapped_cp_app(self):
method test_06_empty_string_app (line 115) | def test_06_empty_string_app(self):
FILE: 3rd_party/python2/site-packages/cherrypy/test/test_xmlrpc.py
class HTTPSTransport (line 22) | class HTTPSTransport(SafeTransport):
method request (line 27) | def request(self, host, handler, request_body, verbose=0):
function setup_server (line 54) | def setup_server():
class XmlRpcTest (line 120) | class XmlRpcTest(helper.CPWebCase):
method testXmlRpc (line 123) | def testXmlRpc(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut01_helloworld.py
class HelloWorld (line 13) | class HelloWorld:
method index (line 20) | def index(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut02_expose_methods.py
class HelloWorld (line 13) | class HelloWorld:
method index (line 16) | def index(self):
method show_msg (line 21) | def show_msg(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut03_get_and_post.py
class WelcomePage (line 12) | class WelcomePage:
method index (line 15) | def index(self):
method greetUser (line 25) | def greetUser(self, name=None):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut04_complex_site.py
class HomePage (line 13) | class HomePage:
method index (line 16) | def index(self):
class JokePage (line 27) | class JokePage:
method index (line 30) | def index(self):
class LinksPage (line 37) | class LinksPage:
method __init__ (line 39) | def __init__(self):
method index (line 46) | def index(self):
class ExtraLinksPage (line 70) | class ExtraLinksPage:
method index (line 73) | def index(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut05_derived_objects.py
class Page (line 15) | class Page:
method header (line 19) | def header(self):
method footer (line 29) | def footer(self):
class HomePage (line 42) | class HomePage(Page):
method __init__ (line 46) | def __init__(self):
method index (line 51) | def index(self):
class AnotherPage (line 62) | class AnotherPage(Page):
method index (line 66) | def index(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut06_default_method.py
class UsersPage (line 24) | class UsersPage:
method index (line 27) | def index(self):
method default (line 38) | def default(self, user):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut07_sessions.py
class HitCounter (line 16) | class HitCounter:
method index (line 21) | def index(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut08_generators_and_yield.py
class GeneratorDemo (line 15) | class GeneratorDemo:
method header (line 17) | def header(self):
method footer (line 20) | def footer(self):
method index (line 24) | def index(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut09_files.py
class FileDemo (line 53) | class FileDemo(object):
method index (line 56) | def index(self):
method upload (line 70) | def upload(self, myFile):
method download (line 93) | def download(self):
FILE: 3rd_party/python2/site-packages/cherrypy/tutorial/tut10_http_errors.py
class HTTPErrorDemo (line 20) | class HTTPErrorDemo(object):
method index (line 27) | def index(self):
method toggleTracebacks (line 57) | def toggleTracebacks(self):
method error (line 66) | def error(self, code):
method messageArg (line 71) | def messageArg(self):
FILE: 3rd_party/python2/site-packages/dateutil/easter.py
function easter (line 18) | def easter(year, method=EASTER_WESTERN):
FILE: 3rd_party/python2/site-packages/dateutil/parser.py
class _timelex (line 39) | class _timelex(object):
method __init__ (line 41) | def __init__(self, instream):
method get_token (line 55) | def get_token(self):
method __iter__ (line 133) | def __iter__(self):
method next (line 136) | def next(self):
method split (line 142) | def split(cls, s):
class _resultbase (line 147) | class _resultbase(object):
method __init__ (line 149) | def __init__(self):
method _repr (line 153) | def _repr(self, classname):
method __repr__ (line 161) | def __repr__(self):
class parserinfo (line 165) | class parserinfo(object):
method __init__ (line 200) | def __init__(self, dayfirst=False, yearfirst=False):
method _convert (line 215) | def _convert(self, lst):
method jump (line 226) | def jump(self, name):
method weekday (line 229) | def weekday(self, name):
method month (line 237) | def month(self, name):
method hms (line 245) | def hms(self, name):
method ampm (line 251) | def ampm(self, name):
method pertain (line 257) | def pertain(self, name):
method utczone (line 260) | def utczone(self, name):
method tzoffset (line 263) | def tzoffset(self, name):
method convertyear (line 268) | def convertyear(self, year):
method validate (line 278) | def validate(self, res):
class parser (line 290) | class parser(object):
method __init__ (line 292) | def __init__(self, info=None):
method parse (line 295) | def parse(self, timestr, default=None,
class _result (line 337) | class _result(_resultbase):
method _parse (line 342) | def _parse(self, timestr, dayfirst=None, yearfirst=None, fuzzy=False):
function parse (line 693) | def parse(timestr, parserinfo=None, **kwargs):
class _tzparser (line 700) | class _tzparser(object):
class _result (line 702) | class _result(_resultbase):
class _attr (line 707) | class _attr(_resultbase):
method __repr__ (line 711) | def __repr__(self):
method __init__ (line 714) | def __init__(self):
method parse (line 719) | def parse(self, tzstr):
function _parsetz (line 873) | def _parsetz(tzstr):
function _parsems (line 877) | def _parsems(value):
FILE: 3rd_party/python2/site-packages/dateutil/relativedelta.py
class weekday (line 15) | class weekday(object):
method __init__ (line 18) | def __init__(self, weekday, n=None):
method __call__ (line 22) | def __call__(self, n):
method __eq__ (line 28) | def __eq__(self, other):
method __repr__ (line 36) | def __repr__(self):
class relativedelta (line 45) | class relativedelta:
method __init__ (line 109) | def __init__(self, dt1=None, dt2=None,
method _fix (line 202) | def _fix(self):
method _set_months (line 235) | def _set_months(self, months):
method __radd__ (line 245) | def __radd__(self, other):
method __rsub__ (line 288) | def __rsub__(self, other):
method __add__ (line 291) | def __add__(self, other):
method __sub__ (line 311) | def __sub__(self, other):
method __neg__ (line 331) | def __neg__(self):
method __nonzero__ (line 349) | def __nonzero__(self):
method __mul__ (line 367) | def __mul__(self, other):
method __eq__ (line 386) | def __eq__(self, other):
method __ne__ (line 412) | def __ne__(self, other):
method __div__ (line 415) | def __div__(self, other):
method __repr__ (line 418) | def __repr__(self):
FILE: 3rd_party/python2/site-packages/dateutil/rrule.py
class weekday (line 50) | class weekday(object):
method __init__ (line 53) | def __init__(self, weekday, n=None):
method __call__ (line 59) | def __call__(self, n):
method __eq__ (line 65) | def __eq__(self, other):
method __repr__ (line 73) | def __repr__(self):
class rrulebase (line 82) | class rrulebase:
method __init__ (line 83) | def __init__(self, cache=False):
method __iter__ (line 94) | def __iter__(self):
method _iter_cached (line 102) | def _iter_cached(self):
method __getitem__ (line 127) | def __getitem__(self, item):
method __contains__ (line 149) | def __contains__(self, item):
method count (line 161) | def count(self):
method before (line 166) | def before(self, dt, inc=False):
method after (line 184) | def after(self, dt, inc=False):
method between (line 199) | def between(self, after, before, inc=False):
class rrule (line 228) | class rrule(rrulebase):
method __init__ (line 229) | def __init__(self, freq, dtstart=None,
method _iter (line 399) | def _iter(self):
class _iterinfo (line 629) | class _iterinfo(object):
method __init__ (line 635) | def __init__(self, rrule):
method rebuild (line 640) | def rebuild(self, year, month):
method ydayset (line 770) | def ydayset(self, year, month, day):
method mdayset (line 773) | def mdayset(self, year, month, day):
method wdayset (line 780) | def wdayset(self, year, month, day):
method ddayset (line 795) | def ddayset(self, year, month, day):
method htimeset (line 801) | def htimeset(self, hour, minute, second):
method mtimeset (line 811) | def mtimeset(self, hour, minute, second):
method stimeset (line 819) | def stimeset(self, hour, minute, second):
class rruleset (line 824) | class rruleset(rrulebase):
class _genitem (line 826) | class _genitem:
method __init__ (line 827) | def __init__(self, genlist, gen):
method next (line 836) | def next(self):
method __cmp__ (line 842) | def __cmp__(self, other):
method __init__ (line 845) | def __init__(self, cache=False):
method rrule (line 852) | def rrule(self, rrule):
method rdate (line 855) | def rdate(self, rdate):
method exrule (line 858) | def exrule(self, exrule):
method exdate (line 861) | def exdate(self, exdate):
method _iter (line 864) | def _iter(self):
class _rrulestr (line 893) | class _rrulestr:
method _handle_int (line 905) | def _handle_int(self, rrkwargs, name, value, **kwargs):
method _handle_int_list (line 908) | def _handle_int_list(self, rrkwargs, name, value, **kwargs):
method _handle_FREQ (line 923) | def _handle_FREQ(self, rrkwargs, name, value, **kwargs):
method _handle_UNTIL (line 926) | def _handle_UNTIL(self, rrkwargs, name, value, **kwargs):
method _handle_WKST (line 937) | def _handle_WKST(self, rrkwargs, name, value, **kwargs):
method _handle_BYWEEKDAY (line 940) | def _handle_BYWEEKDAY(self, rrkwargs, name, value, **kwarsg):
method _parse_rfc_rrule (line 954) | def _parse_rfc_rrule(self, line,
method _parse_rfc (line 980) | def _parse_rfc(self, s,
method __call__ (line 1092) | def __call__(self, s, **kwargs):
FILE: 3rd_party/python2/site-packages/dateutil/tz.py
class tzutc (line 31) | class tzutc(datetime.tzinfo):
method utcoffset (line 33) | def utcoffset(self, dt):
method dst (line 36) | def dst(self, dt):
method tzname (line 39) | def tzname(self, dt):
method __eq__ (line 42) | def __eq__(self, other):
method __ne__ (line 46) | def __ne__(self, other):
method __repr__ (line 49) | def __repr__(self):
class tzoffset (line 54) | class tzoffset(datetime
Copy disabled (too large)
Download .json
Condensed preview — 3369 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (57,342K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 465,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/ISSUE_TEMPLATE/question.md",
"chars": 411,
"preview": "---\nname: Question\nabout: Ask a question about the Source Code\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".gitignore",
"chars": 402,
"preview": "*.py[cod]\n\n# C extensions\n*.so\n\n# Packages\n#*.egg\n#*.egg-info\ndist\nbuild\neggs\nparts\nbin\nvar\nsdist\ndevelop-eggs\n.installe"
},
{
"path": "3rd_party/babel/.babelrc",
"chars": 74,
"preview": "{\n \"presets\": [\n \"@babel/preset-env\",\n \"@babel/preset-react\"\n ]\n}\n"
},
{
"path": "3rd_party/babel/babel.py",
"chars": 1026,
"preview": "#!/usr/bin/python\n\nfrom subprocess import Popen, PIPE\n\nimport os, sys\n\n\nclass JSXTranspileCmd():\n\n def execute(self, "
},
{
"path": "3rd_party/babel/package.json",
"chars": 462,
"preview": "{\n \"name\": \"babel\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\"
},
{
"path": "3rd_party/babel/test.jsx",
"chars": 674,
"preview": "'use strict';\n\nconst e = React.createElement;\n\nclass LikeButton extends React.Component {\n constructor(props) {\n sup"
},
{
"path": "3rd_party/common/site-packages/mako/__init__.py",
"chars": 242,
"preview": "# mako/__init__.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of"
},
{
"path": "3rd_party/common/site-packages/mako/_ast_util.py",
"chars": 20414,
"preview": "# mako/_ast_util.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part o"
},
{
"path": "3rd_party/common/site-packages/mako/ast.py",
"chars": 6789,
"preview": "# mako/ast.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of Mako"
},
{
"path": "3rd_party/common/site-packages/mako/cache.py",
"chars": 7736,
"preview": "# mako/cache.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of Ma"
},
{
"path": "3rd_party/common/site-packages/mako/cmd.py",
"chars": 2859,
"preview": "# mako/cmd.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of Mako"
},
{
"path": "3rd_party/common/site-packages/mako/codegen.py",
"chars": 47892,
"preview": "# mako/codegen.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of "
},
{
"path": "3rd_party/common/site-packages/mako/compat.py",
"chars": 4295,
"preview": "# mako/compat.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of M"
},
{
"path": "3rd_party/common/site-packages/mako/exceptions.py",
"chars": 13110,
"preview": "# mako/exceptions.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part "
},
{
"path": "3rd_party/common/site-packages/mako/ext/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "3rd_party/common/site-packages/mako/ext/autohandler.py",
"chars": 1885,
"preview": "# ext/autohandler.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part "
},
{
"path": "3rd_party/common/site-packages/mako/ext/babelplugin.py",
"chars": 2138,
"preview": "# ext/babelplugin.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part "
},
{
"path": "3rd_party/common/site-packages/mako/ext/beaker_cache.py",
"chars": 2599,
"preview": "# ext/beaker_cache.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part"
},
{
"path": "3rd_party/common/site-packages/mako/ext/extract.py",
"chars": 4616,
"preview": "# ext/extract.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of M"
},
{
"path": "3rd_party/common/site-packages/mako/ext/linguaplugin.py",
"chars": 2161,
"preview": "# ext/linguaplugin.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part"
},
{
"path": "3rd_party/common/site-packages/mako/ext/preprocessors.py",
"chars": 576,
"preview": "# ext/preprocessors.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is par"
},
{
"path": "3rd_party/common/site-packages/mako/ext/pygmentplugin.py",
"chars": 4951,
"preview": "# ext/pygmentplugin.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is par"
},
{
"path": "3rd_party/common/site-packages/mako/ext/turbogears.py",
"chars": 2165,
"preview": "# ext/turbogears.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part o"
},
{
"path": "3rd_party/common/site-packages/mako/filters.py",
"chars": 6063,
"preview": "# mako/filters.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of "
},
{
"path": "3rd_party/common/site-packages/mako/lexer.py",
"chars": 16926,
"preview": "# mako/lexer.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of Ma"
},
{
"path": "3rd_party/common/site-packages/mako/lookup.py",
"chars": 12718,
"preview": "# mako/lookup.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of M"
},
{
"path": "3rd_party/common/site-packages/mako/parsetree.py",
"chars": 19411,
"preview": "# mako/parsetree.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part o"
},
{
"path": "3rd_party/common/site-packages/mako/pygen.py",
"chars": 10073,
"preview": "# mako/pygen.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of Ma"
},
{
"path": "3rd_party/common/site-packages/mako/pyparser.py",
"chars": 7789,
"preview": "# mako/pyparser.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of"
},
{
"path": "3rd_party/common/site-packages/mako/runtime.py",
"chars": 28040,
"preview": "# mako/runtime.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of "
},
{
"path": "3rd_party/common/site-packages/mako/template.py",
"chars": 26455,
"preview": "# mako/template.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of"
},
{
"path": "3rd_party/common/site-packages/mako/util.py",
"chars": 11038,
"preview": "# mako/util.py\n# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>\n#\n# This module is part of Mak"
},
{
"path": "3rd_party/common/site-packages/more_itertools/__init__.py",
"chars": 87,
"preview": "from more_itertools.more import * # noqa\nfrom more_itertools.recipes import * # noqa\n"
},
{
"path": "3rd_party/common/site-packages/more_itertools/more.py",
"chars": 61949,
"preview": "from __future__ import print_function\n\nfrom collections import Counter, defaultdict, deque\n# Sequence has moved to typin"
},
{
"path": "3rd_party/common/site-packages/more_itertools/recipes.py",
"chars": 14608,
"preview": "\"\"\"Imported from the recipes section of the itertools documentation.\n\nAll functions taken from the recipes section of th"
},
{
"path": "3rd_party/common/site-packages/more_itertools/tests/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "3rd_party/common/site-packages/more_itertools/tests/test_more.py",
"chars": 60582,
"preview": "from __future__ import division, print_function, unicode_literals\n\nfrom decimal import Decimal\nfrom doctest import DocTe"
},
{
"path": "3rd_party/common/site-packages/more_itertools/tests/test_recipes.py",
"chars": 19094,
"preview": "from doctest import DocTestSuite\nfrom unittest import TestCase\n\nfrom itertools import combinations\nfrom six.moves import"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/__init__.py",
"chars": 280,
"preview": "import sys\nif sys.platform == 'win32':\n from tzlocal_olson.win32 import get_localzone, reload_localzone\nelif 'darwin'"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/darwin.py",
"chars": 994,
"preview": "from __future__ import with_statement\nimport os\nimport pytz\nimport subprocess\n\n_cache_tz = None\n\n\ndef _get_localzone():\n"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/test_data/timezone/etc/timezone",
"chars": 14,
"preview": "Africa/Harare\n"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/test_data/timezone_setting/etc/conf.d/clock",
"chars": 27,
"preview": "TIMEZONE = \"Africa/Harare\"\n"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/test_data/zone_setting/etc/sysconfig/clock",
"chars": 21,
"preview": "ZONE=\"Africa/Harare\"\n"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/tests.py",
"chars": 3078,
"preview": "import sys\nimport os\nfrom datetime import datetime\nimport unittest\nimport pytz\nimport tzlocal_olson.unix\n\nclass TzLocalT"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/unix.py",
"chars": 4575,
"preview": "from __future__ import with_statement\nimport os\nimport re\nimport pytz\n\n_cache_tz = None\n\ndef _tz_from_env(tzenv):\n if"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/win32.py",
"chars": 3141,
"preview": "try:\n import _winreg as winreg\nexcept ImportError:\n import winreg\n\nfrom tzlocal_olson.windows_tz import win_tz\nimp"
},
{
"path": "3rd_party/common/site-packages/tzlocal_olson/windows_tz.py",
"chars": 25291,
"preview": "# This file is autogenerated by the get_windows_info.py script\n# Do not edit.\nwin_tz = {'AUS Central Standard Time': 'Au"
},
{
"path": "3rd_party/mooRainbow/mooRainbow.1.2b2.js",
"chars": 19462,
"preview": "/***\n * MooRainbow\n *\n * @version\t\t1.2b2\n * @license\t\tMIT-style license\n * @author\t\tDjamil Legato - < djamil [at] djamil"
},
{
"path": "3rd_party/mooRainbow/mooRainbow.css",
"chars": 2269,
"preview": "/***\r\n * - mooRainbow: defaultCSS\r\n * author: w00fz <w00fzIT@gmail.com>\r\n */\r\n\r\n#mooRainbow { font-size: 11px; color: #"
},
{
"path": "3rd_party/mooRainbow/mooRainbow.js",
"chars": 19210,
"preview": "/***\r\n * MooRainbow\r\n *\r\n * @version\t\t1.11\r\n * @license\t\tMIT-style license\r\n * @author\t\tw00fz - < w00fzIT [at] gmail.com"
},
{
"path": "3rd_party/python2/site-packages/cheroot/__init__.py",
"chars": 247,
"preview": "\"\"\"High-performance, pure-Python HTTP server used by CherryPy.\"\"\"\n\ntry:\n import pkg_resources\nexcept ImportError:\n "
},
{
"path": "3rd_party/python2/site-packages/cheroot/_compat.py",
"chars": 2283,
"preview": "\"\"\"Compatibility code for using Cheroot with various versions of Python.\"\"\"\n\nimport re\n\nimport six\n\nif six.PY3:\n def "
},
{
"path": "3rd_party/python2/site-packages/cheroot/errors.py",
"chars": 1775,
"preview": "\"\"\"Collection of exceptions raised and/or processed by Cheroot.\"\"\"\n\nimport errno\nimport sys\n\n\nclass MaxSizeExceeded(Exce"
},
{
"path": "3rd_party/python2/site-packages/cheroot/makefile.py",
"chars": 14246,
"preview": "\"\"\"Socket file object.\"\"\"\n\nimport socket\n\nimport _pyio as io\n\nimport six\n\nfrom . import errors\n\n\nclass BufferedWriter(io"
},
{
"path": "3rd_party/python2/site-packages/cheroot/server.py",
"chars": 65464,
"preview": "\"\"\"\nA high-speed, production ready, thread pooled, generic HTTP server.\n\nFor those of you wanting to understand internal"
},
{
"path": "3rd_party/python2/site-packages/cheroot/ssl/__init__.py",
"chars": 1394,
"preview": "\"\"\"Implementation of the SSL adapter base interface.\"\"\"\n\nfrom abc import ABCMeta, abstractmethod\n\nfrom six import add_me"
},
{
"path": "3rd_party/python2/site-packages/cheroot/ssl/builtin.py",
"chars": 4385,
"preview": "\"\"\"\nA library for integrating Python's builtin ``ssl`` library with Cheroot.\n\nThe ssl module must be importable for SSL "
},
{
"path": "3rd_party/python2/site-packages/cheroot/ssl/pyopenssl.py",
"chars": 9640,
"preview": "\"\"\"\nA library for integrating pyOpenSSL with Cheroot.\n\nThe OpenSSL module must be importable for SSL functionality.\nYou "
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/__init__.py",
"chars": 26,
"preview": "\"\"\"Cheroot test suite.\"\"\"\n"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/helper.py",
"chars": 8516,
"preview": "\"\"\"A library of helper functions for the Cheroot test suite.\"\"\"\n\nimport datetime\nimport io\nimport logging\nimport os\nimpo"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/test.pem",
"chars": 2254,
"preview": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDBKo554mzIMY+AByUNpaUOP9bJnQ7ZLQe9XgHwoLJR4VzpyZZZ\nR9L4WtImEew05FY3Izerfm3"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/test_config_server.py",
"chars": 4073,
"preview": "\"\"\"Tests for the CherryPy configuration system.\"\"\"\n\nimport os\n\nimport pytest\n\nfrom cheroot.test import helper\n\n\npytestma"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/test_conn.py",
"chars": 25944,
"preview": "\"\"\"Tests for TCP connection handling, including proper and timely close.\"\"\"\n\nimport socket\nimport time\n\nfrom six.moves i"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/test_core.py",
"chars": 10202,
"preview": "\"\"\"Tests for managing HTTP issues (malformed requests, etc).\"\"\"\n# -*- coding: utf-8 -*-\n# vim: set fileencoding=utf-8 :\n"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/test_wsgiapps.py",
"chars": 3096,
"preview": "import sys\n\nimport pytest\n\nfrom cheroot.test import helper\n\n\n@pytest.mark.xfail(reason='issue 1')\nclass WSGIGraftTests(h"
},
{
"path": "3rd_party/python2/site-packages/cheroot/test/webtest.py",
"chars": 21879,
"preview": "\"\"\"Extensions to unittest for web frameworks.\n\nUse the WebCase.getPage method to request a page from your HTTP server.\nF"
},
{
"path": "3rd_party/python2/site-packages/cheroot/workers/__init__.py",
"chars": 25,
"preview": "\"\"\"HTTP workers pool.\"\"\"\n"
},
{
"path": "3rd_party/python2/site-packages/cheroot/workers/threadpool.py",
"chars": 9218,
"preview": "\"\"\"A thread-based worker pool.\"\"\"\n\n\nimport threading\nimport time\nimport socket\n\nfrom six.moves import queue\n\n\n__all__ = "
},
{
"path": "3rd_party/python2/site-packages/cheroot/wsgi.py",
"chars": 13632,
"preview": "\"\"\"This class holds Cheroot WSGI server implementation.\n\nSimplest example on how to use this server::\n\n from cheroot "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/__init__.py",
"chars": 11307,
"preview": "\"\"\"CherryPy is a pythonic, object-oriented HTTP framework.\n\nCherryPy consists of not one, but four separate API layers.\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/__main__.py",
"chars": 107,
"preview": "\"\"\"CherryPy'd cherryd daemon runner.\"\"\"\nfrom cherrypy.daemon import run\n\n\n__name__ == '__main__' and run()\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpchecker.py",
"chars": 14626,
"preview": "\"\"\"Checker for CherryPy sites and mounted apps.\"\"\"\nimport os\nimport warnings\n\nimport six\nfrom six.moves import builtins\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpcompat.py",
"chars": 5023,
"preview": "\"\"\"Compatibility code for using CherryPy with various versions of Python.\n\nTo retain compatibility with older Python ver"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpconfig.py",
"chars": 9954,
"preview": "\"\"\"\nConfiguration system for CherryPy.\n\nConfiguration in CherryPy is implemented via dictionaries. Keys are strings\nwhic"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpdispatch.py",
"chars": 25541,
"preview": "\"\"\"CherryPy dispatchers.\n\nA 'dispatcher' is the object which looks up the 'page handler' callable\nand collects config fo"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cperror.py",
"chars": 23035,
"preview": "\"\"\"Exception classes for CherryPy.\n\nCherryPy provides (and uses) exceptions for declaring that the HTTP response\nshould "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cplogging.py",
"chars": 17529,
"preview": "\"\"\"\nSimple config\n=============\n\nAlthough CherryPy uses the :mod:`Python logging module <logging>`, it does so\nbehind th"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpmodpy.py",
"chars": 11219,
"preview": "\"\"\"Native adapter for serving CherryPy via mod_python\n\nBasic usage:\n\n##########################################\n# Applic"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpnative_server.py",
"chars": 6314,
"preview": "\"\"\"Native adapter for serving CherryPy via its builtin server.\"\"\"\n\nimport logging\nimport sys\nimport io\n\nimport cheroot.s"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpreqbody.py",
"chars": 37206,
"preview": "\"\"\"Request body processing for CherryPy.\n\n.. versionadded:: 3.2\n\nApplication authors have complete control over the pars"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cprequest.py",
"chars": 36336,
"preview": "import sys\nimport time\nimport warnings\n\nimport uuid\nimport six\nfrom six.moves.http_cookies import SimpleCookie, CookieEr"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpserver.py",
"chars": 8366,
"preview": "\"\"\"Manage HTTP servers with CherryPy.\"\"\"\n\nimport six\n\nimport cherrypy\nfrom cherrypy.lib.reprconf import attributes\nfrom "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cptools.py",
"chars": 18742,
"preview": "\"\"\"CherryPy tools. A \"tool\" is any helper, adapted to CP.\n\nTools are usually designed to be used in a variety of ways (a"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cptree.py",
"chars": 10796,
"preview": "\"\"\"CherryPy Application and Tree objects.\"\"\"\n\nimport os\n\nimport six\n\nimport cherrypy\nfrom cherrypy._cpcompat import ntou"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpwsgi.py",
"chars": 16816,
"preview": "\"\"\"WSGI interface (see PEP 333 and 3333).\n\nNote that WSGI environ keys and values are 'native strings'; that is,\nwhateve"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_cpwsgi_server.py",
"chars": 4049,
"preview": "\"\"\"\nWSGI server interface (see PEP 333).\n\nThis adds some CP-specific bits to the framework-agnostic cheroot package.\n\"\"\""
},
{
"path": "3rd_party/python2/site-packages/cherrypy/_helper.py",
"chars": 11484,
"preview": "\"\"\"Helper functions for CP apps.\"\"\"\n\nimport six\nfrom six.moves import urllib\n\nfrom cherrypy._cpcompat import text_or_byt"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/daemon.py",
"chars": 3950,
"preview": "\"\"\"The CherryPy daemon.\"\"\"\n\nimport sys\n\nimport cherrypy\nfrom cherrypy.process import plugins, servers\nfrom cherrypy impo"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/__init__.py",
"chars": 2609,
"preview": "\"\"\"CherryPy Library.\"\"\"\n\n\ndef is_iterator(obj):\n \"\"\"Detect if the object provided implements the iterator protocol.\n\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/auth.py",
"chars": 3905,
"preview": "\"\"\"\nDeprecated implementation of basic and digest auth.\n\nLook to auth_basic and auth_digest instead.\n\"\"\"\n\nimport warning"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/auth_basic.py",
"chars": 3421,
"preview": "# This file is part of CherryPy <http://www.cherrypy.org/>\n# -*- coding: utf-8 -*-\n# vim:ts=4:sw=4:expandtab:fileencodin"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/auth_digest.py",
"chars": 14197,
"preview": "# This file is part of CherryPy <http://www.cherrypy.org/>\n# -*- coding: utf-8 -*-\n# vim:ts=4:sw=4:expandtab:fileencodin"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/caching.py",
"chars": 17149,
"preview": "\"\"\"\nCherryPy implements a simple caching system as a pluggable Tool. This tool\ntries to be an (in-process) HTTP/1.1-comp"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/covercp.py",
"chars": 11576,
"preview": "\"\"\"Code-coverage tools for CherryPy.\n\nTo use this module, or the coverage tools in the test suite,\nyou need to download "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/cpstats.py",
"chars": 22858,
"preview": "\"\"\"CPStats, a package for collecting and reporting on program statistics.\n\nOverview\n========\n\nStatistics about program o"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/cptools.py",
"chars": 23381,
"preview": "\"\"\"Functions for builtin CherryPy tools.\"\"\"\n\nimport logging\nimport re\nfrom hashlib import md5\n\nimport six\nfrom six.moves"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/encoding.py",
"chars": 16211,
"preview": "import struct\nimport time\nimport io\n\nimport six\n\nimport cherrypy\nfrom cherrypy._cpcompat import text_or_bytes\nfrom cherr"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/gctools.py",
"chars": 7346,
"preview": "import gc\nimport inspect\nimport sys\nimport time\n\ntry:\n import objgraph\nexcept ImportError:\n objgraph = None\n\nimpor"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/httpauth.py",
"chars": 13197,
"preview": "\"\"\"\nDeprecated implementations of HTTP Digest Authentication\n\nThis module defines functions to implement HTTP Digest Aut"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/httputil.py",
"chars": 18994,
"preview": "\"\"\"HTTP library functions.\n\nThis module contains functions for building an HTTP application\nframework: any one, not just"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/jsontools.py",
"chars": 3632,
"preview": "import cherrypy\nfrom cherrypy._cpcompat import text_or_bytes, ntou, json_encode, json_decode\n\n\ndef json_processor(entity"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/lockfile.py",
"chars": 3194,
"preview": "\"\"\"\nPlatform-independent file locking. Inspired by and modeled after zc.lockfile.\n\"\"\"\n\nimport os\n\ntry:\n import msvcrt"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/locking.py",
"chars": 1224,
"preview": "import datetime\n\n\nclass NeverExpires(object):\n def expired(self):\n return False\n\n\nclass Timer(object):\n \"\"\""
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/profiler.py",
"chars": 6539,
"preview": "\"\"\"Profiler tools for CherryPy.\n\nCherryPy users\n==============\n\nYou can profile any of your pages as follows::\n\n from"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/reprconf.py",
"chars": 16107,
"preview": "\"\"\"Generic configuration system using unrepr.\n\nConfiguration data may be supplied as a Python dictionary, as a filename,"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/sessions.py",
"chars": 31081,
"preview": "\"\"\"Session implementation for CherryPy.\n\nYou need to edit your config file to use sessions. Here's an example::\n\n [/]"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/static.py",
"chars": 15283,
"preview": "\"\"\"Module with helpers for serving static files.\"\"\"\n\nimport os\nimport platform\nimport re\nimport stat\nimport mimetypes\n\nf"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/lib/xmlrpcutil.py",
"chars": 1695,
"preview": "\"\"\"XML-RPC tool helpers.\"\"\"\nimport sys\n\nfrom six.moves.xmlrpc_client import (\n loads as xmlrpc_loads, dumps as xmlrpc"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/process/__init__.py",
"chars": 547,
"preview": "\"\"\"Site container for an HTTP server.\n\nA Web Site Process Bus object is used to connect applications, servers,\nand frame"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/process/plugins.py",
"chars": 26429,
"preview": "\"\"\"Site services for use with a Web Site Process Bus.\"\"\"\n\nimport os\nimport re\nimport signal as _signal\nimport sys\nimport"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/process/servers.py",
"chars": 13449,
"preview": "r\"\"\"\nStarting in CherryPy 3.1, cherrypy.server is implemented as an\n:ref:`Engine Plugin<plugins>`. It's an instance of\n:"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/process/win32.py",
"chars": 5810,
"preview": "\"\"\"Windows service. Requires pywin32.\"\"\"\n\nimport os\nimport win32api\nimport win32con\nimport win32event\nimport win32servic"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/process/wspbus.py",
"chars": 22109,
"preview": "r\"\"\"An implementation of the Web Site Process Bus.\n\nThis module is completely standalone, depending only on the stdlib.\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/scaffold/__init__.py",
"chars": 1997,
"preview": "\"\"\"<MyProject>, a CherryPy application.\n\nUse this as a base for creating new CherryPy applications. When you want\nto mak"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/scaffold/apache-fcgi.conf",
"chars": 930,
"preview": "# Apache2 server conf file for using CherryPy with mod_fcgid.\n\n# This doesn't have to be \"C:/\", but it has to be a direc"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/scaffold/example.conf",
"chars": 62,
"preview": "[/]\nlog.error_file: \"error.log\"\nlog.access_file: \"access.log\"\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/scaffold/site.conf",
"chars": 426,
"preview": "[global]\n# Uncomment this when you're done developing\n#environment: \"production\"\n\nserver.socket_host: \"0.0.0.0\"\nserver.s"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/__init__.py",
"chars": 396,
"preview": "\"\"\"\nRegression test suite for CherryPy.\n\"\"\"\n\nimport os\nimport sys\n\n\ndef newexit():\n os._exit(1)\n\n\ndef setup():\n # "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/_test_decorators.py",
"chars": 951,
"preview": "\"\"\"Test module for the @-decorator syntax, which is version-specific\"\"\"\n\nimport cherrypy\nfrom cherrypy import expose, to"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/_test_states_demo.py",
"chars": 1876,
"preview": "import os\nimport sys\nimport time\n\nimport cherrypy\n\nstarttime = time.time()\n\n\nclass Root:\n\n @cherrypy.expose\n def i"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/benchmark.py",
"chars": 12470,
"preview": "\"\"\"CherryPy Benchmark Tool\n\n Usage:\n benchmark.py [options]\n\n --null: use a null Request object (to "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/checkerdemo.py",
"chars": 1861,
"preview": "\"\"\"Demonstration app for cherrypy.checker.\n\nThis application is intentionally broken and badly designed.\nTo demonstrate "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/fastcgi.conf",
"chars": 686,
"preview": "\n# Apache2 server conf file for testing CherryPy with mod_fastcgi.\n# fumanchu: I had to hard-code paths due to crazy Deb"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/fcgi.conf",
"chars": 486,
"preview": "\n# Apache2 server conf file for testing CherryPy with mod_fcgid.\n\nDocumentRoot \"/usr/lib/python2.6/site-packages/cproot/"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/helper.py",
"chars": 17316,
"preview": "\"\"\"A library of helper functions for the CherryPy test suite.\"\"\"\n\nimport datetime\nimport io\nimport logging\nimport os\nimp"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/logtest.py",
"chars": 8157,
"preview": "\"\"\"logtest, a unittest.TestCase helper for testing log output.\"\"\"\n\nimport sys\nimport time\nfrom uuid import UUID\n\nimport "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/modfastcgi.py",
"chars": 4652,
"preview": "\"\"\"Wrapper for mod_fastcgi, for use as a CherryPy HTTP server when testing.\n\nTo autostart fastcgi, the \"apache\" executab"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/modfcgid.py",
"chars": 4237,
"preview": "\"\"\"Wrapper for mod_fcgid, for use as a CherryPy HTTP server when testing.\n\nTo autostart fcgid, the \"apache\" executable o"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/modpy.py",
"chars": 4978,
"preview": "\"\"\"Wrapper for mod_python, for use as a CherryPy HTTP server when testing.\n\nTo autostart modpython, the \"apache\" executa"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/modwsgi.py",
"chars": 4852,
"preview": "\"\"\"Wrapper for mod_wsgi, for use as a CherryPy HTTP server.\n\nTo autostart modwsgi, the \"apache\" executable or script mus"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/sessiondemo.py",
"chars": 5444,
"preview": "#!/usr/bin/python\n\"\"\"A session demonstration app.\"\"\"\n\nimport calendar\nfrom datetime import datetime\nimport sys\n\nimport s"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/static/404.html",
"chars": 92,
"preview": "<html>\n <body>\n <h1>I couldn't find that thing you were looking for!</h1>\n </body>\n</html>\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/static/index.html",
"chars": 14,
"preview": "Hello, world\r\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/style.css",
"chars": 17,
"preview": "Dummy stylesheet\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test.pem",
"chars": 2254,
"preview": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDBKo554mzIMY+AByUNpaUOP9bJnQ7ZLQe9XgHwoLJR4VzpyZZZ\nR9L4WtImEew05FY3Izerfm3"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_auth_basic.py",
"chars": 3034,
"preview": "# This file is part of CherryPy <http://www.cherrypy.org/>\n# -*- coding: utf-8 -*-\n# vim:ts=4:sw=4:expandtab:fileencodin"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_auth_digest.py",
"chars": 5066,
"preview": "# This file is part of CherryPy <http://www.cherrypy.org/>\n# -*- coding: utf-8 -*-\n# vim:ts=4:sw=4:expandtab:fileencodin"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_bus.py",
"chars": 8955,
"preview": "import threading\nimport time\nimport unittest\n\nfrom cherrypy.process import wspbus\n\n\nmsg = 'Listener %d on channel %s: %s"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_caching.py",
"chars": 14431,
"preview": "import datetime\nfrom itertools import count\nimport os\nimport threading\nimport time\n\nfrom six.moves import range\nfrom six"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_compat.py",
"chars": 867,
"preview": "\"\"\"Test Python 2/3 compatibility module.\"\"\"\nfrom __future__ import unicode_literals\n\nimport unittest\n\nimport pytest\nimpo"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_config.py",
"chars": 9110,
"preview": "\"\"\"Tests for the CherryPy configuration system.\"\"\"\n\nimport io\nimport os\nimport sys\nimport unittest\n\nimport six\n\nimport c"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_config_server.py",
"chars": 4037,
"preview": "\"\"\"Tests for the CherryPy configuration system.\"\"\"\n\nimport os\n\nimport cherrypy\nfrom cherrypy.test import helper\n\n\nlocalD"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_conn.py",
"chars": 31131,
"preview": "\"\"\"Tests for TCP connection handling, including proper and timely close.\"\"\"\n\nimport errno\nimport socket\nimport sys\nimpor"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_core.py",
"chars": 30234,
"preview": "# coding: utf-8\n\n\"\"\"Basic tests for the CherryPy core: request handling.\"\"\"\n\nimport os\nimport sys\nimport types\n\nimport s"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_dynamicobjectmapping.py",
"chars": 12373,
"preview": "import six\n\nimport cherrypy\nfrom cherrypy.test import helper\n\nscript_names = ['', '/foo', '/users/fred/blog', '/corp/blo"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_encoding.py",
"chars": 17023,
"preview": "# coding: utf-8\n\nimport gzip\nimport io\nfrom unittest import mock\n\nfrom six.moves.http_client import IncompleteRead\nfrom "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_etags.py",
"chars": 3093,
"preview": "import cherrypy\nfrom cherrypy._cpcompat import ntou\nfrom cherrypy.test import helper\n\n\nclass ETagTest(helper.CPWebCase):"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_http.py",
"chars": 10170,
"preview": "\"\"\"Tests for managing HTTP issues (malformed requests, etc).\"\"\"\n\nimport errno\nimport mimetypes\nimport socket\nimport sys\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_httpauth.py",
"chars": 6303,
"preview": "from hashlib import md5, sha1\n\nimport cherrypy\nfrom cherrypy._cpcompat import ntob\nfrom cherrypy.lib import httpauth\n\nfr"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_httputil.py",
"chars": 2410,
"preview": "\"\"\"Test helpers from ``cherrypy.lib.httputil`` module.\"\"\"\nimport pytest\nfrom six.moves import http_client\n\nfrom cherrypy"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_iterator.py",
"chars": 5756,
"preview": "import six\n\nimport cherrypy\nfrom cherrypy.test import helper\n\n\nclass IteratorBase(object):\n\n created = 0\n datachun"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_json.py",
"chars": 2865,
"preview": "import cherrypy\nfrom cherrypy.test import helper\n\nfrom cherrypy._cpcompat import json\n\n\njson_out = cherrypy.config(**{'t"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_logging.py",
"chars": 7277,
"preview": "\"\"\"Basic tests for the CherryPy core: request handling.\"\"\"\n\nimport os\nfrom unittest import mock\n\nimport six\n\nimport cher"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_mime.py",
"chars": 4538,
"preview": "\"\"\"Tests for various MIME issues, including the safe_multipart Tool.\"\"\"\n\nimport cherrypy\nfrom cherrypy._cpcompat import "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_misc_tools.py",
"chars": 7094,
"preview": "import os\n\nimport cherrypy\nfrom cherrypy import tools\nfrom cherrypy.test import helper\n\n\nlocalDir = os.path.dirname(__fi"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_objectmapping.py",
"chars": 14504,
"preview": "import sys\nimport cherrypy\nfrom cherrypy._cpcompat import ntou\nfrom cherrypy._cptree import Application\nfrom cherrypy.te"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_params.py",
"chars": 1862,
"preview": "import sys\nimport textwrap\n\nimport cherrypy\nfrom cherrypy.test import helper\n\n\nclass ParamsTest(helper.CPWebCase):\n @"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_proxy.py",
"chars": 5630,
"preview": "import cherrypy\nfrom cherrypy.test import helper\n\nscript_names = ['', '/path/to/myapp']\n\n\nclass ProxyTest(helper.CPWebCa"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_refleaks.py",
"chars": 1566,
"preview": "\"\"\"Tests for refleaks.\"\"\"\n\nimport itertools\nimport platform\nimport threading\n\nfrom six.moves.http_client import HTTPConn"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_request_obj.py",
"chars": 37139,
"preview": "\"\"\"Basic tests for the cherrypy.Request object.\"\"\"\n\nfrom functools import wraps\nimport os\nimport sys\nimport types\nimport"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_routes.py",
"chars": 2583,
"preview": "\"\"\"Test Routes dispatcher.\"\"\"\nimport os\nimport importlib\n\nimport pytest\n\nimport cherrypy\nfrom cherrypy.test import helpe"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_session.py",
"chars": 17591,
"preview": "import os\nimport threading\nimport time\nimport socket\nimport importlib\n\nfrom six.moves.http_client import HTTPConnection\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_sessionauthenticate.py",
"chars": 2013,
"preview": "import cherrypy\nfrom cherrypy.test import helper\n\n\nclass SessionAuthenticateTest(helper.CPWebCase):\n\n @staticmethod\n "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_states.py",
"chars": 16664,
"preview": "import os\nimport signal\nimport time\nimport unittest\nimport warnings\n\nfrom six.moves.http_client import BadStatusLine\n\nim"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_static.py",
"chars": 15518,
"preview": "# -*- coding: utf-8 -*-\nimport contextlib\nimport io\nimport os\nimport sys\nimport platform\nimport tempfile\n\nfrom six impor"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_tools.py",
"chars": 17479,
"preview": "\"\"\"Test the various means of instantiating and invoking tools.\"\"\"\n\nimport gzip\nimport io\nimport sys\nimport time\nimport t"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_tutorials.py",
"chars": 7058,
"preview": "import sys\nimport imp\nimport types\nimport importlib\n\nimport six\n\nimport cherrypy\nfrom cherrypy.test import helper\n\n\nclas"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_virtualhost.py",
"chars": 4021,
"preview": "import os\n\nimport cherrypy\nfrom cherrypy.test import helper\n\ncurdir = os.path.join(os.getcwd(), os.path.dirname(__file__"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_wsgi_ns.py",
"chars": 2812,
"preview": "import cherrypy\nfrom cherrypy.test import helper\n\n\nclass WSGI_Namespace_Test(helper.CPWebCase):\n\n @staticmethod\n d"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_wsgi_unix_socket.py",
"chars": 2239,
"preview": "import os\nimport socket\nimport atexit\nimport tempfile\n\nfrom six.moves.http_client import HTTPConnection\n\nimport pytest\n\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_wsgi_vhost.py",
"chars": 1034,
"preview": "import cherrypy\nfrom cherrypy.test import helper\n\n\nclass WSGI_VirtualHost_Test(helper.CPWebCase):\n\n @staticmethod\n "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_wsgiapps.py",
"chars": 3997,
"preview": "import sys\n\nimport cherrypy\nfrom cherrypy._cpcompat import ntob\nfrom cherrypy.test import helper\n\n\nclass WSGIGraftTests("
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/test_xmlrpc.py",
"chars": 5678,
"preview": "import sys\n\nimport six\n\nfrom six.moves.xmlrpc_client import (\n DateTime, Fault,\n ProtocolError, ServerProxy, SafeT"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/test/webtest.py",
"chars": 317,
"preview": "# for compatibility, expose cheroot webtest here\nimport warnings\n\nfrom cheroot.test.webtest import ( # noqa\n interfa"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/README.rst",
"chars": 671,
"preview": "CherryPy Tutorials\n------------------------------------------------------------------------\n\nThis is a series of tutoria"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/__init__.py",
"chars": 85,
"preview": "\n# This is used in test_config to test unrepr of \"from A import B\"\nthing2 = object()\n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/custom_error.html",
"chars": 404,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut01_helloworld.py",
"chars": 1015,
"preview": "\"\"\"\nTutorial - Hello World\n\nThe most basic (working) CherryPy application possible.\n\"\"\"\n\nimport os.path\n\n# Import Cherry"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut02_expose_methods.py",
"chars": 801,
"preview": "\"\"\"\nTutorial - Multiple methods\n\nThis tutorial shows you how to link to other methods of your request\nhandler.\n\"\"\"\n\nimpo"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut03_get_and_post.py",
"chars": 1587,
"preview": "\"\"\"\nTutorial - Passing variables\n\nThis tutorial shows you how to pass GET/POST variables to methods.\n\"\"\"\n\nimport os.path"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut04_complex_site.py",
"chars": 2948,
"preview": "\"\"\"\nTutorial - Multiple objects\n\nThis tutorial shows you how to create a site structure through multiple\npossibly nested"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut05_derived_objects.py",
"chars": 2141,
"preview": "\"\"\"\nTutorial - Object inheritance\n\nYou are free to derive your request handler classes from any base\nclass you wish. In "
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut06_default_method.py",
"chars": 2264,
"preview": "\"\"\"\nTutorial - The default method\n\nRequest handler objects can implement a method called \"default\" that\nis called when n"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut07_sessions.py",
"chars": 1228,
"preview": "\"\"\"\nTutorial - Sessions\n\nStoring session data in CherryPy applications is very easy: cherrypy\nprovides a dictionary call"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut08_generators_and_yield.py",
"chars": 1288,
"preview": "\"\"\"\nBonus Tutorial: Using generators to return result bodies\n\nInstead of returning a complete result string, you can use"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut09_files.py",
"chars": 3463,
"preview": "\"\"\"\n\nTutorial: File upload and download\n\nUploads\n-------\n\nWhen a client uploads a file to a CherryPy application, it's p"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tut10_http_errors.py",
"chars": 2706,
"preview": "\"\"\"\n\nTutorial: HTTP errors\n\nHTTPError is used to return an error response to the client.\nCherryPy has lots of options re"
},
{
"path": "3rd_party/python2/site-packages/cherrypy/tutorial/tutorial.conf",
"chars": 96,
"preview": "[global]\r\nserver.socket_host = \"127.0.0.1\"\r\nserver.socket_port = 8080\r\nserver.thread_pool = 10\r\n"
},
{
"path": "3rd_party/python2/site-packages/dateutil/__init__.py",
"chars": 254,
"preview": "\"\"\"\nCopyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers extensions to the standard pyth"
},
{
"path": "3rd_party/python2/site-packages/dateutil/easter.py",
"chars": 2633,
"preview": "\"\"\"\nCopyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers extensions to the standard pyth"
},
{
"path": "3rd_party/python2/site-packages/dateutil/parser.py",
"chars": 32402,
"preview": "# -*- coding:iso-8859-1 -*-\n\"\"\"\nCopyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers ext"
},
{
"path": "3rd_party/python2/site-packages/dateutil/relativedelta.py",
"chars": 17136,
"preview": "\"\"\"\nCopyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers extensions to the standard pyth"
},
{
"path": "3rd_party/python2/site-packages/dateutil/rrule.py",
"chars": 40402,
"preview": "\"\"\"\nCopyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers extensions to the standard pyth"
},
{
"path": "3rd_party/python2/site-packages/dateutil/tz.py",
"chars": 32741,
"preview": "\"\"\"\nCopyright (c) 2003-2007 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers extensions to the standard pyth"
},
{
"path": "3rd_party/python2/site-packages/dateutil/tzwin.py",
"chars": 5828,
"preview": "# This code was originally contributed by Jeffrey Harris.\nimport datetime\nimport struct\nimport _winreg\n\n__author__ = \"Je"
},
{
"path": "3rd_party/python2/site-packages/dateutil/zoneinfo/__init__.py",
"chars": 2575,
"preview": "\"\"\"\nCopyright (c) 2003-2005 Gustavo Niemeyer <gustavo@niemeyer.net>\n\nThis module offers extensions to the standard pyth"
},
{
"path": "3rd_party/python2/site-packages/portend.py",
"chars": 5083,
"preview": "# -*- coding: utf-8 -*-\n\n\"\"\"\nA simple library for managing the availability of ports.\n\"\"\"\n\nfrom __future__ import print_"
},
{
"path": "3rd_party/python2/site-packages/pytz/__init__.py",
"chars": 34206,
"preview": "'''\ndatetime.tzinfo timezone definitions generated from the\nOlson timezone database:\n\n ftp://elsie.nci.nih.gov/pub/tz"
}
]
// ... and 3169 more files (download for full content)
About this extraction
This page contains the full source code of the Southpaw-TACTIC/TACTIC GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3369 files (51.9 MB), approximately 13.8M tokens, and a symbol index with 33037 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.