##// END OF EJS Templates
i18n: use TG2 compatible settings names i18n.lang and i18n.enabled...
Thomas De Schampheleire -
r6629:f2f7a8c1 default
parent child Browse files
Show More
@@ -1,617 +1,621 b''
1 1 ################################################################################
2 2 ################################################################################
3 3 # Kallithea - Development config: #
4 4 # listening on *:5000 #
5 5 # sqlite and kallithea.db #
6 6 # initial_repo_scan = true #
7 7 # debug = true #
8 8 # verbose and colorful logging #
9 9 # #
10 10 # The %(here)s variable will be replaced with the parent directory of this file#
11 11 ################################################################################
12 12 ################################################################################
13 13
14 14 [DEFAULT]
15 15
16 16 ################################################################################
17 17 ## Email settings ##
18 18 ## ##
19 19 ## Refer to the documentation ("Email settings") for more details. ##
20 20 ## ##
21 21 ## It is recommended to use a valid sender address that passes access ##
22 22 ## validation and spam filtering in mail servers. ##
23 23 ################################################################################
24 24
25 25 ## 'From' header for application emails. You can optionally add a name.
26 26 ## Default:
27 27 #app_email_from = Kallithea
28 28 ## Examples:
29 29 #app_email_from = Kallithea <kallithea-noreply@example.com>
30 30 #app_email_from = kallithea-noreply@example.com
31 31
32 32 ## Subject prefix for application emails.
33 33 ## A space between this prefix and the real subject is automatically added.
34 34 ## Default:
35 35 #email_prefix =
36 36 ## Example:
37 37 #email_prefix = [Kallithea]
38 38
39 39 ## Recipients for error emails and fallback recipients of application mails.
40 40 ## Multiple addresses can be specified, space-separated.
41 41 ## Only addresses are allowed, do not add any name part.
42 42 ## Default:
43 43 #email_to =
44 44 ## Examples:
45 45 #email_to = admin@example.com
46 46 #email_to = admin@example.com another_admin@example.com
47 47 email_to =
48 48
49 49 ## 'From' header for error emails. You can optionally add a name.
50 50 ## Default: (none)
51 51 ## Examples:
52 52 #error_email_from = Kallithea Errors <kallithea-noreply@example.com>
53 53 #error_email_from = kallithea_errors@example.com
54 54 error_email_from =
55 55
56 56 ## SMTP server settings
57 57 ## If specifying credentials, make sure to use secure connections.
58 58 ## Default: Send unencrypted unauthenticated mails to the specified smtp_server.
59 59 ## For "SSL", use smtp_use_ssl = true and smtp_port = 465.
60 60 ## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587.
61 61 smtp_server =
62 62 #smtp_username =
63 63 #smtp_password =
64 64 smtp_port =
65 65 #smtp_use_ssl = false
66 66 #smtp_use_tls = false
67 67
68 68 [server:main]
69 69 ## Gearbox default web server ##
70 70 #use = egg:gearbox#wsgiref
71 71 ## nr of worker threads to spawn
72 72 #threadpool_workers = 1
73 73 ## max request before thread respawn
74 74 #threadpool_max_requests = 100
75 75 ## option to use threads of process
76 76 #use_threadpool = true
77 77
78 78 ## Gearbox gevent web server ##
79 79 #use = egg:gearbox#gevent
80 80
81 81 ## WAITRESS ##
82 82 use = egg:waitress#main
83 83 ## number of worker threads
84 84 threads = 1
85 85 ## MAX BODY SIZE 100GB
86 86 max_request_body_size = 107374182400
87 87 ## use poll instead of select, fixes fd limits, may not work on old
88 88 ## windows systems.
89 89 #asyncore_use_poll = True
90 90
91 91 ## GUNICORN ##
92 92 #use = egg:gunicorn#main
93 93 ## number of process workers. You must set `instance_id = *` when this option
94 94 ## is set to more than one worker
95 95 #workers = 1
96 96 ## process name
97 97 #proc_name = kallithea
98 98 ## type of worker class, one of sync, eventlet, gevent, tornado
99 99 ## recommended for bigger setup is using of of other than sync one
100 100 #worker_class = sync
101 101 #max_requests = 1000
102 102 ## amount of time a worker can handle request before it gets killed and
103 103 ## restarted
104 104 #timeout = 3600
105 105
106 106 ## UWSGI ##
107 107 ## run with uwsgi --ini-paste-logged <inifile.ini>
108 108 #[uwsgi]
109 109 #socket = /tmp/uwsgi.sock
110 110 #master = true
111 111 #http = 127.0.0.1:5000
112 112
113 113 ## set as deamon and redirect all output to file
114 114 #daemonize = ./uwsgi_kallithea.log
115 115
116 116 ## master process PID
117 117 #pidfile = ./uwsgi_kallithea.pid
118 118
119 119 ## stats server with workers statistics, use uwsgitop
120 120 ## for monitoring, `uwsgitop 127.0.0.1:1717`
121 121 #stats = 127.0.0.1:1717
122 122 #memory-report = true
123 123
124 124 ## log 5XX errors
125 125 #log-5xx = true
126 126
127 127 ## Set the socket listen queue size.
128 128 #listen = 256
129 129
130 130 ## Gracefully Reload workers after the specified amount of managed requests
131 131 ## (avoid memory leaks).
132 132 #max-requests = 1000
133 133
134 134 ## enable large buffers
135 135 #buffer-size = 65535
136 136
137 137 ## socket and http timeouts ##
138 138 #http-timeout = 3600
139 139 #socket-timeout = 3600
140 140
141 141 ## Log requests slower than the specified number of milliseconds.
142 142 #log-slow = 10
143 143
144 144 ## Exit if no app can be loaded.
145 145 #need-app = true
146 146
147 147 ## Set lazy mode (load apps in workers instead of master).
148 148 #lazy = true
149 149
150 150 ## scaling ##
151 151 ## set cheaper algorithm to use, if not set default will be used
152 152 #cheaper-algo = spare
153 153
154 154 ## minimum number of workers to keep at all times
155 155 #cheaper = 1
156 156
157 157 ## number of workers to spawn at startup
158 158 #cheaper-initial = 1
159 159
160 160 ## maximum number of workers that can be spawned
161 161 #workers = 4
162 162
163 163 ## how many workers should be spawned at a time
164 164 #cheaper-step = 1
165 165
166 166 ## COMMON ##
167 167 #host = 127.0.0.1
168 168 host = 0.0.0.0
169 169 port = 5000
170 170
171 171 ## middleware for hosting the WSGI application under a URL prefix
172 172 #[filter:proxy-prefix]
173 173 #use = egg:PasteDeploy#prefix
174 174 #prefix = /<your-prefix>
175 175
176 176 [app:main]
177 177 use = egg:kallithea
178 178 ## enable proxy prefix middleware
179 179 #filter-with = proxy-prefix
180 180
181 181 full_stack = true
182 182 static_files = true
183 ## Available Languages:
184 ## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW
185 lang =
183
184 ## Internationalization (see setup documentation for details)
185 ## By default, the language requested by the browser is used if available.
186 #i18n.enable = false
187 ## Fallback language, empty for English (valid values are the names of subdirectories in kallithea/i18n):
188 i18n.lang =
189
186 190 cache_dir = %(here)s/data
187 191 index_dir = %(here)s/data/index
188 192
189 193 ## perform a full repository scan on each server start, this should be
190 194 ## set to false after first startup, to allow faster server restarts.
191 195 #initial_repo_scan = false
192 196 initial_repo_scan = true
193 197
194 198 ## uncomment and set this path to use archive download cache
195 199 archive_cache_dir = %(here)s/tarballcache
196 200
197 201 ## change this to unique ID for security
198 202 app_instance_uuid = development-not-secret
199 203
200 204 ## cut off limit for large diffs (size in bytes)
201 205 cut_off_limit = 256000
202 206
203 207 ## force https in Kallithea, fixes https redirects, assumes it's always https
204 208 force_https = false
205 209
206 210 ## use Strict-Transport-Security headers
207 211 use_htsts = false
208 212
209 213 ## number of commits stats will parse on each iteration
210 214 commit_parse_limit = 25
211 215
212 216 ## path to git executable
213 217 git_path = git
214 218
215 219 ## git rev filter option, --all is the default filter, if you need to
216 220 ## hide all refs in changelog switch this to --branches --tags
217 221 #git_rev_filter = --branches --tags
218 222
219 223 ## RSS feed options
220 224 rss_cut_off_limit = 256000
221 225 rss_items_per_page = 10
222 226 rss_include_diff = false
223 227
224 228 ## options for showing and identifying changesets
225 229 show_sha_length = 12
226 230 show_revision_number = false
227 231
228 232 ## Canonical URL to use when creating full URLs in UI and texts.
229 233 ## Useful when the site is available under different names or protocols.
230 234 ## Defaults to what is provided in the WSGI environment.
231 235 #canonical_url = https://kallithea.example.com/repos
232 236
233 237 ## gist URL alias, used to create nicer urls for gist. This should be an
234 238 ## url that does rewrites to _admin/gists/<gistid>.
235 239 ## example: http://gist.example.com/{gistid}. Empty means use the internal
236 240 ## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid>
237 241 gist_alias_url =
238 242
239 243 ## white list of API enabled controllers. This allows to add list of
240 244 ## controllers to which access will be enabled by api_key. eg: to enable
241 245 ## api access to raw_files put `FilesController:raw`, to enable access to patches
242 246 ## add `ChangesetController:changeset_patch`. This list should be "," separated
243 247 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
244 248 ## Recommended settings below are commented out:
245 249 api_access_controllers_whitelist =
246 250 # ChangesetController:changeset_patch,
247 251 # ChangesetController:changeset_raw,
248 252 # FilesController:raw,
249 253 # FilesController:archivefile
250 254
251 255 ## default encoding used to convert from and to unicode
252 256 ## can be also a comma separated list of encoding in case of mixed encodings
253 257 default_encoding = utf8
254 258
255 259 ## issue tracker for Kallithea (leave blank to disable, absent for default)
256 260 #bugtracker = https://bitbucket.org/conservancy/kallithea/issues
257 261
258 262 ## issue tracking mapping for commits messages
259 263 ## comment out issue_pat, issue_server, issue_prefix to enable
260 264
261 265 ## pattern to get the issues from commit messages
262 266 ## default one used here is #<numbers> with a regex passive group for `#`
263 267 ## {id} will be all groups matched from this pattern
264 268
265 269 issue_pat = (?:\s*#)(\d+)
266 270
267 271 ## server url to the issue, each {id} will be replaced with match
268 272 ## fetched from the regex and {repo} is replaced with full repository name
269 273 ## including groups {repo_name} is replaced with just name of repo
270 274
271 275 issue_server_link = https://issues.example.com/{repo}/issue/{id}
272 276
273 277 ## prefix to add to link to indicate it's an url
274 278 ## #314 will be replaced by <issue_prefix><id>
275 279
276 280 issue_prefix = #
277 281
278 282 ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
279 283 ## multiple patterns, to other issues server, wiki or others
280 284 ## below an example how to create a wiki pattern
281 285 # wiki-some-id -> https://wiki.example.com/some-id
282 286
283 287 #issue_pat_wiki = (?:wiki-)(.+)
284 288 #issue_server_link_wiki = https://wiki.example.com/{id}
285 289 #issue_prefix_wiki = WIKI-
286 290
287 291 ## alternative return HTTP header for failed authentication. Default HTTP
288 292 ## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with
289 293 ## handling that. Set this variable to 403 to return HTTPForbidden
290 294 auth_ret_code =
291 295
292 296 ## locking return code. When repository is locked return this HTTP code. 2XX
293 297 ## codes don't break the transactions while 4XX codes do
294 298 lock_ret_code = 423
295 299
296 300 ## allows to change the repository location in settings page
297 301 allow_repo_location_change = True
298 302
299 303 ## allows to setup custom hooks in settings page
300 304 allow_custom_hooks_settings = True
301 305
302 306 ## extra extensions for indexing, space separated and without the leading '.'.
303 307 # index.extensions =
304 308 # gemfile
305 309 # lock
306 310
307 311 ## extra filenames for indexing, space separated
308 312 # index.filenames =
309 313 # .dockerignore
310 314 # .editorconfig
311 315 # INSTALL
312 316 # CHANGELOG
313 317
314 318 ####################################
315 319 ### CELERY CONFIG ####
316 320 ####################################
317 321
318 322 use_celery = false
319 323
320 324 ## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq:
321 325 broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost
322 326
323 327 celery.imports = kallithea.lib.celerylib.tasks
324 328 celery.accept.content = pickle
325 329 celery.result.backend = amqp
326 330 celery.result.dburi = amqp://
327 331 celery.result.serialier = json
328 332
329 333 #celery.send.task.error.emails = true
330 334 #celery.amqp.task.result.expires = 18000
331 335
332 336 celeryd.concurrency = 2
333 337 celeryd.max.tasks.per.child = 1
334 338
335 339 ## If true, tasks will never be sent to the queue, but executed locally instead.
336 340 celery.always.eager = false
337 341
338 342 ####################################
339 343 ### BEAKER CACHE ####
340 344 ####################################
341 345
342 346 beaker.cache.data_dir = %(here)s/data/cache/data
343 347 beaker.cache.lock_dir = %(here)s/data/cache/lock
344 348
345 349 beaker.cache.regions = short_term,long_term,sql_cache_short
346 350
347 351 beaker.cache.short_term.type = memory
348 352 beaker.cache.short_term.expire = 60
349 353 beaker.cache.short_term.key_length = 256
350 354
351 355 beaker.cache.long_term.type = memory
352 356 beaker.cache.long_term.expire = 36000
353 357 beaker.cache.long_term.key_length = 256
354 358
355 359 beaker.cache.sql_cache_short.type = memory
356 360 beaker.cache.sql_cache_short.expire = 10
357 361 beaker.cache.sql_cache_short.key_length = 256
358 362
359 363 ####################################
360 364 ### BEAKER SESSION ####
361 365 ####################################
362 366
363 367 ## Name of session cookie. Should be unique for a given host and path, even when running
364 368 ## on different ports. Otherwise, cookie sessions will be shared and messed up.
365 369 beaker.session.key = kallithea
366 370 ## Sessions should always only be accessible by the browser, not directly by JavaScript.
367 371 beaker.session.httponly = true
368 372 ## Session lifetime. 2592000 seconds is 30 days.
369 373 beaker.session.timeout = 2592000
370 374
371 375 ## Server secret used with HMAC to ensure integrity of cookies.
372 376 beaker.session.secret = development-not-secret
373 377 ## Further, encrypt the data with AES.
374 378 #beaker.session.encrypt_key = <key_for_encryption>
375 379 #beaker.session.validate_key = <validation_key>
376 380
377 381 ## Type of storage used for the session, current types are
378 382 ## dbm, file, memcached, database, and memory.
379 383
380 384 ## File system storage of session data. (default)
381 385 #beaker.session.type = file
382 386
383 387 ## Cookie only, store all session data inside the cookie. Requires secure secrets.
384 388 #beaker.session.type = cookie
385 389
386 390 ## Database storage of session data.
387 391 #beaker.session.type = ext:database
388 392 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea
389 393 #beaker.session.table_name = db_session
390 394
391 395 ############################
392 396 ## ERROR HANDLING SYSTEMS ##
393 397 ############################
394 398
395 399 # Propagate email settings to ErrorReporter of TurboGears2
396 400 # You do not normally need to change these lines
397 401 get trace_errors.error_email = email_to
398 402 get trace_errors.smtp_server = smtp_server
399 403 get trace_errors.smtp_port = smtp_port
400 404 get trace_errors.from_address = error_email_from
401 405
402 406 ####################
403 407 ### [appenlight] ###
404 408 ####################
405 409
406 410 ## AppEnlight is tailored to work with Kallithea, see
407 411 ## http://appenlight.com for details how to obtain an account
408 412 ## you must install python package `appenlight_client` to make it work
409 413
410 414 ## appenlight enabled
411 415 appenlight = false
412 416
413 417 appenlight.server_url = https://api.appenlight.com
414 418 appenlight.api_key = YOUR_API_KEY
415 419
416 420 ## TWEAK AMOUNT OF INFO SENT HERE
417 421
418 422 ## enables 404 error logging (default False)
419 423 appenlight.report_404 = false
420 424
421 425 ## time in seconds after request is considered being slow (default 1)
422 426 appenlight.slow_request_time = 1
423 427
424 428 ## record slow requests in application
425 429 ## (needs to be enabled for slow datastore recording and time tracking)
426 430 appenlight.slow_requests = true
427 431
428 432 ## enable hooking to application loggers
429 433 #appenlight.logging = true
430 434
431 435 ## minimum log level for log capture
432 436 #appenlight.logging.level = WARNING
433 437
434 438 ## send logs only from erroneous/slow requests
435 439 ## (saves API quota for intensive logging)
436 440 appenlight.logging_on_error = false
437 441
438 442 ## list of additional keywords that should be grabbed from environ object
439 443 ## can be string with comma separated list of words in lowercase
440 444 ## (by default client will always send following info:
441 445 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
442 446 ## start with HTTP* this list be extended with additional keywords here
443 447 appenlight.environ_keys_whitelist =
444 448
445 449 ## list of keywords that should be blanked from request object
446 450 ## can be string with comma separated list of words in lowercase
447 451 ## (by default client will always blank keys that contain following words
448 452 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
449 453 ## this list be extended with additional keywords set here
450 454 appenlight.request_keys_blacklist =
451 455
452 456 ## list of namespaces that should be ignores when gathering log entries
453 457 ## can be string with comma separated list of namespaces
454 458 ## (by default the client ignores own entries: appenlight_client.client)
455 459 appenlight.log_namespace_blacklist =
456 460
457 461 ################
458 462 ### [sentry] ###
459 463 ################
460 464
461 465 ## sentry is a alternative open source error aggregator
462 466 ## you must install python packages `sentry` and `raven` to enable
463 467
464 468 sentry.dsn = YOUR_DNS
465 469 sentry.servers =
466 470 sentry.name =
467 471 sentry.key =
468 472 sentry.public_key =
469 473 sentry.secret_key =
470 474 sentry.project =
471 475 sentry.site =
472 476 sentry.include_paths =
473 477 sentry.exclude_paths =
474 478
475 479 ################################################################################
476 480 ## WARNING: *DEBUG MODE MUST BE OFF IN A PRODUCTION ENVIRONMENT* ##
477 481 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
478 482 ## execute malicious code after an exception is raised. ##
479 483 ################################################################################
480 484 #debug = false
481 485 debug = true
482 486
483 487 ##################################
484 488 ### LOGVIEW CONFIG ###
485 489 ##################################
486 490
487 491 logview.sqlalchemy = #faa
488 492 logview.pylons.templating = #bfb
489 493 logview.pylons.util = #eee
490 494
491 495 #########################################################
492 496 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
493 497 #########################################################
494 498
495 499 # SQLITE [default]
496 500 sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60
497 501
498 502 # POSTGRESQL
499 503 #sqlalchemy.url = postgresql://user:pass@localhost/kallithea
500 504
501 505 # MySQL
502 506 #sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
503 507
504 508 # see sqlalchemy docs for others
505 509
506 510 sqlalchemy.pool_recycle = 3600
507 511
508 512 ################################
509 513 ### ALEMBIC CONFIGURATION ####
510 514 ################################
511 515
512 516 [alembic]
513 517 script_location = kallithea:alembic
514 518
515 519 ################################
516 520 ### LOGGING CONFIGURATION ####
517 521 ################################
518 522
519 523 [loggers]
520 524 keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer
521 525
522 526 [handlers]
523 527 keys = console, console_sql
524 528
525 529 [formatters]
526 530 keys = generic, color_formatter, color_formatter_sql
527 531
528 532 #############
529 533 ## LOGGERS ##
530 534 #############
531 535
532 536 [logger_root]
533 537 level = NOTSET
534 538 handlers = console
535 539
536 540 [logger_routes]
537 541 level = DEBUG
538 542 handlers =
539 543 qualname = routes.middleware
540 544 ## "level = DEBUG" logs the route matched and routing variables.
541 545 propagate = 1
542 546
543 547 [logger_beaker]
544 548 level = DEBUG
545 549 handlers =
546 550 qualname = beaker.container
547 551 propagate = 1
548 552
549 553 [logger_templates]
550 554 level = INFO
551 555 handlers =
552 556 qualname = pylons.templating
553 557 propagate = 1
554 558
555 559 [logger_kallithea]
556 560 level = DEBUG
557 561 handlers =
558 562 qualname = kallithea
559 563 propagate = 1
560 564
561 565 [logger_tg]
562 566 level = DEBUG
563 567 handlers =
564 568 qualname = tg
565 569 propagate = 1
566 570
567 571 [logger_gearbox]
568 572 level = DEBUG
569 573 handlers =
570 574 qualname = gearbox
571 575 propagate = 1
572 576
573 577 [logger_sqlalchemy]
574 578 level = WARN
575 579 handlers = console_sql
576 580 qualname = sqlalchemy.engine
577 581 propagate = 0
578 582
579 583 [logger_whoosh_indexer]
580 584 level = DEBUG
581 585 handlers =
582 586 qualname = whoosh_indexer
583 587 propagate = 1
584 588
585 589 ##############
586 590 ## HANDLERS ##
587 591 ##############
588 592
589 593 [handler_console]
590 594 class = StreamHandler
591 595 args = (sys.stderr,)
592 596 #formatter = generic
593 597 formatter = color_formatter
594 598
595 599 [handler_console_sql]
596 600 class = StreamHandler
597 601 args = (sys.stderr,)
598 602 #formatter = generic
599 603 formatter = color_formatter_sql
600 604
601 605 ################
602 606 ## FORMATTERS ##
603 607 ################
604 608
605 609 [formatter_generic]
606 610 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
607 611 datefmt = %Y-%m-%d %H:%M:%S
608 612
609 613 [formatter_color_formatter]
610 614 class = kallithea.lib.colored_formatter.ColorFormatter
611 615 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
612 616 datefmt = %Y-%m-%d %H:%M:%S
613 617
614 618 [formatter_color_formatter_sql]
615 619 class = kallithea.lib.colored_formatter.ColorFormatterSql
616 620 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
617 621 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,621 +1,625 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%text>################################################################################</%text>
3 3 <%text>################################################################################</%text>
4 4 # Kallithea - config file generated with kallithea-config #
5 5 # #
6 6 # The %(here)s variable will be replaced with the parent directory of this file#
7 7 <%text>################################################################################</%text>
8 8 <%text>################################################################################</%text>
9 9
10 10 [DEFAULT]
11 11
12 12 <%text>################################################################################</%text>
13 13 <%text>## Email settings ##</%text>
14 14 <%text>## ##</%text>
15 15 <%text>## Refer to the documentation ("Email settings") for more details. ##</%text>
16 16 <%text>## ##</%text>
17 17 <%text>## It is recommended to use a valid sender address that passes access ##</%text>
18 18 <%text>## validation and spam filtering in mail servers. ##</%text>
19 19 <%text>################################################################################</%text>
20 20
21 21 <%text>## 'From' header for application emails. You can optionally add a name.</%text>
22 22 <%text>## Default:</%text>
23 23 #app_email_from = Kallithea
24 24 <%text>## Examples:</%text>
25 25 #app_email_from = Kallithea <kallithea-noreply@example.com>
26 26 #app_email_from = kallithea-noreply@example.com
27 27
28 28 <%text>## Subject prefix for application emails.</%text>
29 29 <%text>## A space between this prefix and the real subject is automatically added.</%text>
30 30 <%text>## Default:</%text>
31 31 #email_prefix =
32 32 <%text>## Example:</%text>
33 33 #email_prefix = [Kallithea]
34 34
35 35 <%text>## Recipients for error emails and fallback recipients of application mails.</%text>
36 36 <%text>## Multiple addresses can be specified, space-separated.</%text>
37 37 <%text>## Only addresses are allowed, do not add any name part.</%text>
38 38 <%text>## Default:</%text>
39 39 #email_to =
40 40 <%text>## Examples:</%text>
41 41 #email_to = admin@example.com
42 42 #email_to = admin@example.com another_admin@example.com
43 43 email_to =
44 44
45 45 <%text>## 'From' header for error emails. You can optionally add a name.</%text>
46 46 <%text>## Default: (none)</%text>
47 47 <%text>## Examples:</%text>
48 48 #error_email_from = Kallithea Errors <kallithea-noreply@example.com>
49 49 #error_email_from = kallithea_errors@example.com
50 50 error_email_from =
51 51
52 52 <%text>## SMTP server settings</%text>
53 53 <%text>## If specifying credentials, make sure to use secure connections.</%text>
54 54 <%text>## Default: Send unencrypted unauthenticated mails to the specified smtp_server.</%text>
55 55 <%text>## For "SSL", use smtp_use_ssl = true and smtp_port = 465.</%text>
56 56 <%text>## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587.</%text>
57 57 smtp_server =
58 58 #smtp_username =
59 59 #smtp_password =
60 60 smtp_port =
61 61 #smtp_use_ssl = false
62 62 #smtp_use_tls = false
63 63
64 64 [server:main]
65 65 %if http_server == 'gearbox':
66 66 <%text>## Gearbox default web server ##</%text>
67 67 use = egg:gearbox#wsgiref
68 68 <%text>## nr of worker threads to spawn</%text>
69 69 threadpool_workers = 1
70 70 <%text>## max request before thread respawn</%text>
71 71 threadpool_max_requests = 100
72 72 <%text>## option to use threads of process</%text>
73 73 use_threadpool = true
74 74
75 75 %elif http_server == 'gevent':
76 76 <%text>## Gearbox gevent web server ##</%text>
77 77 use = egg:gearbox#gevent
78 78
79 79 %elif http_server == 'waitress':
80 80 <%text>## WAITRESS ##</%text>
81 81 use = egg:waitress#main
82 82 <%text>## number of worker threads</%text>
83 83 threads = 1
84 84 <%text>## MAX BODY SIZE 100GB</%text>
85 85 max_request_body_size = 107374182400
86 86 <%text>## use poll instead of select, fixes fd limits, may not work on old</%text>
87 87 <%text>## windows systems.</%text>
88 88 #asyncore_use_poll = True
89 89
90 90 %elif http_server == 'gunicorn':
91 91 <%text>## GUNICORN ##</%text>
92 92 use = egg:gunicorn#main
93 93 <%text>## number of process workers. You must set `instance_id = *` when this option</%text>
94 94 <%text>## is set to more than one worker</%text>
95 95 workers = 1
96 96 <%text>## process name</%text>
97 97 proc_name = kallithea
98 98 <%text>## type of worker class, one of sync, eventlet, gevent, tornado</%text>
99 99 <%text>## recommended for bigger setup is using of of other than sync one</%text>
100 100 worker_class = sync
101 101 max_requests = 1000
102 102 <%text>## amount of time a worker can handle request before it gets killed and</%text>
103 103 <%text>## restarted</%text>
104 104 timeout = 3600
105 105
106 106 %elif http_server == 'uwsgi':
107 107 <%text>## UWSGI ##</%text>
108 108 <%text>## run with uwsgi --ini-paste-logged <inifile.ini></%text>
109 109 [uwsgi]
110 110 socket = /tmp/uwsgi.sock
111 111 master = true
112 112 http = 127.0.0.1:5000
113 113
114 114 <%text>## set as deamon and redirect all output to file</%text>
115 115 #daemonize = ./uwsgi_kallithea.log
116 116
117 117 <%text>## master process PID</%text>
118 118 pidfile = ./uwsgi_kallithea.pid
119 119
120 120 <%text>## stats server with workers statistics, use uwsgitop</%text>
121 121 <%text>## for monitoring, `uwsgitop 127.0.0.1:1717`</%text>
122 122 stats = 127.0.0.1:1717
123 123 memory-report = true
124 124
125 125 <%text>## log 5XX errors</%text>
126 126 log-5xx = true
127 127
128 128 <%text>## Set the socket listen queue size.</%text>
129 129 listen = 256
130 130
131 131 <%text>## Gracefully Reload workers after the specified amount of managed requests</%text>
132 132 <%text>## (avoid memory leaks).</%text>
133 133 max-requests = 1000
134 134
135 135 <%text>## enable large buffers</%text>
136 136 buffer-size = 65535
137 137
138 138 <%text>## socket and http timeouts ##</%text>
139 139 http-timeout = 3600
140 140 socket-timeout = 3600
141 141
142 142 <%text>## Log requests slower than the specified number of milliseconds.</%text>
143 143 log-slow = 10
144 144
145 145 <%text>## Exit if no app can be loaded.</%text>
146 146 need-app = true
147 147
148 148 <%text>## Set lazy mode (load apps in workers instead of master).</%text>
149 149 lazy = true
150 150
151 151 <%text>## scaling ##</%text>
152 152 <%text>## set cheaper algorithm to use, if not set default will be used</%text>
153 153 cheaper-algo = spare
154 154
155 155 <%text>## minimum number of workers to keep at all times</%text>
156 156 cheaper = 1
157 157
158 158 <%text>## number of workers to spawn at startup</%text>
159 159 cheaper-initial = 1
160 160
161 161 <%text>## maximum number of workers that can be spawned</%text>
162 162 workers = 4
163 163
164 164 <%text>## how many workers should be spawned at a time</%text>
165 165 cheaper-step = 1
166 166
167 167 %endif
168 168 <%text>## COMMON ##</%text>
169 169 host = ${host}
170 170 port = ${port}
171 171
172 172 <%text>## middleware for hosting the WSGI application under a URL prefix</%text>
173 173 #[filter:proxy-prefix]
174 174 #use = egg:PasteDeploy#prefix
175 175 #prefix = /<your-prefix>
176 176
177 177 [app:main]
178 178 use = egg:kallithea
179 179 <%text>## enable proxy prefix middleware</%text>
180 180 #filter-with = proxy-prefix
181 181
182 182 full_stack = true
183 183 static_files = true
184 <%text>## Available Languages:</%text>
185 <%text>## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW</%text>
186 lang =
184
185 <%text>## Internationalization (see setup documentation for details)</%text>
186 <%text>## By default, the language requested by the browser is used if available.</%text>
187 #i18n.enable = false
188 <%text>## Fallback language, empty for English (valid values are the names of subdirectories in kallithea/i18n):</%text>
189 i18n.lang =
190
187 191 cache_dir = %(here)s/data
188 192 index_dir = %(here)s/data/index
189 193
190 194 <%text>## perform a full repository scan on each server start, this should be</%text>
191 195 <%text>## set to false after first startup, to allow faster server restarts.</%text>
192 196 initial_repo_scan = false
193 197
194 198 <%text>## uncomment and set this path to use archive download cache</%text>
195 199 archive_cache_dir = %(here)s/tarballcache
196 200
197 201 <%text>## change this to unique ID for security</%text>
198 202 app_instance_uuid = ${uuid()}
199 203
200 204 <%text>## cut off limit for large diffs (size in bytes)</%text>
201 205 cut_off_limit = 256000
202 206
203 207 <%text>## force https in Kallithea, fixes https redirects, assumes it's always https</%text>
204 208 force_https = false
205 209
206 210 <%text>## use Strict-Transport-Security headers</%text>
207 211 use_htsts = false
208 212
209 213 <%text>## number of commits stats will parse on each iteration</%text>
210 214 commit_parse_limit = 25
211 215
212 216 <%text>## path to git executable</%text>
213 217 git_path = git
214 218
215 219 <%text>## git rev filter option, --all is the default filter, if you need to</%text>
216 220 <%text>## hide all refs in changelog switch this to --branches --tags</%text>
217 221 #git_rev_filter = --branches --tags
218 222
219 223 <%text>## RSS feed options</%text>
220 224 rss_cut_off_limit = 256000
221 225 rss_items_per_page = 10
222 226 rss_include_diff = false
223 227
224 228 <%text>## options for showing and identifying changesets</%text>
225 229 show_sha_length = 12
226 230 show_revision_number = false
227 231
228 232 <%text>## Canonical URL to use when creating full URLs in UI and texts.</%text>
229 233 <%text>## Useful when the site is available under different names or protocols.</%text>
230 234 <%text>## Defaults to what is provided in the WSGI environment.</%text>
231 235 #canonical_url = https://kallithea.example.com/repos
232 236
233 237 <%text>## gist URL alias, used to create nicer urls for gist. This should be an</%text>
234 238 <%text>## url that does rewrites to _admin/gists/<gistid>.</%text>
235 239 <%text>## example: http://gist.example.com/{gistid}. Empty means use the internal</%text>
236 240 <%text>## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid></%text>
237 241 gist_alias_url =
238 242
239 243 <%text>## white list of API enabled controllers. This allows to add list of</%text>
240 244 <%text>## controllers to which access will be enabled by api_key. eg: to enable</%text>
241 245 <%text>## api access to raw_files put `FilesController:raw`, to enable access to patches</%text>
242 246 <%text>## add `ChangesetController:changeset_patch`. This list should be "," separated</%text>
243 247 <%text>## Syntax is <ControllerClass>:<function>. Check debug logs for generated names</%text>
244 248 <%text>## Recommended settings below are commented out:</%text>
245 249 api_access_controllers_whitelist =
246 250 # ChangesetController:changeset_patch,
247 251 # ChangesetController:changeset_raw,
248 252 # FilesController:raw,
249 253 # FilesController:archivefile
250 254
251 255 <%text>## default encoding used to convert from and to unicode</%text>
252 256 <%text>## can be also a comma separated list of encoding in case of mixed encodings</%text>
253 257 default_encoding = utf8
254 258
255 259 <%text>## issue tracker for Kallithea (leave blank to disable, absent for default)</%text>
256 260 #bugtracker = https://bitbucket.org/conservancy/kallithea/issues
257 261
258 262 <%text>## issue tracking mapping for commits messages</%text>
259 263 <%text>## comment out issue_pat, issue_server, issue_prefix to enable</%text>
260 264
261 265 <%text>## pattern to get the issues from commit messages</%text>
262 266 <%text>## default one used here is #<numbers> with a regex passive group for `#`</%text>
263 267 <%text>## {id} will be all groups matched from this pattern</%text>
264 268
265 269 issue_pat = (?:\s*#)(\d+)
266 270
267 271 <%text>## server url to the issue, each {id} will be replaced with match</%text>
268 272 <%text>## fetched from the regex and {repo} is replaced with full repository name</%text>
269 273 <%text>## including groups {repo_name} is replaced with just name of repo</%text>
270 274
271 275 issue_server_link = https://issues.example.com/{repo}/issue/{id}
272 276
273 277 <%text>## prefix to add to link to indicate it's an url</%text>
274 278 <%text>## #314 will be replaced by <issue_prefix><id></%text>
275 279
276 280 issue_prefix = #
277 281
278 282 <%text>## issue_pat, issue_server_link, issue_prefix can have suffixes to specify</%text>
279 283 <%text>## multiple patterns, to other issues server, wiki or others</%text>
280 284 <%text>## below an example how to create a wiki pattern</%text>
281 285 # wiki-some-id -> https://wiki.example.com/some-id
282 286
283 287 #issue_pat_wiki = (?:wiki-)(.+)
284 288 #issue_server_link_wiki = https://wiki.example.com/{id}
285 289 #issue_prefix_wiki = WIKI-
286 290
287 291 <%text>## alternative return HTTP header for failed authentication. Default HTTP</%text>
288 292 <%text>## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with</%text>
289 293 <%text>## handling that. Set this variable to 403 to return HTTPForbidden</%text>
290 294 auth_ret_code =
291 295
292 296 <%text>## locking return code. When repository is locked return this HTTP code. 2XX</%text>
293 297 <%text>## codes don't break the transactions while 4XX codes do</%text>
294 298 lock_ret_code = 423
295 299
296 300 <%text>## allows to change the repository location in settings page</%text>
297 301 allow_repo_location_change = True
298 302
299 303 <%text>## allows to setup custom hooks in settings page</%text>
300 304 allow_custom_hooks_settings = True
301 305
302 306 <%text>## extra extensions for indexing, space separated and without the leading '.'.</%text>
303 307 # index.extensions =
304 308 # gemfile
305 309 # lock
306 310
307 311 <%text>## extra filenames for indexing, space separated</%text>
308 312 # index.filenames =
309 313 # .dockerignore
310 314 # .editorconfig
311 315 # INSTALL
312 316 # CHANGELOG
313 317
314 318 <%text>####################################</%text>
315 319 <%text>### CELERY CONFIG ####</%text>
316 320 <%text>####################################</%text>
317 321
318 322 use_celery = false
319 323
320 324 <%text>## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq:</%text>
321 325 broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost
322 326
323 327 celery.imports = kallithea.lib.celerylib.tasks
324 328 celery.accept.content = pickle
325 329 celery.result.backend = amqp
326 330 celery.result.dburi = amqp://
327 331 celery.result.serialier = json
328 332
329 333 #celery.send.task.error.emails = true
330 334 #celery.amqp.task.result.expires = 18000
331 335
332 336 celeryd.concurrency = 2
333 337 celeryd.max.tasks.per.child = 1
334 338
335 339 <%text>## If true, tasks will never be sent to the queue, but executed locally instead.</%text>
336 340 celery.always.eager = false
337 341
338 342 <%text>####################################</%text>
339 343 <%text>### BEAKER CACHE ####</%text>
340 344 <%text>####################################</%text>
341 345
342 346 beaker.cache.data_dir = %(here)s/data/cache/data
343 347 beaker.cache.lock_dir = %(here)s/data/cache/lock
344 348
345 349 beaker.cache.regions = short_term,long_term,sql_cache_short
346 350
347 351 beaker.cache.short_term.type = memory
348 352 beaker.cache.short_term.expire = 60
349 353 beaker.cache.short_term.key_length = 256
350 354
351 355 beaker.cache.long_term.type = memory
352 356 beaker.cache.long_term.expire = 36000
353 357 beaker.cache.long_term.key_length = 256
354 358
355 359 beaker.cache.sql_cache_short.type = memory
356 360 beaker.cache.sql_cache_short.expire = 10
357 361 beaker.cache.sql_cache_short.key_length = 256
358 362
359 363 <%text>####################################</%text>
360 364 <%text>### BEAKER SESSION ####</%text>
361 365 <%text>####################################</%text>
362 366
363 367 <%text>## Name of session cookie. Should be unique for a given host and path, even when running</%text>
364 368 <%text>## on different ports. Otherwise, cookie sessions will be shared and messed up.</%text>
365 369 beaker.session.key = kallithea
366 370 <%text>## Sessions should always only be accessible by the browser, not directly by JavaScript.</%text>
367 371 beaker.session.httponly = true
368 372 <%text>## Session lifetime. 2592000 seconds is 30 days.</%text>
369 373 beaker.session.timeout = 2592000
370 374
371 375 <%text>## Server secret used with HMAC to ensure integrity of cookies.</%text>
372 376 beaker.session.secret = ${uuid()}
373 377 <%text>## Further, encrypt the data with AES.</%text>
374 378 #beaker.session.encrypt_key = <key_for_encryption>
375 379 #beaker.session.validate_key = <validation_key>
376 380
377 381 <%text>## Type of storage used for the session, current types are</%text>
378 382 <%text>## dbm, file, memcached, database, and memory.</%text>
379 383
380 384 <%text>## File system storage of session data. (default)</%text>
381 385 #beaker.session.type = file
382 386
383 387 <%text>## Cookie only, store all session data inside the cookie. Requires secure secrets.</%text>
384 388 #beaker.session.type = cookie
385 389
386 390 <%text>## Database storage of session data.</%text>
387 391 #beaker.session.type = ext:database
388 392 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea
389 393 #beaker.session.table_name = db_session
390 394
391 395 %if error_aggregation_service == 'appenlight':
392 396 <%text>############################</%text>
393 397 <%text>## ERROR HANDLING SYSTEMS ##</%text>
394 398 <%text>############################</%text>
395 399
396 400 # Propagate email settings to ErrorReporter of TurboGears2
397 401 # You do not normally need to change these lines
398 402 get trace_errors.error_email = email_to
399 403 get trace_errors.smtp_server = smtp_server
400 404 get trace_errors.smtp_port = smtp_port
401 405 get trace_errors.from_address = error_email_from
402 406
403 407 <%text>####################</%text>
404 408 <%text>### [appenlight] ###</%text>
405 409 <%text>####################</%text>
406 410
407 411 <%text>## AppEnlight is tailored to work with Kallithea, see</%text>
408 412 <%text>## http://appenlight.com for details how to obtain an account</%text>
409 413 <%text>## you must install python package `appenlight_client` to make it work</%text>
410 414
411 415 <%text>## appenlight enabled</%text>
412 416 appenlight = false
413 417
414 418 appenlight.server_url = https://api.appenlight.com
415 419 appenlight.api_key = YOUR_API_KEY
416 420
417 421 <%text>## TWEAK AMOUNT OF INFO SENT HERE</%text>
418 422
419 423 <%text>## enables 404 error logging (default False)</%text>
420 424 appenlight.report_404 = false
421 425
422 426 <%text>## time in seconds after request is considered being slow (default 1)</%text>
423 427 appenlight.slow_request_time = 1
424 428
425 429 <%text>## record slow requests in application</%text>
426 430 <%text>## (needs to be enabled for slow datastore recording and time tracking)</%text>
427 431 appenlight.slow_requests = true
428 432
429 433 <%text>## enable hooking to application loggers</%text>
430 434 #appenlight.logging = true
431 435
432 436 <%text>## minimum log level for log capture</%text>
433 437 #appenlight.logging.level = WARNING
434 438
435 439 <%text>## send logs only from erroneous/slow requests</%text>
436 440 <%text>## (saves API quota for intensive logging)</%text>
437 441 appenlight.logging_on_error = false
438 442
439 443 <%text>## list of additional keywords that should be grabbed from environ object</%text>
440 444 <%text>## can be string with comma separated list of words in lowercase</%text>
441 445 <%text>## (by default client will always send following info:</%text>
442 446 <%text>## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that</%text>
443 447 <%text>## start with HTTP* this list be extended with additional keywords here</%text>
444 448 appenlight.environ_keys_whitelist =
445 449
446 450 <%text>## list of keywords that should be blanked from request object</%text>
447 451 <%text>## can be string with comma separated list of words in lowercase</%text>
448 452 <%text>## (by default client will always blank keys that contain following words</%text>
449 453 <%text>## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'</%text>
450 454 <%text>## this list be extended with additional keywords set here</%text>
451 455 appenlight.request_keys_blacklist =
452 456
453 457 <%text>## list of namespaces that should be ignores when gathering log entries</%text>
454 458 <%text>## can be string with comma separated list of namespaces</%text>
455 459 <%text>## (by default the client ignores own entries: appenlight_client.client)</%text>
456 460 appenlight.log_namespace_blacklist =
457 461
458 462 %elif error_aggregation_service == 'sentry':
459 463 <%text>################</%text>
460 464 <%text>### [sentry] ###</%text>
461 465 <%text>################</%text>
462 466
463 467 <%text>## sentry is a alternative open source error aggregator</%text>
464 468 <%text>## you must install python packages `sentry` and `raven` to enable</%text>
465 469
466 470 sentry.dsn = YOUR_DNS
467 471 sentry.servers =
468 472 sentry.name =
469 473 sentry.key =
470 474 sentry.public_key =
471 475 sentry.secret_key =
472 476 sentry.project =
473 477 sentry.site =
474 478 sentry.include_paths =
475 479 sentry.exclude_paths =
476 480
477 481 %endif
478 482 <%text>################################################################################</%text>
479 483 <%text>## WARNING: *DEBUG MODE MUST BE OFF IN A PRODUCTION ENVIRONMENT* ##</%text>
480 484 <%text>## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##</%text>
481 485 <%text>## execute malicious code after an exception is raised. ##</%text>
482 486 <%text>################################################################################</%text>
483 487 debug = false
484 488
485 489 <%text>##################################</%text>
486 490 <%text>### LOGVIEW CONFIG ###</%text>
487 491 <%text>##################################</%text>
488 492
489 493 logview.sqlalchemy = #faa
490 494 logview.pylons.templating = #bfb
491 495 logview.pylons.util = #eee
492 496
493 497 <%text>#########################################################</%text>
494 498 <%text>### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###</%text>
495 499 <%text>#########################################################</%text>
496 500
497 501 %if database_engine == 'sqlite':
498 502 # SQLITE [default]
499 503 sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60
500 504
501 505 %elif database_engine == 'postgres':
502 506 # POSTGRESQL
503 507 sqlalchemy.url = postgresql://user:pass@localhost/kallithea
504 508
505 509 %elif database_engine == 'mysql':
506 510 # MySQL
507 511 sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
508 512
509 513 %endif
510 514 # see sqlalchemy docs for others
511 515
512 516 sqlalchemy.pool_recycle = 3600
513 517
514 518 <%text>################################</%text>
515 519 <%text>### ALEMBIC CONFIGURATION ####</%text>
516 520 <%text>################################</%text>
517 521
518 522 [alembic]
519 523 script_location = kallithea:alembic
520 524
521 525 <%text>################################</%text>
522 526 <%text>### LOGGING CONFIGURATION ####</%text>
523 527 <%text>################################</%text>
524 528
525 529 [loggers]
526 530 keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer
527 531
528 532 [handlers]
529 533 keys = console, console_sql
530 534
531 535 [formatters]
532 536 keys = generic, color_formatter, color_formatter_sql
533 537
534 538 <%text>#############</%text>
535 539 <%text>## LOGGERS ##</%text>
536 540 <%text>#############</%text>
537 541
538 542 [logger_root]
539 543 level = NOTSET
540 544 handlers = console
541 545
542 546 [logger_routes]
543 547 level = DEBUG
544 548 handlers =
545 549 qualname = routes.middleware
546 550 <%text>## "level = DEBUG" logs the route matched and routing variables.</%text>
547 551 propagate = 1
548 552
549 553 [logger_beaker]
550 554 level = DEBUG
551 555 handlers =
552 556 qualname = beaker.container
553 557 propagate = 1
554 558
555 559 [logger_templates]
556 560 level = INFO
557 561 handlers =
558 562 qualname = pylons.templating
559 563 propagate = 1
560 564
561 565 [logger_kallithea]
562 566 level = DEBUG
563 567 handlers =
564 568 qualname = kallithea
565 569 propagate = 1
566 570
567 571 [logger_tg]
568 572 level = DEBUG
569 573 handlers =
570 574 qualname = tg
571 575 propagate = 1
572 576
573 577 [logger_gearbox]
574 578 level = DEBUG
575 579 handlers =
576 580 qualname = gearbox
577 581 propagate = 1
578 582
579 583 [logger_sqlalchemy]
580 584 level = WARN
581 585 handlers = console_sql
582 586 qualname = sqlalchemy.engine
583 587 propagate = 0
584 588
585 589 [logger_whoosh_indexer]
586 590 level = DEBUG
587 591 handlers =
588 592 qualname = whoosh_indexer
589 593 propagate = 1
590 594
591 595 <%text>##############</%text>
592 596 <%text>## HANDLERS ##</%text>
593 597 <%text>##############</%text>
594 598
595 599 [handler_console]
596 600 class = StreamHandler
597 601 args = (sys.stderr,)
598 602 formatter = generic
599 603
600 604 [handler_console_sql]
601 605 class = StreamHandler
602 606 args = (sys.stderr,)
603 607 formatter = generic
604 608
605 609 <%text>################</%text>
606 610 <%text>## FORMATTERS ##</%text>
607 611 <%text>################</%text>
608 612
609 613 [formatter_generic]
610 614 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
611 615 datefmt = %Y-%m-%d %H:%M:%S
612 616
613 617 [formatter_color_formatter]
614 618 class = kallithea.lib.colored_formatter.ColorFormatter
615 619 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
616 620 datefmt = %Y-%m-%d %H:%M:%S
617 621
618 622 [formatter_color_formatter_sql]
619 623 class = kallithea.lib.colored_formatter.ColorFormatterSql
620 624 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
621 625 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,620 +1,624 b''
1 1 ################################################################################
2 2 ################################################################################
3 3 # Kallithea - config for tests: #
4 4 # sqlalchemy and kallithea_test.sqlite #
5 5 # custom logging #
6 6 # #
7 7 # The %(here)s variable will be replaced with the parent directory of this file#
8 8 ################################################################################
9 9 ################################################################################
10 10
11 11 [DEFAULT]
12 12
13 13 ################################################################################
14 14 ## Email settings ##
15 15 ## ##
16 16 ## Refer to the documentation ("Email settings") for more details. ##
17 17 ## ##
18 18 ## It is recommended to use a valid sender address that passes access ##
19 19 ## validation and spam filtering in mail servers. ##
20 20 ################################################################################
21 21
22 22 ## 'From' header for application emails. You can optionally add a name.
23 23 ## Default:
24 24 #app_email_from = Kallithea
25 25 ## Examples:
26 26 #app_email_from = Kallithea <kallithea-noreply@example.com>
27 27 #app_email_from = kallithea-noreply@example.com
28 28
29 29 ## Subject prefix for application emails.
30 30 ## A space between this prefix and the real subject is automatically added.
31 31 ## Default:
32 32 #email_prefix =
33 33 ## Example:
34 34 #email_prefix = [Kallithea]
35 35
36 36 ## Recipients for error emails and fallback recipients of application mails.
37 37 ## Multiple addresses can be specified, space-separated.
38 38 ## Only addresses are allowed, do not add any name part.
39 39 ## Default:
40 40 #email_to =
41 41 ## Examples:
42 42 #email_to = admin@example.com
43 43 #email_to = admin@example.com another_admin@example.com
44 44 email_to =
45 45
46 46 ## 'From' header for error emails. You can optionally add a name.
47 47 ## Default: (none)
48 48 ## Examples:
49 49 #error_email_from = Kallithea Errors <kallithea-noreply@example.com>
50 50 #error_email_from = kallithea_errors@example.com
51 51 error_email_from =
52 52
53 53 ## SMTP server settings
54 54 ## If specifying credentials, make sure to use secure connections.
55 55 ## Default: Send unencrypted unauthenticated mails to the specified smtp_server.
56 56 ## For "SSL", use smtp_use_ssl = true and smtp_port = 465.
57 57 ## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587.
58 58 smtp_server =
59 59 #smtp_username =
60 60 #smtp_password =
61 61 smtp_port =
62 62 #smtp_use_ssl = false
63 63 #smtp_use_tls = false
64 64
65 65 [server:main]
66 66 ## Gearbox default web server ##
67 67 #use = egg:gearbox#wsgiref
68 68 ## nr of worker threads to spawn
69 69 #threadpool_workers = 1
70 70 ## max request before thread respawn
71 71 #threadpool_max_requests = 100
72 72 ## option to use threads of process
73 73 #use_threadpool = true
74 74
75 75 ## Gearbox gevent web server ##
76 76 #use = egg:gearbox#gevent
77 77
78 78 ## WAITRESS ##
79 79 use = egg:waitress#main
80 80 ## number of worker threads
81 81 threads = 1
82 82 ## MAX BODY SIZE 100GB
83 83 max_request_body_size = 107374182400
84 84 ## use poll instead of select, fixes fd limits, may not work on old
85 85 ## windows systems.
86 86 #asyncore_use_poll = True
87 87
88 88 ## GUNICORN ##
89 89 #use = egg:gunicorn#main
90 90 ## number of process workers. You must set `instance_id = *` when this option
91 91 ## is set to more than one worker
92 92 #workers = 1
93 93 ## process name
94 94 #proc_name = kallithea
95 95 ## type of worker class, one of sync, eventlet, gevent, tornado
96 96 ## recommended for bigger setup is using of of other than sync one
97 97 #worker_class = sync
98 98 #max_requests = 1000
99 99 ## amount of time a worker can handle request before it gets killed and
100 100 ## restarted
101 101 #timeout = 3600
102 102
103 103 ## UWSGI ##
104 104 ## run with uwsgi --ini-paste-logged <inifile.ini>
105 105 #[uwsgi]
106 106 #socket = /tmp/uwsgi.sock
107 107 #master = true
108 108 #http = 127.0.0.1:5000
109 109
110 110 ## set as deamon and redirect all output to file
111 111 #daemonize = ./uwsgi_kallithea.log
112 112
113 113 ## master process PID
114 114 #pidfile = ./uwsgi_kallithea.pid
115 115
116 116 ## stats server with workers statistics, use uwsgitop
117 117 ## for monitoring, `uwsgitop 127.0.0.1:1717`
118 118 #stats = 127.0.0.1:1717
119 119 #memory-report = true
120 120
121 121 ## log 5XX errors
122 122 #log-5xx = true
123 123
124 124 ## Set the socket listen queue size.
125 125 #listen = 256
126 126
127 127 ## Gracefully Reload workers after the specified amount of managed requests
128 128 ## (avoid memory leaks).
129 129 #max-requests = 1000
130 130
131 131 ## enable large buffers
132 132 #buffer-size = 65535
133 133
134 134 ## socket and http timeouts ##
135 135 #http-timeout = 3600
136 136 #socket-timeout = 3600
137 137
138 138 ## Log requests slower than the specified number of milliseconds.
139 139 #log-slow = 10
140 140
141 141 ## Exit if no app can be loaded.
142 142 #need-app = true
143 143
144 144 ## Set lazy mode (load apps in workers instead of master).
145 145 #lazy = true
146 146
147 147 ## scaling ##
148 148 ## set cheaper algorithm to use, if not set default will be used
149 149 #cheaper-algo = spare
150 150
151 151 ## minimum number of workers to keep at all times
152 152 #cheaper = 1
153 153
154 154 ## number of workers to spawn at startup
155 155 #cheaper-initial = 1
156 156
157 157 ## maximum number of workers that can be spawned
158 158 #workers = 4
159 159
160 160 ## how many workers should be spawned at a time
161 161 #cheaper-step = 1
162 162
163 163 ## COMMON ##
164 164 host = 127.0.0.1
165 165 #port = 5000
166 166 port = 4999
167 167
168 168 ## middleware for hosting the WSGI application under a URL prefix
169 169 #[filter:proxy-prefix]
170 170 #use = egg:PasteDeploy#prefix
171 171 #prefix = /<your-prefix>
172 172
173 173 [app:main]
174 174 use = egg:kallithea
175 175 ## enable proxy prefix middleware
176 176 #filter-with = proxy-prefix
177 177
178 178 full_stack = true
179 179 static_files = true
180 ## Available Languages:
181 ## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW
182 lang =
180
181 ## Internationalization (see setup documentation for details)
182 ## By default, the language requested by the browser is used if available.
183 #i18n.enable = false
184 ## Fallback language, empty for English (valid values are the names of subdirectories in kallithea/i18n):
185 i18n.lang =
186
183 187 #cache_dir = %(here)s/data
184 188 cache_dir = %(here)s/../../data/test/cache
185 189 #index_dir = %(here)s/data/index
186 190 index_dir = %(here)s/../../data/test/index
187 191
188 192 ## perform a full repository scan on each server start, this should be
189 193 ## set to false after first startup, to allow faster server restarts.
190 194 initial_repo_scan = false
191 195
192 196 ## uncomment and set this path to use archive download cache
193 197 #archive_cache_dir = %(here)s/tarballcache
194 198 archive_cache_dir = %(here)s/../../data/test/tarballcache
195 199
196 200 ## change this to unique ID for security
197 201 app_instance_uuid = test
198 202
199 203 ## cut off limit for large diffs (size in bytes)
200 204 cut_off_limit = 256000
201 205
202 206 ## force https in Kallithea, fixes https redirects, assumes it's always https
203 207 force_https = false
204 208
205 209 ## use Strict-Transport-Security headers
206 210 use_htsts = false
207 211
208 212 ## number of commits stats will parse on each iteration
209 213 commit_parse_limit = 25
210 214
211 215 ## path to git executable
212 216 git_path = git
213 217
214 218 ## git rev filter option, --all is the default filter, if you need to
215 219 ## hide all refs in changelog switch this to --branches --tags
216 220 #git_rev_filter = --branches --tags
217 221
218 222 ## RSS feed options
219 223 rss_cut_off_limit = 256000
220 224 rss_items_per_page = 10
221 225 rss_include_diff = false
222 226
223 227 ## options for showing and identifying changesets
224 228 show_sha_length = 12
225 229 #show_revision_number = false
226 230 show_revision_number = true
227 231
228 232 ## Canonical URL to use when creating full URLs in UI and texts.
229 233 ## Useful when the site is available under different names or protocols.
230 234 ## Defaults to what is provided in the WSGI environment.
231 235 #canonical_url = https://kallithea.example.com/repos
232 236
233 237 ## gist URL alias, used to create nicer urls for gist. This should be an
234 238 ## url that does rewrites to _admin/gists/<gistid>.
235 239 ## example: http://gist.example.com/{gistid}. Empty means use the internal
236 240 ## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid>
237 241 gist_alias_url =
238 242
239 243 ## white list of API enabled controllers. This allows to add list of
240 244 ## controllers to which access will be enabled by api_key. eg: to enable
241 245 ## api access to raw_files put `FilesController:raw`, to enable access to patches
242 246 ## add `ChangesetController:changeset_patch`. This list should be "," separated
243 247 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
244 248 ## Recommended settings below are commented out:
245 249 api_access_controllers_whitelist =
246 250 # ChangesetController:changeset_patch,
247 251 # ChangesetController:changeset_raw,
248 252 # FilesController:raw,
249 253 # FilesController:archivefile
250 254
251 255 ## default encoding used to convert from and to unicode
252 256 ## can be also a comma separated list of encoding in case of mixed encodings
253 257 default_encoding = utf8
254 258
255 259 ## issue tracker for Kallithea (leave blank to disable, absent for default)
256 260 #bugtracker = https://bitbucket.org/conservancy/kallithea/issues
257 261
258 262 ## issue tracking mapping for commits messages
259 263 ## comment out issue_pat, issue_server, issue_prefix to enable
260 264
261 265 ## pattern to get the issues from commit messages
262 266 ## default one used here is #<numbers> with a regex passive group for `#`
263 267 ## {id} will be all groups matched from this pattern
264 268
265 269 issue_pat = (?:\s*#)(\d+)
266 270
267 271 ## server url to the issue, each {id} will be replaced with match
268 272 ## fetched from the regex and {repo} is replaced with full repository name
269 273 ## including groups {repo_name} is replaced with just name of repo
270 274
271 275 issue_server_link = https://issues.example.com/{repo}/issue/{id}
272 276
273 277 ## prefix to add to link to indicate it's an url
274 278 ## #314 will be replaced by <issue_prefix><id>
275 279
276 280 issue_prefix = #
277 281
278 282 ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
279 283 ## multiple patterns, to other issues server, wiki or others
280 284 ## below an example how to create a wiki pattern
281 285 # wiki-some-id -> https://wiki.example.com/some-id
282 286
283 287 #issue_pat_wiki = (?:wiki-)(.+)
284 288 #issue_server_link_wiki = https://wiki.example.com/{id}
285 289 #issue_prefix_wiki = WIKI-
286 290
287 291 ## alternative return HTTP header for failed authentication. Default HTTP
288 292 ## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with
289 293 ## handling that. Set this variable to 403 to return HTTPForbidden
290 294 auth_ret_code =
291 295
292 296 ## locking return code. When repository is locked return this HTTP code. 2XX
293 297 ## codes don't break the transactions while 4XX codes do
294 298 lock_ret_code = 423
295 299
296 300 ## allows to change the repository location in settings page
297 301 allow_repo_location_change = True
298 302
299 303 ## allows to setup custom hooks in settings page
300 304 allow_custom_hooks_settings = True
301 305
302 306 ## extra extensions for indexing, space separated and without the leading '.'.
303 307 # index.extensions =
304 308 # gemfile
305 309 # lock
306 310
307 311 ## extra filenames for indexing, space separated
308 312 # index.filenames =
309 313 # .dockerignore
310 314 # .editorconfig
311 315 # INSTALL
312 316 # CHANGELOG
313 317
314 318 ####################################
315 319 ### CELERY CONFIG ####
316 320 ####################################
317 321
318 322 use_celery = false
319 323
320 324 ## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq:
321 325 broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost
322 326
323 327 celery.imports = kallithea.lib.celerylib.tasks
324 328 celery.accept.content = pickle
325 329 celery.result.backend = amqp
326 330 celery.result.dburi = amqp://
327 331 celery.result.serialier = json
328 332
329 333 #celery.send.task.error.emails = true
330 334 #celery.amqp.task.result.expires = 18000
331 335
332 336 celeryd.concurrency = 2
333 337 celeryd.max.tasks.per.child = 1
334 338
335 339 ## If true, tasks will never be sent to the queue, but executed locally instead.
336 340 celery.always.eager = false
337 341
338 342 ####################################
339 343 ### BEAKER CACHE ####
340 344 ####################################
341 345
342 346 #beaker.cache.data_dir = %(here)s/data/cache/data
343 347 beaker.cache.data_dir = %(here)s/../../data/test/cache/data
344 348 #beaker.cache.lock_dir = %(here)s/data/cache/lock
345 349 beaker.cache.lock_dir = %(here)s/../../data/test/cache/lock
346 350
347 351 beaker.cache.regions = short_term,long_term,sql_cache_short
348 352
349 353 beaker.cache.short_term.type = memory
350 354 beaker.cache.short_term.expire = 60
351 355 beaker.cache.short_term.key_length = 256
352 356
353 357 beaker.cache.long_term.type = memory
354 358 beaker.cache.long_term.expire = 36000
355 359 beaker.cache.long_term.key_length = 256
356 360
357 361 beaker.cache.sql_cache_short.type = memory
358 362 #beaker.cache.sql_cache_short.expire = 10
359 363 beaker.cache.sql_cache_short.expire = 1
360 364 beaker.cache.sql_cache_short.key_length = 256
361 365
362 366 ####################################
363 367 ### BEAKER SESSION ####
364 368 ####################################
365 369
366 370 ## Name of session cookie. Should be unique for a given host and path, even when running
367 371 ## on different ports. Otherwise, cookie sessions will be shared and messed up.
368 372 beaker.session.key = kallithea
369 373 ## Sessions should always only be accessible by the browser, not directly by JavaScript.
370 374 beaker.session.httponly = true
371 375 ## Session lifetime. 2592000 seconds is 30 days.
372 376 beaker.session.timeout = 2592000
373 377
374 378 ## Server secret used with HMAC to ensure integrity of cookies.
375 379 beaker.session.secret = {74e0cd75-b339-478b-b129-07dd221def1f}
376 380 ## Further, encrypt the data with AES.
377 381 #beaker.session.encrypt_key = <key_for_encryption>
378 382 #beaker.session.validate_key = <validation_key>
379 383
380 384 ## Type of storage used for the session, current types are
381 385 ## dbm, file, memcached, database, and memory.
382 386
383 387 ## File system storage of session data. (default)
384 388 #beaker.session.type = file
385 389
386 390 ## Cookie only, store all session data inside the cookie. Requires secure secrets.
387 391 #beaker.session.type = cookie
388 392
389 393 ## Database storage of session data.
390 394 #beaker.session.type = ext:database
391 395 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea
392 396 #beaker.session.table_name = db_session
393 397
394 398 ############################
395 399 ## ERROR HANDLING SYSTEMS ##
396 400 ############################
397 401
398 402 # Propagate email settings to ErrorReporter of TurboGears2
399 403 # You do not normally need to change these lines
400 404 get trace_errors.error_email = email_to
401 405 get trace_errors.smtp_server = smtp_server
402 406 get trace_errors.smtp_port = smtp_port
403 407 get trace_errors.from_address = error_email_from
404 408
405 409 ####################
406 410 ### [appenlight] ###
407 411 ####################
408 412
409 413 ## AppEnlight is tailored to work with Kallithea, see
410 414 ## http://appenlight.com for details how to obtain an account
411 415 ## you must install python package `appenlight_client` to make it work
412 416
413 417 ## appenlight enabled
414 418 appenlight = false
415 419
416 420 appenlight.server_url = https://api.appenlight.com
417 421 appenlight.api_key = YOUR_API_KEY
418 422
419 423 ## TWEAK AMOUNT OF INFO SENT HERE
420 424
421 425 ## enables 404 error logging (default False)
422 426 appenlight.report_404 = false
423 427
424 428 ## time in seconds after request is considered being slow (default 1)
425 429 appenlight.slow_request_time = 1
426 430
427 431 ## record slow requests in application
428 432 ## (needs to be enabled for slow datastore recording and time tracking)
429 433 appenlight.slow_requests = true
430 434
431 435 ## enable hooking to application loggers
432 436 #appenlight.logging = true
433 437
434 438 ## minimum log level for log capture
435 439 #appenlight.logging.level = WARNING
436 440
437 441 ## send logs only from erroneous/slow requests
438 442 ## (saves API quota for intensive logging)
439 443 appenlight.logging_on_error = false
440 444
441 445 ## list of additional keywords that should be grabbed from environ object
442 446 ## can be string with comma separated list of words in lowercase
443 447 ## (by default client will always send following info:
444 448 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
445 449 ## start with HTTP* this list be extended with additional keywords here
446 450 appenlight.environ_keys_whitelist =
447 451
448 452 ## list of keywords that should be blanked from request object
449 453 ## can be string with comma separated list of words in lowercase
450 454 ## (by default client will always blank keys that contain following words
451 455 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
452 456 ## this list be extended with additional keywords set here
453 457 appenlight.request_keys_blacklist =
454 458
455 459 ## list of namespaces that should be ignores when gathering log entries
456 460 ## can be string with comma separated list of namespaces
457 461 ## (by default the client ignores own entries: appenlight_client.client)
458 462 appenlight.log_namespace_blacklist =
459 463
460 464 ################
461 465 ### [sentry] ###
462 466 ################
463 467
464 468 ## sentry is a alternative open source error aggregator
465 469 ## you must install python packages `sentry` and `raven` to enable
466 470
467 471 sentry.dsn = YOUR_DNS
468 472 sentry.servers =
469 473 sentry.name =
470 474 sentry.key =
471 475 sentry.public_key =
472 476 sentry.secret_key =
473 477 sentry.project =
474 478 sentry.site =
475 479 sentry.include_paths =
476 480 sentry.exclude_paths =
477 481
478 482 ################################################################################
479 483 ## WARNING: *DEBUG MODE MUST BE OFF IN A PRODUCTION ENVIRONMENT* ##
480 484 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
481 485 ## execute malicious code after an exception is raised. ##
482 486 ################################################################################
483 487 debug = false
484 488
485 489 ##################################
486 490 ### LOGVIEW CONFIG ###
487 491 ##################################
488 492
489 493 logview.sqlalchemy = #faa
490 494 logview.pylons.templating = #bfb
491 495 logview.pylons.util = #eee
492 496
493 497 #########################################################
494 498 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
495 499 #########################################################
496 500
497 501 # SQLITE [default]
498 502 #sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60
499 503 sqlalchemy.url = sqlite:///%(here)s/kallithea_test.sqlite
500 504
501 505 # POSTGRESQL
502 506 #sqlalchemy.url = postgresql://user:pass@localhost/kallithea
503 507
504 508 # MySQL
505 509 #sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
506 510
507 511 # see sqlalchemy docs for others
508 512
509 513 sqlalchemy.pool_recycle = 3600
510 514
511 515 ################################
512 516 ### ALEMBIC CONFIGURATION ####
513 517 ################################
514 518
515 519 [alembic]
516 520 script_location = kallithea:alembic
517 521
518 522 ################################
519 523 ### LOGGING CONFIGURATION ####
520 524 ################################
521 525
522 526 [loggers]
523 527 keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer
524 528
525 529 [handlers]
526 530 keys = console, console_sql
527 531
528 532 [formatters]
529 533 keys = generic, color_formatter, color_formatter_sql
530 534
531 535 #############
532 536 ## LOGGERS ##
533 537 #############
534 538
535 539 [logger_root]
536 540 level = NOTSET
537 541 handlers = console
538 542
539 543 [logger_routes]
540 544 level = DEBUG
541 545 handlers =
542 546 qualname = routes.middleware
543 547 ## "level = DEBUG" logs the route matched and routing variables.
544 548 propagate = 1
545 549
546 550 [logger_beaker]
547 551 level = DEBUG
548 552 handlers =
549 553 qualname = beaker.container
550 554 propagate = 1
551 555
552 556 [logger_templates]
553 557 level = INFO
554 558 handlers =
555 559 qualname = pylons.templating
556 560 propagate = 1
557 561
558 562 [logger_kallithea]
559 563 level = DEBUG
560 564 handlers =
561 565 qualname = kallithea
562 566 propagate = 1
563 567
564 568 [logger_tg]
565 569 level = DEBUG
566 570 handlers =
567 571 qualname = tg
568 572 propagate = 1
569 573
570 574 [logger_gearbox]
571 575 level = DEBUG
572 576 handlers =
573 577 qualname = gearbox
574 578 propagate = 1
575 579
576 580 [logger_sqlalchemy]
577 581 level = WARN
578 582 handlers = console_sql
579 583 qualname = sqlalchemy.engine
580 584 propagate = 0
581 585
582 586 [logger_whoosh_indexer]
583 587 level = DEBUG
584 588 handlers =
585 589 qualname = whoosh_indexer
586 590 propagate = 1
587 591
588 592 ##############
589 593 ## HANDLERS ##
590 594 ##############
591 595
592 596 [handler_console]
593 597 class = StreamHandler
594 598 args = (sys.stderr,)
595 599 #formatter = generic
596 600 formatter = color_formatter
597 601
598 602 [handler_console_sql]
599 603 class = StreamHandler
600 604 args = (sys.stderr,)
601 605 #formatter = generic
602 606 formatter = color_formatter_sql
603 607
604 608 ################
605 609 ## FORMATTERS ##
606 610 ################
607 611
608 612 [formatter_generic]
609 613 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
610 614 datefmt = %Y-%m-%d %H:%M:%S
611 615
612 616 [formatter_color_formatter]
613 617 class = kallithea.lib.colored_formatter.ColorFormatter
614 618 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
615 619 datefmt = %Y-%m-%d %H:%M:%S
616 620
617 621 [formatter_color_formatter_sql]
618 622 class = kallithea.lib.colored_formatter.ColorFormatterSql
619 623 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
620 624 datefmt = %Y-%m-%d %H:%M:%S
General Comments 0
You need to be logged in to leave comments. Login now