Browse files

Merge pull request #89 from mozilla/compute-test-results

Compute test results
  • Loading branch information...
2 parents aa22943 + 9ea056d commit 5c423f1577d790994b3d903021fc246b98c6ac70 @jeads jeads committed Mar 22, 2013
Showing with 11,353 additions and 7,865 deletions.
  1. +41 −0 datazilla/model/metrics.py
  2. +8 −8 datazilla/webapp/static/js/b2g_apps/AppsPage.js
  3. +10 −6 datazilla/webapp/static/js/b2g_apps/GraphControlsComponent.js
  4. +4 −3 datazilla/webapp/static/js/b2g_apps/PerformanceGraphComponent.js
  5. +1 −1 datazilla/webapp/static/js/b2g_apps/apps-summary-min.js
  6. +1 −1 requirements/pure.txt
  7. +1 −0 tests/model/sample_data/tp5o.json
  8. +3 −2 tests/model/test_metrics.py
  9. +13 −0 tests/model/test_metrics_test_model.py
  10. +2 −3 vendor/{Django-1.3.1-py2.6.egg-info → Django-1.4.4-py2.6.egg-info}/PKG-INFO
  11. +664 −219 vendor/{Django-1.3.1-py2.6.egg-info → Django-1.4.4-py2.6.egg-info}/SOURCES.txt
  12. 0 vendor/{Django-1.3.1-py2.6.egg-info → Django-1.4.4-py2.6.egg-info}/dependency_links.txt
  13. +4,125 −3,815 vendor/{Django-1.3.1-py2.6.egg-info → Django-1.4.4-py2.6.egg-info}/installed-files.txt
  14. 0 vendor/{Django-1.3.1-py2.6.egg-info → Django-1.4.4-py2.6.egg-info}/top_level.txt
  15. +7 −7 vendor/datasource-0.5-py2.6.egg-info/installed-files.txt
  16. +7 −7 vendor/datazilla_metrics-0.1-py2.6.egg-info/installed-files.txt
  17. +29 −15 vendor/django/__init__.py
  18. +2 −1 vendor/django/bin/profiling/gather_profile_stats.py
  19. +52 −23 vendor/django/conf/__init__.py
  20. +100 −68 vendor/django/conf/global_settings.py
  21. +30 −0 vendor/django/conf/locale/__init__.py
  22. BIN vendor/django/conf/locale/ar/LC_MESSAGES/django.mo
  23. +330 −243 vendor/django/conf/locale/ar/LC_MESSAGES/django.po
  24. BIN vendor/django/conf/locale/az/LC_MESSAGES/django.mo
  25. +472 −361 vendor/django/conf/locale/az/LC_MESSAGES/django.po
  26. BIN vendor/django/conf/locale/bg/LC_MESSAGES/django.mo
  27. +446 −344 vendor/django/conf/locale/bg/LC_MESSAGES/django.po
  28. BIN vendor/django/conf/locale/bn/LC_MESSAGES/django.mo
  29. +340 −254 vendor/django/conf/locale/bn/LC_MESSAGES/django.po
  30. BIN vendor/django/conf/locale/bs/LC_MESSAGES/django.mo
  31. +348 −266 vendor/django/conf/locale/bs/LC_MESSAGES/django.po
  32. BIN vendor/django/conf/locale/ca/LC_MESSAGES/django.mo
  33. +341 −241 vendor/django/conf/locale/ca/LC_MESSAGES/django.po
  34. +4 −4 vendor/django/conf/locale/ca/formats.py
  35. BIN vendor/django/conf/locale/cs/LC_MESSAGES/django.mo
  36. +342 −245 vendor/django/conf/locale/cs/LC_MESSAGES/django.po
  37. +1 −1 vendor/django/conf/locale/cs/formats.py
  38. BIN vendor/django/conf/locale/cy/LC_MESSAGES/django.mo
  39. +327 −242 vendor/django/conf/locale/cy/LC_MESSAGES/django.po
  40. BIN vendor/django/conf/locale/da/LC_MESSAGES/django.mo
  41. +348 −246 vendor/django/conf/locale/da/LC_MESSAGES/django.po
  42. BIN vendor/django/conf/locale/de/LC_MESSAGES/django.mo
  43. +346 −246 vendor/django/conf/locale/de/LC_MESSAGES/django.po
  44. BIN vendor/django/conf/locale/el/LC_MESSAGES/django.mo
  45. +334 −247 vendor/django/conf/locale/el/LC_MESSAGES/django.po
  46. BIN vendor/django/conf/locale/en/LC_MESSAGES/django.mo
  47. +303 −223 vendor/django/conf/locale/en/LC_MESSAGES/django.po
  48. BIN vendor/django/conf/locale/en_GB/LC_MESSAGES/django.mo
  49. +356 −259 vendor/django/conf/locale/en_GB/LC_MESSAGES/django.po
  50. +3 −3 vendor/django/conf/locale/en_GB/formats.py
  51. BIN vendor/django/conf/locale/eo/LC_MESSAGES/django.mo
  52. +1,250 −0 vendor/django/conf/locale/eo/LC_MESSAGES/django.po
  53. BIN vendor/django/conf/locale/es/LC_MESSAGES/django.mo
  54. +358 −257 vendor/django/conf/locale/es/LC_MESSAGES/django.po
  55. +4 −4 vendor/django/conf/locale/es/formats.py
  56. BIN vendor/django/conf/locale/es_AR/LC_MESSAGES/django.mo
Sorry, we could not display the entire diff because too many files (3,093) changed.
View
41 datazilla/model/metrics.py
@@ -1121,6 +1121,46 @@ def get_application_log(self, revision):
return log
+ def compute_inline_metrics(self, data):
+
+ product = data['test_build']['name']
+ branch = data['test_build']['branch']
+ branch_version = data['test_build']['version']
+ operating_system_name = data['test_build']['name']
+ operating_system_version = data['test_machine']['osversion']
+ processor = data['test_machine']['platform']
+ test_name = data['testrun']['suite']
+
+ pages = data['results'].keys()
+
+ product_iter = self.sources["perftest"].dhub.execute(
+ proc='perftest.selects.get_product_id',
+ debug_show=self.DEBUG,
+ placeholders=[product, branch, branch_version],
+ return_type='iter',
+ )
+ product_id = product_iter.get_column_data('id')
+
+ os_iter = self.sources["perftest"].dhub.execute(
+ proc='perftest.selects.get_os_id',
+ debug_show=self.DEBUG,
+ placeholders=[operating_system_name, operating_system_version],
+ return_type='iter',
+ )
+ os_id = os_iter.get_column_data('id')
+
+ test_iter = self.sources["perftest"].dhub.execute(
+ proc='perftest.selects.get_test_id',
+ debug_show=self.DEBUG,
+ placeholders=[test_name, 1],
+ return_type='iter',
+ )
+ test_id = os_iter.get_column_data('id')
+
+ ##Get the relevant ids##
+
+ ##TODO: Finish this function or remove it
+
def _get_metric_collection(self):
proc = 'perftest.selects.get_metric_collection'
@@ -1689,6 +1729,7 @@ def get_metric_value(self, metric_value_name, ref_data, result):
else:
return value
+
def _get_summary_data_lookup(self, data):
lookup = {}
View
16 datazilla/webapp/static/js/b2g_apps/AppsPage.js
@@ -89,25 +89,25 @@ var AppsPage = new Class( {
lookup['test'] = test;
}
- var app = $(view.appNameSpanSel).text();
- if(app != ""){
- params.push('app=' + app);
- lookup['app'] = app;
- }
-
var appListEls = $(view.appSeriesSel).find("input:checkbox:checked");
var appList = [];
_.map(appListEls, function(el){
appList.push( $(el).next().text() );
});
-
if(appList.length > 0){
params.push('app_list=' + appList.join(','));
}
//Always store the app_list lookup so we can represent
//0 selected apps in the app_list
lookup['app_list'] = appList;
+ var app = $(view.appNameSpanSel).text();
+ if( (app != "") && (appList.length > 0)){
+ params.push('app=' + app);
+ lookup['app'] = app;
+ }
+
+
var gaiaRev = $(view.gaiaRevisionSel).text();
if(gaiaRev != ""){
params.push('gaia_rev=' + gaiaRev);
@@ -147,7 +147,7 @@ var AppsPage = new Class( {
this.defaults = {};
this.defaults['branch'] = urlObj.param.query.branch;
this.defaults['range'] = urlObj.param.query.range;
- this.defaults['test'] = urlObj.param.query.test;
+ this.defaults['test'] = urlObj.param.query.test || 'cold_load_time';
this.defaults['app'] = urlObj.param.query.app;
if( urlObj.param.query.app_list != undefined ){
View
16 datazilla/webapp/static/js/b2g_apps/GraphControlsComponent.js
@@ -344,6 +344,16 @@ var GraphControlsView = new Class({
//added to history
APPS_PAGE.disableSaveState = true;
+ //Use the change event to synchronize saving state to after
+ //the last checkbox is selected
+ $(inputEls[ inputEls.length-1 ]).unbind('change');
+ $(inputEls[ inputEls.length-1 ]).bind('change', function(event){
+ //Reenable saveState
+ APPS_PAGE.disableSaveState = false;
+ //Save the new application selection state
+ APPS_PAGE.saveState(true);
+ });
+
for(var i=0; i<inputEls.length; i++){
var el = inputEls[i];
@@ -352,7 +362,6 @@ var GraphControlsView = new Class({
if( !$(el).is(':checked') ){
$(el).click();
- appName = $(el).next().text();
}
}else {
@@ -364,11 +373,6 @@ var GraphControlsView = new Class({
}
}
- //Reenable saveState
- APPS_PAGE.disableSaveState = false;
-
- //Save the new application selection state
- APPS_PAGE.saveState();
},
selectApplications: function(testIds){
View
7 datazilla/webapp/static/js/b2g_apps/PerformanceGraphComponent.js
@@ -116,7 +116,8 @@ var PerformanceGraphComponent = new Class({
}
- if(!_.isEmpty(this.data) && (this.testToggled === true)){
+ //if(!_.isEmpty(this.data) && (this.testToggled === true)){
+ if(!_.isEmpty(this.data)){
this.renderPlot(this.data);
}
@@ -207,7 +208,6 @@ var PerformanceGraphComponent = new Class({
);
}
-
var chart = [];
var testIds = _.keys(this.chartData);
@@ -234,7 +234,7 @@ var PerformanceGraphComponent = new Class({
}
//Only display app names that are found in the dataset
- APPS_PAGE.graphControlsComponent.displayApps(appNames);
+ APPS_PAGE.graphControlsComponent.displayApps(appNames, this.testToggled);
this.view.showData(_.isEmpty(this.data));
@@ -275,6 +275,7 @@ var PerformanceGraphComponent = new Class({
}else {
APPS_PAGE.saveState();
}
+
},
stateChange: function(event, data){
View
2 datazilla/webapp/static/js/b2g_apps/apps-summary-min.js
1 addition, 1 deletion not shown because the diff is too large. Please use a local Git client to view these changes.
View
2 requirements/pure.txt
@@ -1,6 +1,6 @@
# Pure-python dependencies; pre-installed in vendor/
-Django==1.3.1
+Django==1.4.4
python-memcached==1.48
oauth2==1.5.211
httplib2==0.7.4
View
1 tests/model/sample_data/tp5o.json
1 addition, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
5 tests/model/test_metrics.py
@@ -1,3 +1,6 @@
+import json
+import os
+
from datazilla.model.base import TestData
from ..sample_data import perftest_data
@@ -51,5 +54,3 @@ def test_ttest_nan():
else:
raise Exception('Failed to raise MetricMethodError')
-
-
View
13 tests/model/test_metrics_test_model.py
@@ -1,4 +1,5 @@
import json
+import os
import datetime
import copy
import urllib
@@ -788,6 +789,18 @@ def mock_urlopen(nuttin_honey):
return setup_data
+def test_compute_inline_metrics(mtm):
+
+ sample_data_path = os.path.dirname(__file__) + '/sample_data/tp5o.json'
+ sample_json = ""
+
+ with open(sample_data_path) as f:
+ sample_json = json.loads( f.read() )
+
+ for data in sample_json:
+
+ mtm.compute_inline_metrics(data)
+
def _adapt_data(mtm, data):
adapted_reference = {}
View
5 vendor/Django-1.3.1-py2.6.egg-info/PKG-INFO → vendor/Django-1.4.4-py2.6.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.0
Name: Django
-Version: 1.3.1
+Version: 1.4.4
Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Home-page: http://www.djangoproject.com/
Author: Django Software Foundation
Author-email: foundation@djangoproject.com
License: UNKNOWN
-Download-URL: http://media.djangoproject.com/releases/1.3/Django-1.3.1.tar.gz
+Download-URL: https://www.djangoproject.com/m/releases/1.4/Django-1.4.4.tar.gz
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -16,7 +16,6 @@ Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.4
Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
View
883 ...r/Django-1.3.1-py2.6.egg-info/SOURCES.txt → ...r/Django-1.4.4-py2.6.egg-info/SOURCES.txt
664 additions, 219 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
0 ...1.3.1-py2.6.egg-info/dependency_links.txt → ...1.4.4-py2.6.egg-info/dependency_links.txt
File renamed without changes.
View
7,940 ...-1.3.1-py2.6.egg-info/installed-files.txt → ...-1.4.4-py2.6.egg-info/installed-files.txt
4,125 additions, 3,815 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
0 ...Django-1.3.1-py2.6.egg-info/top_level.txt → ...Django-1.4.4-py2.6.egg-info/top_level.txt
File renamed without changes.
View
14 vendor/datasource-0.5-py2.6.egg-info/installed-files.txt
@@ -1,33 +1,33 @@
../datasource/__init__.py
../datasource/DataHub.py
../datasource/bases/__init__.py
+../datasource/bases/SQLHub.py
../datasource/bases/BaseHub.py
../datasource/bases/RDBSHub.py
-../datasource/bases/SQLHub.py
../datasource/hubs/__init__.py
../datasource/hubs/MySQL.py
+../datasource/t/TestMySQLHub.py
../datasource/t/__init__.py
../datasource/t/TestDataHub.py
-../datasource/t/TestMySQLHub.py
-../datasource/procs/mysql_procs/sql.json
../datasource/procs/mysql_procs/test.json
+../datasource/procs/mysql_procs/sql.json
../datasource/t/character_encoding_data.txt
../datasource/t/test_data.txt
../datasource/data_sources.json
../datasource/__init__.pyc
../datasource/DataHub.pyc
../datasource/bases/__init__.pyc
+../datasource/bases/SQLHub.pyc
../datasource/bases/BaseHub.pyc
../datasource/bases/RDBSHub.pyc
-../datasource/bases/SQLHub.pyc
../datasource/hubs/__init__.pyc
../datasource/hubs/MySQL.pyc
+../datasource/t/TestMySQLHub.pyc
../datasource/t/__init__.pyc
../datasource/t/TestDataHub.pyc
-../datasource/t/TestMySQLHub.pyc
./
+SOURCES.txt
dependency_links.txt
-PKG-INFO
requires.txt
-SOURCES.txt
top_level.txt
+PKG-INFO
View
14 vendor/datazilla_metrics-0.1-py2.6.egg-info/installed-files.txt
@@ -1,15 +1,15 @@
-../dzmetrics/__init__.py
+../dzmetrics/ttest.py
../dzmetrics/data_smoothing.py
+../dzmetrics/__init__.py
../dzmetrics/fdr.py
-../dzmetrics/ttest.py
-../dzmetrics/__init__.pyc
+../dzmetrics/ttest.pyc
../dzmetrics/data_smoothing.pyc
+../dzmetrics/__init__.pyc
../dzmetrics/fdr.pyc
-../dzmetrics/ttest.pyc
./
+SOURCES.txt
dependency_links.txt
-not-zip-safe
-PKG-INFO
requires.txt
-SOURCES.txt
+not-zip-safe
top_level.txt
+PKG-INFO
View
44 vendor/django/__init__.py
@@ -1,16 +1,30 @@
-VERSION = (1, 3, 1, 'final', 0)
+VERSION = (1, 4, 4, 'final', 0)
-def get_version():
- version = '%s.%s' % (VERSION[0], VERSION[1])
- if VERSION[2]:
- version = '%s.%s' % (version, VERSION[2])
- if VERSION[3:] == ('alpha', 0):
- version = '%s pre-alpha' % version
- else:
- if VERSION[3] != 'final':
- version = '%s %s %s' % (version, VERSION[3], VERSION[4])
- from django.utils.version import get_svn_revision
- svn_rev = get_svn_revision()
- if svn_rev != u'SVN-unknown':
- version = "%s %s" % (version, svn_rev)
- return version
+def get_version(version=None):
+ """Derives a PEP386-compliant version number from VERSION."""
+ if version is None:
+ version = VERSION
+ assert len(version) == 5
+ assert version[3] in ('alpha', 'beta', 'rc', 'final')
+
+ # Now build the two parts of the version number:
+ # main = X.Y[.Z]
+ # sub = .devN - for pre-alpha releases
+ # | {a|b|c}N - for alpha, beta and rc releases
+
+ parts = 2 if version[2] == 0 else 3
+ main = '.'.join(str(x) for x in version[:parts])
+
+ sub = ''
+ if version[3] == 'alpha' and version[4] == 0:
+ # At the toplevel, this would cause an import loop.
+ from django.utils.version import get_svn_revision
+ svn_revision = get_svn_revision()[4:]
+ if svn_revision != 'unknown':
+ sub = '.dev%s' % svn_revision
+
+ elif version[3] != 'final':
+ mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'}
+ sub = mapping[version[3]] + str(version[4])
+
+ return main + sub
View
3 vendor/django/bin/profiling/gather_profile_stats.py
@@ -8,8 +8,9 @@
"""
from hotshot import stats
+import os
import pstats
-import sys, os
+import sys
def gather_stats(p):
profiles = {}
View
75 vendor/django/conf/__init__.py
@@ -12,7 +12,7 @@
import warnings
from django.conf import global_settings
-from django.utils.functional import LazyObject
+from django.utils.functional import LazyObject, empty
from django.utils import importlib
ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
@@ -47,19 +47,19 @@ def configure(self, default_settings=global_settings, **options):
parameter sets where to retrieve any unspecified values from (its
argument must support attribute access (__getattr__)).
"""
- if self._wrapped != None:
+ if self._wrapped is not empty:
raise RuntimeError('Settings already configured.')
holder = UserSettingsHolder(default_settings)
for name, value in options.items():
setattr(holder, name, value)
self._wrapped = holder
+ @property
def configured(self):
"""
Returns True if the settings have already been configured.
"""
- return bool(self._wrapped)
- configured = property(configured)
+ return self._wrapped is not empty
class BaseSettings(object):
@@ -68,8 +68,14 @@ class BaseSettings(object):
"""
def __setattr__(self, name, value):
if name in ("MEDIA_URL", "STATIC_URL") and value and not value.endswith('/'):
- warnings.warn('If set, %s must end with a slash' % name,
- PendingDeprecationWarning)
+ warnings.warn("If set, %s must end with a slash" % name,
+ DeprecationWarning)
+ elif name == "ADMIN_MEDIA_PREFIX":
+ warnings.warn("The ADMIN_MEDIA_PREFIX setting has been removed; "
+ "use STATIC_URL instead.", DeprecationWarning)
+ elif name == "ALLOWED_INCLUDE_ROOTS" and isinstance(value, basestring):
+ raise ValueError("The ALLOWED_INCLUDE_ROOTS setting must be set "
+ "to a tuple, not a string.")
object.__setattr__(self, name, value)
@@ -95,26 +101,13 @@ def __init__(self, settings_module):
for setting in dir(mod):
if setting == setting.upper():
setting_value = getattr(mod, setting)
- if setting in tuple_settings and type(setting_value) == str:
+ if setting in tuple_settings and \
+ isinstance(setting_value, basestring):
setting_value = (setting_value,) # In case the user forgot the comma.
setattr(self, setting, setting_value)
- # Expand entries in INSTALLED_APPS like "django.contrib.*" to a list
- # of all those apps.
- new_installed_apps = []
- for app in self.INSTALLED_APPS:
- if app.endswith('.*'):
- app_mod = importlib.import_module(app[:-2])
- appdir = os.path.dirname(app_mod.__file__)
- app_subdirs = os.listdir(appdir)
- app_subdirs.sort()
- name_pattern = re.compile(r'[a-zA-Z]\w*')
- for d in app_subdirs:
- if name_pattern.match(d) and os.path.isdir(os.path.join(appdir, d)):
- new_installed_apps.append('%s.%s' % (app[:-2], d))
- else:
- new_installed_apps.append(app)
- self.INSTALLED_APPS = new_installed_apps
+ if not self.SECRET_KEY:
+ warnings.warn("The SECRET_KEY setting must not be empty.", DeprecationWarning)
if hasattr(time, 'tzset') and self.TIME_ZONE:
# When we can, attempt to validate the timezone. If we can't find
@@ -135,6 +128,9 @@ def __init__(self, settings_module):
logging_config_module = importlib.import_module(logging_config_path)
logging_config_func = getattr(logging_config_module, logging_config_func_name)
+ # Backwards-compatibility shim for #16288 fix
+ compat_patch_logging_config(self.LOGGING)
+
# ... then invoke it with the logging settings
logging_config_func(self.LOGGING)
@@ -165,3 +161,36 @@ def __dir__(self):
settings = LazySettings()
+
+
+def compat_patch_logging_config(logging_config):
+ """
+ Backwards-compatibility shim for #16288 fix. Takes initial value of
+ ``LOGGING`` setting and patches it in-place (issuing deprecation warning)
+ if "mail_admins" logging handler is configured but has no filters.
+
+ """
+ # Shim only if LOGGING["handlers"]["mail_admins"] exists,
+ # but has no "filters" key
+ if "filters" not in logging_config.get(
+ "handlers", {}).get(
+ "mail_admins", {"filters": []}):
+
+ warnings.warn(
+ "You have no filters defined on the 'mail_admins' logging "
+ "handler: adding implicit debug-false-only filter. "
+ "See http://docs.djangoproject.com/en/dev/releases/1.4/"
+ "#request-exceptions-are-now-always-logged",
+ PendingDeprecationWarning)
+
+ filter_name = "require_debug_false"
+
+ filters = logging_config.setdefault("filters", {})
+ while filter_name in filters:
+ filter_name = filter_name + "_"
+
+ filters[filter_name] = {
+ "()": "django.utils.log.RequireDebugFalse",
+ }
+
+ logging_config["handlers"]["mail_admins"]["filters"] = [filter_name]
View
168 vendor/django/conf/global_settings.py
@@ -13,7 +13,7 @@
TEMPLATE_DEBUG = False
# Whether the framework should propagate raw exceptions rather than catching
-# them. This is useful under some testing siutations and should never be used
+# them. This is useful under some testing situations and should never be used
# on a live site.
DEBUG_PROPAGATE_EXCEPTIONS = False
@@ -29,11 +29,19 @@
# * Receive x-headers
INTERNAL_IPS = ()
+# Hosts/domain names that are valid for this site.
+# "*" matches anything, ".example.com" matches example.com and all subdomains
+ALLOWED_HOSTS = ['*']
+
# Local time zone for this installation. All choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all
-# systems may support all possibilities).
+# systems may support all possibilities). When USE_TZ is True, this is
+# interpreted as the default user time zone.
TIME_ZONE = 'America/Chicago'
+# If you set this to True, Django will use timezone-aware datetimes.
+USE_TZ = False
+
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
@@ -54,6 +62,7 @@
('el', gettext_noop('Greek')),
('en', gettext_noop('English')),
('en-gb', gettext_noop('British English')),
+ ('eo', gettext_noop('Esperanto')),
('es', gettext_noop('Spanish')),
('es-ar', gettext_noop('Argentinian Spanish')),
('es-mx', gettext_noop('Mexican Spanish')),
@@ -75,6 +84,7 @@
('it', gettext_noop('Italian')),
('ja', gettext_noop('Japanese')),
('ka', gettext_noop('Georgian')),
+ ('kk', gettext_noop('Kazakh')),
('km', gettext_noop('Khmer')),
('kn', gettext_noop('Kannada')),
('ko', gettext_noop('Korean')),
@@ -83,9 +93,9 @@
('mk', gettext_noop('Macedonian')),
('ml', gettext_noop('Malayalam')),
('mn', gettext_noop('Mongolian')),
- ('nl', gettext_noop('Dutch')),
- ('no', gettext_noop('Norwegian')),
('nb', gettext_noop('Norwegian Bokmal')),
+ ('ne', gettext_noop('Nepali')),
+ ('nl', gettext_noop('Dutch')),
('nn', gettext_noop('Norwegian Nynorsk')),
('pa', gettext_noop('Punjabi')),
('pl', gettext_noop('Polish')),
@@ -99,10 +109,12 @@
('sr', gettext_noop('Serbian')),
('sr-latn', gettext_noop('Serbian Latin')),
('sv', gettext_noop('Swedish')),
+ ('sw', gettext_noop('Swahili')),
('ta', gettext_noop('Tamil')),
('te', gettext_noop('Telugu')),
('th', gettext_noop('Thai')),
('tr', gettext_noop('Turkish')),
+ ('tt', gettext_noop('Tatar')),
('uk', gettext_noop('Ukrainian')),
('ur', gettext_noop('Urdu')),
('vi', gettext_noop('Vietnamese')),
@@ -120,11 +132,11 @@
LANGUAGE_COOKIE_NAME = 'django_language'
# If you set this to True, Django will format dates, numbers and calendars
-# according to user current locale
+# according to user current locale.
USE_L10N = False
# Not-necessarily-technical managers of the site. They get broken link
-# notifications and other various e-mails.
+# notifications and other various emails.
MANAGERS = ADMINS
# Default content type and charset to use for all HttpResponse objects, if a
@@ -139,24 +151,17 @@
# E-mail address that error messages come from.
SERVER_EMAIL = 'root@localhost'
-# Whether to send broken-link e-mails.
+# Whether to send broken-link emails.
SEND_BROKEN_LINK_EMAILS = False
# Database connection info.
-# Legacy format
-DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-DATABASE_NAME = '' # Or path to database file if using sqlite3.
-DATABASE_USER = '' # Not used with sqlite3.
-DATABASE_PASSWORD = '' # Not used with sqlite3.
-DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
-DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
-DATABASE_OPTIONS = {} # Set to empty dictionary for default.
-
-# New format
DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.dummy',
+ },
}
-# Classes used to implement db routing behaviour
+# Classes used to implement DB routing behavior.
DATABASE_ROUTERS = []
# The email backend to use. For possible shortcuts see django.core.mail.
@@ -165,10 +170,10 @@
# to a module that defines an EmailBackend class.
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
-# Host for sending e-mail.
+# Host for sending email.
EMAIL_HOST = 'localhost'
-# Port for sending e-mail.
+# Port for sending email.
EMAIL_PORT = 25
# Optional SMTP authentication information for EMAIL_HOST.
@@ -200,14 +205,15 @@
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
+ 'django.core.context_processors.tz',
# 'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages',
)
# Output to use in template system for invalid (e.g. misspelled) variables.
TEMPLATE_STRING_IF_INVALID = ''
-# Default e-mail address to use for various automated correspondence from
+# Default email address to use for various automated correspondence from
# the site managers.
DEFAULT_FROM_EMAIL = 'webmaster@localhost'
@@ -247,9 +253,17 @@
# is an admin.
ADMIN_FOR = ()
-# 404s that may be ignored.
-IGNORABLE_404_STARTS = ('/cgi-bin/', '/_vti_bin', '/_vti_inf')
-IGNORABLE_404_ENDS = ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')
+# List of compiled regular expression objects representing URLs that need not
+# be reported when SEND_BROKEN_LINK_EMAILS is True. Here are a few examples:
+# import re
+# IGNORABLE_404_URLS = (
+# re.compile(r'^/apple-touch-icon.*\.png$'),
+# re.compile(r'^/favicon.ico$),
+# re.compile(r'^/robots.txt$),
+# re.compile(r'^/phpmyadmin/),
+# re.compile(r'\.(cgi|php|pl)$'),
+# )
+IGNORABLE_404_URLS = ()
# A secret key for this particular Django installation. Used in secret-key
# hashing algorithms. Set this in your settings, or Django will complain
@@ -359,12 +373,15 @@
# * Note that these format strings are different from the ones to display dates
DATETIME_INPUT_FORMATS = (
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
+ '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
+ '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
+ '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
'%m/%d/%y', # '10/25/06'
)
@@ -379,7 +396,7 @@
# Boolean that sets whether to add thousand separator when formatting numbers
USE_THOUSAND_SEPARATOR = False
-# Number of digits that will be together, when spliting them by
+# Number of digits that will be together, when splitting them by
# THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands...
NUMBER_GROUPING = 0
@@ -393,14 +410,33 @@
# The User-Agent string to use when checking for URL validity through the
# isExistingURL validator.
from django import get_version
-URL_VALIDATOR_USER_AGENT = "Django/%s (http://www.djangoproject.com)" % get_version()
+URL_VALIDATOR_USER_AGENT = "Django/%s (https://www.djangoproject.com)" % get_version()
# The tablespaces to use for each model when not specified otherwise.
DEFAULT_TABLESPACE = ''
DEFAULT_INDEX_TABLESPACE = ''
+# Default X-Frame-Options header value
+X_FRAME_OPTIONS = 'SAMEORIGIN'
+
USE_X_FORWARDED_HOST = False
+# The Python dotted path to the WSGI application that Django's internal servers
+# (runserver, runfcgi) will use. If `None`, the return value of
+# 'django.core.wsgi.get_wsgi_application' is used, thus preserving the same
+# behavior as previous versions of Django. Otherwise this should point to an
+# actual WSGI application object.
+WSGI_APPLICATION = None
+
+# If your Django app is behind a proxy that sets a header to specify secure
+# connections, AND that proxy ensures that user-submitted headers with the
+# same name are ignored (so that people can't spoof it), set this value to
+# a tuple of (header_name, header_value). For any requests that come in with
+# that header/value, request.is_secure() will return True.
+# WARNING! Only set this if you fully understand what you're doing. Otherwise,
+# you may be opening yourself up to a security risk.
+SECURE_PROXY_SSL_HEADER = None
+
##############
# MIDDLEWARE #
##############
@@ -427,7 +463,7 @@
SESSION_COOKIE_DOMAIN = None # A string like ".lawrence.com", or None for standard domain cookie.
SESSION_COOKIE_SECURE = False # Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_PATH = '/' # The path of the session cookie.
-SESSION_COOKIE_HTTPONLY = False # Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
+SESSION_COOKIE_HTTPONLY = True # Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
SESSION_SAVE_EVERY_REQUEST = False # Whether to save the session data on every request.
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Whether a user's session cookie expires when the Web browser is closed.
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # The module to store session data
@@ -452,30 +488,10 @@
COMMENTS_ALLOW_PROFANITIES = False
-# The profanities that will trigger a validation error in the
-# 'hasNoProfanities' validator. All of these should be in lowercase.
+# The profanities that will trigger a validation error in
+# CommentDetailsForm.clean_comment. All of these should be in lowercase.
PROFANITIES_LIST = ()
-# The group ID that designates which users are banned.
-# Set to None if you're not using it.
-COMMENTS_BANNED_USERS_GROUP = None
-
-# The group ID that designates which users can moderate comments.
-# Set to None if you're not using it.
-COMMENTS_MODERATORS_GROUP = None
-
-# The group ID that designates the users whose comments should be e-mailed to MANAGERS.
-# Set to None if you're not using it.
-COMMENTS_SKETCHY_USERS_GROUP = None
-
-# The system will e-mail MANAGERS the first COMMENTS_FIRST_FEW comments by each
-# user. Set this to 0 if you want to disable it.
-COMMENTS_FIRST_FEW = 0
-
-# A tuple of IP addresses that have been banned from participating in various
-# Django-powered features.
-BANNED_IPS = ()
-
##################
# AUTHENTICATION #
##################
@@ -491,6 +507,25 @@
# The number of days a password reset link is valid for
PASSWORD_RESET_TIMEOUT_DAYS = 3
+# the first hasher in this list is the preferred algorithm. any
+# password using different algorithms will be converted automatically
+# upon login
+PASSWORD_HASHERS = (
+ 'django.contrib.auth.hashers.PBKDF2PasswordHasher',
+ 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
+ 'django.contrib.auth.hashers.BCryptPasswordHasher',
+ 'django.contrib.auth.hashers.SHA1PasswordHasher',
+ 'django.contrib.auth.hashers.MD5PasswordHasher',
+ 'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher',
+ 'django.contrib.auth.hashers.CryptPasswordHasher',
+)
+
+###########
+# SIGNING #
+###########
+
+SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
+
########
# CSRF #
########
@@ -499,16 +534,18 @@
# rejected by the CSRF middleware.
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
-# Name and domain for CSRF cookie.
+# Settings for CSRF cookie.
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_DOMAIN = None
+CSRF_COOKIE_PATH = '/'
+CSRF_COOKIE_SECURE = False
############
# MESSAGES #
############
-# Class to use as messges backend
-MESSAGE_STORAGE = 'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'
+# Class to use as messages backend
+MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
# Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within
# django.contrib.messages to avoid imports in this settings file.
@@ -523,12 +560,19 @@
# The default logging configuration. This sends an email to
# the site admins on every HTTP 500 error. All other log
# records are sent to the bit bucket.
+
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
+ 'filters': {
+ 'require_debug_false': {
+ '()': 'django.utils.log.RequireDebugFalse',
+ }
+ },
'handlers': {
'mail_admins': {
'level': 'ERROR',
+ 'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
@@ -541,24 +585,17 @@
}
}
+# Default exception reporter filter class used in case none has been
+# specifically assigned to the HttpRequest instance.
+DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
+
###########
# TESTING #
###########
# The name of the class to use to run the test suite
TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
-# The name of the database to use for testing purposes.
-# If None, a name of 'test_' + DATABASE_NAME will be assumed
-TEST_DATABASE_NAME = None
-
-# Strings used to set the character set and collation order for the test
-# database. These values are passed literally to the server, so they are
-# backend-dependent. If None, no special settings are sent (system defaults are
-# used).
-TEST_DATABASE_CHARSET = None
-TEST_DATABASE_COLLATION = None
-
############
# FIXTURES #
############
@@ -583,8 +620,3 @@
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
-
-# URL prefix for admin media -- CSS, JavaScript and images.
-# Make sure to use a trailing slash.
-# Examples: "http://foo.com/static/admin/", "/static/admin/".
-ADMIN_MEDIA_PREFIX = '/static/admin/'
View
30 vendor/django/conf/locale/__init__.py
@@ -77,6 +77,12 @@
'name': 'British English',
'name_local': u'British English',
},
+ 'eo': {
+ 'bidi': False,
+ 'code': 'eo',
+ 'name': 'Esperanto',
+ 'name_local': u'Esperanto',
+ },
'es': {
'bidi': False,
'code': 'es',
@@ -203,6 +209,12 @@
'name': 'Georgian',
'name_local': u'\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8',
},
+ 'kk': {
+ 'bidi': False,
+ 'code': 'kk',
+ 'name': 'Kazakh',
+ 'name_local': u'\u049a\u0430\u0437\u0430\u049b',
+ },
'km': {
'bidi': False,
'code': 'km',
@@ -257,6 +269,12 @@
'name': 'Norwegian Bokmal',
'name_local': u'Norsk (bokm\xe5l)',
},
+ 'ne': {
+ 'bidi': False,
+ 'code': 'ne',
+ 'name': 'Nepali',
+ 'name_local': u'\u0928\u0947\u092a\u093e\u0932\u0940',
+ },
'nl': {
'bidi': False,
'code': 'nl',
@@ -347,6 +365,12 @@
'name': 'Swedish',
'name_local': u'Svenska',
},
+ 'sw': {
+ 'bidi': False,
+ 'code': 'sw',
+ 'name': 'Swahili',
+ 'name_local': u'Kiswahili',
+ },
'ta': {
'bidi': False,
'code': 'ta',
@@ -371,6 +395,12 @@
'name': 'Turkish',
'name_local': u'T\xfcrk\xe7e',
},
+ 'tt': {
+ 'bidi': False,
+ 'code': 'tt',
+ 'name': 'Tatar',
+ 'name_local': u'\u0422\u0430\u0442\u0430\u0440\u0447\u0430',
+ },
'uk': {
'bidi': False,
'code': 'uk',
View
BIN vendor/django/conf/locale/ar/LC_MESSAGES/django.mo
Binary file not shown.
View
573 vendor/django/conf/locale/ar/LC_MESSAGES/django.po
@@ -1,610 +1,690 @@
# This file is distributed under the same license as the Django package.
#
+# Translators:
+# Jannis Leidel <jannis@leidel.info>, 2011.
+# Ossama Khayat <okhayat@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-03-15 13:06-0400\n"
-"PO-Revision-Date: 2011-03-05 18:42+0000\n"
-"Last-Translator: okhayat <okhayat@gmail.com>\n"
-"Language-Team: Arabic <None>\n"
+"POT-Creation-Date: 2012-03-23 02:28+0100\n"
+"PO-Revision-Date: 2012-03-08 12:00+0000\n"
+"Last-Translator: Ossama Khayat <okhayat@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/django/language/"
+"ar/)\n"
+"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
-#: conf/global_settings.py:44
+#: conf/global_settings.py:48
msgid "Arabic"
msgstr "العربيّة"
-#: conf/global_settings.py:45
+#: conf/global_settings.py:49
msgid "Azerbaijani"
msgstr "الأذربيجانية"
-#: conf/global_settings.py:46
+#: conf/global_settings.py:50
msgid "Bulgarian"
msgstr "البلغاريّة"
-#: conf/global_settings.py:47
+#: conf/global_settings.py:51
msgid "Bengali"
msgstr "البنغاليّة"
-#: conf/global_settings.py:48
+#: conf/global_settings.py:52
msgid "Bosnian"
msgstr "البوسنيّة"
-#: conf/global_settings.py:49
+#: conf/global_settings.py:53
msgid "Catalan"
msgstr "الكتلانيّة"
-#: conf/global_settings.py:50
+#: conf/global_settings.py:54
msgid "Czech"
msgstr "التشيكيّة"
-#: conf/global_settings.py:51
+#: conf/global_settings.py:55
msgid "Welsh"
msgstr "الويلز"
-#: conf/global_settings.py:52
+#: conf/global_settings.py:56
msgid "Danish"
msgstr "الدنماركيّة"
-#: conf/global_settings.py:53
+#: conf/global_settings.py:57
msgid "German"
msgstr "الألمانيّة"
-#: conf/global_settings.py:54
+#: conf/global_settings.py:58
msgid "Greek"
msgstr "اليونانيّة"
-#: conf/global_settings.py:55
+#: conf/global_settings.py:59
msgid "English"
msgstr "الإنجليزيّة"
-#: conf/global_settings.py:56
+#: conf/global_settings.py:60
msgid "British English"
msgstr "الإنجليزيّة البريطانيّة"
-#: conf/global_settings.py:57
+#: conf/global_settings.py:61
+msgid "Esperanto"
+msgstr ""
+
+#: conf/global_settings.py:62
msgid "Spanish"
msgstr "الإسبانيّة"
-#: conf/global_settings.py:58
+#: conf/global_settings.py:63
msgid "Argentinian Spanish"
msgstr "الأسبانية الأرجنتينية"
-#: conf/global_settings.py:59
+#: conf/global_settings.py:64
msgid "Mexican Spanish"
msgstr "الأسبانية المكسيكية"
-#: conf/global_settings.py:60
+#: conf/global_settings.py:65
+msgid "Nicaraguan Spanish"
+msgstr ""
+
+#: conf/global_settings.py:66
msgid "Estonian"
msgstr "الإستونيّة"
-#: conf/global_settings.py:61
+#: conf/global_settings.py:67
msgid "Basque"
msgstr "الباسك"
-#: conf/global_settings.py:62
+#: conf/global_settings.py:68
msgid "Persian"
msgstr "الفارسيّة"
-#: conf/global_settings.py:63
+#: conf/global_settings.py:69
msgid "Finnish"
msgstr "الفنلنديّة"
-#: conf/global_settings.py:64
+#: conf/global_settings.py:70
msgid "French"
msgstr "الفرنسيّة"
-#: conf/global_settings.py:65
+#: conf/global_settings.py:71
msgid "Frisian"
msgstr "الفريزيّة"
-#: conf/global_settings.py:66
+#: conf/global_settings.py:72
msgid "Irish"
msgstr "الإيرلنديّة"
-#: conf/global_settings.py:67
+#: conf/global_settings.py:73
msgid "Galician"
msgstr "الجليقيّة"
-#: conf/global_settings.py:68
+#: conf/global_settings.py:74
msgid "Hebrew"
msgstr "العبريّة"
-#: conf/global_settings.py:69
+#: conf/global_settings.py:75
msgid "Hindi"
msgstr "الهندية"
-#: conf/global_settings.py:70
+#: conf/global_settings.py:76
msgid "Croatian"
msgstr "الكرواتيّة"
-#: conf/global_settings.py:71
+#: conf/global_settings.py:77
msgid "Hungarian"
msgstr "الهنغاريّة"
-#: conf/global_settings.py:72
+#: conf/global_settings.py:78
msgid "Indonesian"
msgstr "الإندونيسيّة"
-#: conf/global_settings.py:73
+#: conf/global_settings.py:79
msgid "Icelandic"
msgstr "الآيسلنديّة"
-#: conf/global_settings.py:74
+#: conf/global_settings.py:80
msgid "Italian"
msgstr "الإيطاليّة"
-#: conf/global_settings.py:75
+#: conf/global_settings.py:81
msgid "Japanese"
msgstr "اليابانيّة"
-#: conf/global_settings.py:76
+#: conf/global_settings.py:82
msgid "Georgian"
msgstr "الجورجيّة"
-#: conf/global_settings.py:77
+#: conf/global_settings.py:83
+msgid "Kazakh"
+msgstr ""
+
+#: conf/global_settings.py:84
msgid "Khmer"
msgstr "الخمر"
-#: conf/global_settings.py:78
+#: conf/global_settings.py:85
msgid "Kannada"
msgstr "الهنديّة (كنّادا)"
-#: conf/global_settings.py:79
+#: conf/global_settings.py:86
msgid "Korean"
msgstr "الكوريّة"
-#: conf/global_settings.py:80
+#: conf/global_settings.py:87
msgid "Lithuanian"
msgstr "اللتوانيّة"
-#: conf/global_settings.py:81
+#: conf/global_settings.py:88
msgid "Latvian"
msgstr "اللاتفيّة"
-#: conf/global_settings.py:82
+#: conf/global_settings.py:89
msgid "Macedonian"
msgstr "المقدونيّة"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:90
msgid "Malayalam"
msgstr "المايالام"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:91
msgid "Mongolian"
msgstr "المنغوليّة"
-#: conf/global_settings.py:85
-msgid "Dutch"
-msgstr "الهولنديّة"
-
-#: conf/global_settings.py:86
-msgid "Norwegian"
-msgstr "النرويجيّة"
-
-#: conf/global_settings.py:87
+#: conf/global_settings.py:92
msgid "Norwegian Bokmal"
msgstr "البوكمال نرويجيّة"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:93
+msgid "Nepali"
+msgstr ""
+
+#: conf/global_settings.py:94
+msgid "Dutch"
+msgstr "الهولنديّة"
+
+#: conf/global_settings.py:95
msgid "Norwegian Nynorsk"
msgstr "النينورسك نرويجيّة"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:96
msgid "Punjabi"
msgstr "البنجابيّة"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:97
msgid "Polish"
msgstr "البولنديّة"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:98
msgid "Portuguese"
msgstr "البرتغاليّة"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:99
msgid "Brazilian Portuguese"
msgstr "البرتغاليّة البرازيليّة"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:100
msgid "Romanian"
msgstr "الرومانيّة"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:101
msgid "Russian"
msgstr "الروسيّة"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:102
msgid "Slovak"
msgstr "السلوفاكيّة"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:103
msgid "Slovenian"
msgstr "السلوفانيّة"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:104
msgid "Albanian"
msgstr "الألبانيّة"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:105
msgid "Serbian"
msgstr "الصربيّة"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:106
msgid "Serbian Latin"
msgstr "اللاتينيّة الصربيّة"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:107
msgid "Swedish"
msgstr "السويديّة"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:108
+msgid "Swahili"
+msgstr ""
+
+#: conf/global_settings.py:109
msgid "Tamil"
msgstr "التاميل"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:110
msgid "Telugu"
msgstr "التيلوغو"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:111
msgid "Thai"
msgstr "التايلنديّة"
-#: conf/global_settings.py:104
+#: conf/global_settings.py:112
msgid "Turkish"
msgstr "التركيّة"
-#: conf/global_settings.py:105
+#: conf/global_settings.py:113
+msgid "Tatar"
+msgstr ""
+
+#: conf/global_settings.py:114
msgid "Ukrainian"
msgstr "الأكرانيّة"
-#: conf/global_settings.py:106
+#: conf/global_settings.py:115
msgid "Urdu"
msgstr "الأوردو"
-#: conf/global_settings.py:107
+#: conf/global_settings.py:116
msgid "Vietnamese"
msgstr "الفيتناميّة"
-#: conf/global_settings.py:108
+#: conf/global_settings.py:117
msgid "Simplified Chinese"
msgstr "الصينيّة المبسطة"
-#: conf/global_settings.py:109
+#: conf/global_settings.py:118
msgid "Traditional Chinese"
msgstr "الصينيّة التقليدية"
-#: core/validators.py:21 forms/fields.py:67
+#: core/validators.py:24 forms/fields.py:51
msgid "Enter a valid value."
msgstr "أدخل قيمة صحيحة."
-#: core/validators.py:89 forms/fields.py:575
+#: core/validators.py:99 forms/fields.py:601
msgid "This URL appears to be a broken link."
msgstr "يبدو أن هذا الرابط غير متوفر."
-#: core/validators.py:94 forms/fields.py:574
+#: core/validators.py:131 forms/fields.py:600
msgid "Enter a valid URL."
msgstr "أدخل رابطاً صحيحاً."
-#: core/validators.py:138 forms/fields.py:449
+#: core/validators.py:165 forms/fields.py:474
msgid "Enter a valid e-mail address."
msgstr "أدخل عنوان بريد إلكتروني صحيح."
-#: core/validators.py:141 forms/fields.py:958
+#: core/validators.py:168 forms/fields.py:1023
msgid ""
"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
msgstr "أدخل اختصار 'slug' صحيح يتكوّن من أحرف، أرقام، شرطات سفلية وعاديّة."
-#: core/validators.py:144 forms/fields.py:951
+#: core/validators.py:171 core/validators.py:188 forms/fields.py:997
msgid "Enter a valid IPv4 address."
msgstr "أدخل عنوان IPv4 صحيح."
-#: core/validators.py:147 db/models/fields/__init__.py:575
+#: core/validators.py:175 core/validators.py:189
+msgid "Enter a valid IPv6 address."
+msgstr ""
+
+#: core/validators.py:184 core/validators.py:187
+msgid "Enter a valid IPv4 or IPv6 address."
+msgstr ""
+
+#: core/validators.py:209 db/models/fields/__init__.py:638
msgid "Enter only digits separated by commas."
msgstr "أدخل أرقاما فقط مفصول بينها بفواصل."
-#: core/validators.py:153
+#: core/validators.py:215
#, python-format
msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
msgstr "تحقق من أن هذه القيمة هي %(limit_value)s (إنها %(show_value)s)."
-#: core/validators.py:171 forms/fields.py:222 forms/fields.py:275
+#: core/validators.py:233 forms/fields.py:209 forms/fields.py:262
#, python-format
msgid "Ensure this value is less than or equal to %(limit_value)s."
msgstr "تحقق من أن تكون هذه القيمة أقل من %(limit_value)s أو مساوية لها."
-#: core/validators.py:176 forms/fields.py:223 forms/fields.py:276
+#: core/validators.py:238 forms/fields.py:210 forms/fields.py:263
#, python-format
msgid "Ensure this value is greater than or equal to %(limit_value)s."
msgstr "تحقق من أن تكون هذه القيمة أكثر من %(limit_value)s أو مساوية لها."
-#: core/validators.py:182
+#: core/validators.py:244
#, python-format
msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
+"Ensure this value has at least %(limit_value)d characters (it has "
+"%(show_value)d)."
msgstr ""
-"تحقق من أن هذه القيمة تحتوي %(limit_value)d أحرف على الأقل (عدد أحرفها %"
-"(show_value)d)."
+"تحقق من أن هذه القيمة تحتوي %(limit_value)d أحرف على الأقل (عدد أحرفها "
+"%(show_value)d)."
-#: core/validators.py:188
+#: core/validators.py:250
#, python-format
msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
+"Ensure this value has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
msgstr ""
"تحقق من أن هذه القيمة مكونة من %(limit_value)d أحرف كحد أقصى (عدد أحرفها "
"الآن %(show_value)d)."
-#: db/models/base.py:769
+#: db/models/base.py:764
#, python-format
msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
msgstr "%(field_name)s يجب أن يكون مُميّزاً مع %(date_field)s %(lookup)s."
-#: db/models/base.py:784 db/models/base.py:792
+#: db/models/base.py:787 forms/models.py:577
+msgid "and"
+msgstr "و"
+
+#: db/models/base.py:788 db/models/fields/__init__.py:65
#, python-format
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr "النموذج %(model_name)s والحقل %(field_label)s موجود مسبقاً."
-#: db/models/base.py:791 forms/models.py:562
-msgid "and"
-msgstr "و"
-
-#: db/models/fields/__init__.py:63
+#: db/models/fields/__init__.py:62
#, python-format
msgid "Value %r is not a valid choice."
msgstr "القيمة %r ليست خياراً صالحاً."
-#: db/models/fields/__init__.py:64
+#: db/models/fields/__init__.py:63
msgid "This field cannot be null."
msgstr "لا يمكن تعيين null كقيمة لهذا الحقل."
-#: db/models/fields/__init__.py:65
+#: db/models/fields/__init__.py:64
msgid "This field cannot be blank."
msgstr "لا يمكن ترك هذا الحقل فارغاً."
-#: db/models/fields/__init__.py:70
+#: db/models/fields/__init__.py:71
#, python-format
msgid "Field of type: %(field_type)s"
msgstr "حقل نوع: %(field_type)s"
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:871
-#: db/models/fields/__init__.py:980 db/models/fields/__init__.py:991
-#: db/models/fields/__init__.py:1018
+#: db/models/fields/__init__.py:506 db/models/fields/__init__.py:961
msgid "Integer"
msgstr "عدد صحيح"
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:869
-msgid "This value must be an integer."
-msgstr "هذه القيمة يجب أن تكون رقما صحيحا."
+#: db/models/fields/__init__.py:510 db/models/fields/__init__.py:959
+#, python-format
+msgid "'%s' value must be an integer."
+msgstr ""
-#: db/models/fields/__init__.py:493
-msgid "This value must be either True or False."
-msgstr "هذه القيمة يجب أن تكون إما True أو False."
+#: db/models/fields/__init__.py:552
+#, python-format
+msgid "'%s' value must be either True or False."
+msgstr ""
-#: db/models/fields/__init__.py:495
+#: db/models/fields/__init__.py:554
msgid "Boolean (Either True or False)"
msgstr "ثنائي (إما True أو False)"
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:1001
+#: db/models/fields/__init__.py:605
#, python-format
msgid "String (up to %(max_length)s)"
msgstr "سلسلة نص (%(max_length)s كحد أقصى)"
-#: db/models/fields/__init__.py:570
+#: db/models/fields/__init__.py:633
msgid "Comma-separated integers"
msgstr "أرقام صحيحة مفصولة بفواصل"
-#: db/models/fields/__init__.py:584
+#: db/models/fields/__init__.py:647
+#, python-format
+msgid "'%s' value has an invalid date format. It must be in YYYY-MM-DD format."
+msgstr ""
+
+#: db/models/fields/__init__.py:649 db/models/fields/__init__.py:734
+#, python-format
+msgid ""
+"'%s' value has the correct format (YYYY-MM-DD) but it is an invalid date."
+msgstr ""
+
+#: db/models/fields/__init__.py:652
msgid "Date (without time)"
msgstr "التاريخ (دون الوقت)"
-#: db/models/fields/__init__.py:588
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "أدخل تاريخا صحيحا بالنسق YYYY-MM-DD."
-
-#: db/models/fields/__init__.py:589
+#: db/models/fields/__init__.py:732
#, python-format
-msgid "Invalid date: %s"
-msgstr "تاريخ غير صحيح: %s"
+msgid ""
+"'%s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[."
+"uuuuuu]][TZ] format."
+msgstr ""
-#: db/models/fields/__init__.py:670
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "أدخل تاريخ/وقت صحيح بالنسق YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
+#: db/models/fields/__init__.py:736
+#, python-format
+msgid ""
+"'%s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but "
+"it is an invalid date/time."
+msgstr ""
-#: db/models/fields/__init__.py:672
+#: db/models/fields/__init__.py:740
msgid "Date (with time)"
msgstr "التاريخ (مع الوقت)"
-#: db/models/fields/__init__.py:746
-msgid "This value must be a decimal number."
-msgstr "يجب أن تكون هذه القيمة رقماً عشرياً."
+#: db/models/fields/__init__.py:831
+#, python-format
+msgid "'%s' value must be a decimal number."
+msgstr ""
-#: db/models/fields/__init__.py:748
+#: db/models/fields/__init__.py:833
msgid "Decimal number"
msgstr "رقم عشري"
-#: db/models/fields/__init__.py:803
+#: db/models/fields/__init__.py:890
msgid "E-mail address"
msgstr "عنوان بريد إلكتروني"
-#: db/models/fields/__init__.py:818 db/models/fields/files.py:220
-#: db/models/fields/files.py:326
+#: db/models/fields/__init__.py:906
msgid "File path"
msgstr "مسار الملف"
-#: db/models/fields/__init__.py:841
-msgid "This value must be a float."
-msgstr "هذه القيمة يجب أن تكون عدد فاصلة عائمة."
+#: db/models/fields/__init__.py:930
+#, python-format
+msgid "'%s' value must be a float."
+msgstr ""
-#: db/models/fields/__init__.py:843
+#: db/models/fields/__init__.py:932
msgid "Floating point number"
msgstr "رقم فاصلة عائمة"
-#: db/models/fields/__init__.py:902
+#: db/models/fields/__init__.py:993
msgid "Big (8 byte) integer"
msgstr "عدد صحيح كبير (8 بايت)"
-#: db/models/fields/__init__.py:915
+#: db/models/fields/__init__.py:1007
+msgid "IPv4 address"
+msgstr ""
+
+#: db/models/fields/__init__.py:1023
msgid "IP address"
msgstr "عنوان IP"
-#: db/models/fields/__init__.py:931
-msgid "This value must be either None, True or False."
-msgstr "يجب أن تكون هذه القيمة None، أو True أو False."
+#: db/models/fields/__init__.py:1065
+#, python-format
+msgid "'%s' value must be either None, True or False."
+msgstr ""
-#: db/models/fields/__init__.py:933
+#: db/models/fields/__init__.py:1067
msgid "Boolean (Either True, False or None)"
msgstr "ثنائي (إما True أو False أو None)"
-#: db/models/fields/__init__.py:1024
+#: db/models/fields/__init__.py:1116
+msgid "Positive integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:1127
+msgid "Positive small integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:1138
+#, python-format
+msgid "Slug (up to %(max_length)s)"
+msgstr ""
+
+#: db/models/fields/__init__.py:1156
+msgid "Small integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:1162
msgid "Text"
msgstr "نص"
-#: db/models/fields/__init__.py:1040
+#: db/models/fields/__init__.py:1180
+#, python-format
+msgid ""
+"'%s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format."
+msgstr ""
+
+#: db/models/fields/__init__.py:1182
+#, python-format
+msgid ""
+"'%s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid "
+"time."
+msgstr ""
+
+#: db/models/fields/__init__.py:1185
msgid "Time"
msgstr "وقت"
-#: db/models/fields/__init__.py:1044
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "أدخل توقيتاً صحيحاً بالنسق HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1120
+#: db/models/fields/__init__.py:1249
msgid "URL"
msgstr "رابط"
-#: db/models/fields/__init__.py:1136
-msgid "XML text"
-msgstr "نص XML"
+#: db/models/fields/files.py:214
+msgid "File"
+msgstr ""
+
+#: db/models/fields/files.py:321
+msgid "Image"
+msgstr ""
-#: db/models/fields/related.py:815
+#: db/models/fields/related.py:903
#, python-format
msgid "Model %(model)s with pk %(pk)r does not exist."
msgstr "النموذج %(model)s ذو الحقل الرئيسي %(pk)r غير موجود."
-#: db/models/fields/related.py:817
+#: db/models/fields/related.py:905
msgid "Foreign Key (type determined by related field)"
msgstr "الحقل المرتبط (تم تحديد النوع وفقاً للحقل المرتبط)"
-#: db/models/fields/related.py:941
+#: db/models/fields/related.py:1033
msgid "One-to-one relationship"
msgstr "علاقة واحد إلى واحد"
-#: db/models/fields/related.py:1003
+#: db/models/fields/related.py:1096
msgid "Many-to-many relationship"
msgstr "علاقة متعدد إلى متعدد"
-#: db/models/fields/related.py:1023
+#: db/models/fields/related.py:1120
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"اضغط زر التحكم \"Control\", أو \"Command\" على أجهزة Mac لاختيار أكثر من "
"واحد."
-#: forms/fields.py:66
+#: forms/fields.py:50
msgid "This field is required."
msgstr "هذا الحقل مطلوب."
-#: forms/fields.py:221
+#: forms/fields.py:208
msgid "Enter a whole number."
msgstr "أدخل رقما صحيحا."
-#: forms/fields.py:253 forms/fields.py:274
+#: forms/fields.py:240 forms/fields.py:261
msgid "Enter a number."
msgstr "أدخل رقماً."
-#: forms/fields.py:277
+#: forms/fields.py:264
#, python-format
msgid "Ensure that there are no more than %s digits in total."
msgstr "تحقق من أن تدخل %s أرقام لا أكثر."
-#: forms/fields.py:278
+#: forms/fields.py:265
#, python-format
msgid "Ensure that there are no more than %s decimal places."
msgstr "تحقق من أن تدخل %s خانات عشرية لا أكثر."
-#: forms/fields.py:279
+#: forms/fields.py:266
#, python-format
msgid "Ensure that there are no more than %s digits before the decimal point."
msgstr "تحقق من أن تدخل %s أرقام قبل الفاصل العشري لا أكثر."
-#: forms/fields.py:342 forms/fields.py:918
+#: forms/fields.py:365 forms/fields.py:963
msgid "Enter a valid date."
msgstr "أدخل تاريخاً صحيحاً."
-#: forms/fields.py:370 forms/fields.py:919
+#: forms/fields.py:388 forms/fields.py:964
msgid "Enter a valid time."
msgstr "أدخل وقتاً صحيحاً."
-#: forms/fields.py:396
+#: forms/fields.py:409
msgid "Enter a valid date/time."
msgstr "أدخل تاريخاً/وقتاً صحيحاً."
-#: forms/fields.py:460
+#: forms/fields.py:485
msgid "No file was submitted. Check the encoding type on the form."
msgstr "لم يتم ارسال ملف، الرجاء التأكد من نوع ترميز الاستمارة."
-#: forms/fields.py:461
+#: forms/fields.py:486
msgid "No file was submitted."
msgstr "لم يتم إرسال اي ملف."
-#: forms/fields.py:462
+#: forms/fields.py:487
msgid "The submitted file is empty."
msgstr "الملف الذي قمت بإرساله فارغ."
-#: forms/fields.py:463
+#: forms/fields.py:488
#, python-format
msgid ""
"Ensure this filename has at most %(max)d characters (it has %(length)d)."
msgstr ""
-"تحقق من أن اسم الملف يتكون بحد أقصى من %(max)d أحرف (يتكون حالياً من %(length)"
-"d)."
+"تحقق من أن اسم الملف يتكون بحد أقصى من %(max)d أحرف (يتكون حالياً من "
+"%(length)d)."
-#: forms/fields.py:464
+#: forms/fields.py:489
msgid "Please either submit a file or check the clear checkbox, not both."
msgstr "رجاءً أرسل ملف أو صح علامة صح عند مربع اختيار \"فارغ\"، وليس كلاهما."
-#: forms/fields.py:518
+#: forms/fields.py:544
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
"قم برفع صورة صحيحة، الملف الذي قمت برفعه إما أنه ليس ملفا لصورة أو أنه ملف "
"معطوب."
-#: forms/fields.py:650 forms/fields.py:725
+#: forms/fields.py:689 forms/fields.py:769
#, python-format
msgid "Select a valid choice. %(value)s is not one of the available choices."
msgstr "انتق خياراً صحيحاً. %(value)s ليس أحد الخيارات المتاحة."
-#: forms/fields.py:726 forms/fields.py:814 forms/models.py:985
+#: forms/fields.py:770 forms/fields.py:858 forms/models.py:999
msgid "Enter a list of values."
msgstr "أدخل قائمة من القيم."
-#: forms/formsets.py:305 forms/formsets.py:307
+#: forms/formsets.py:317 forms/formsets.py:319
msgid "Order"
msgstr "الترتيب"
-#: forms/formsets.py:309
+#: forms/formsets.py:321
msgid "Delete"
msgstr "احذف"
-#: forms/models.py:556
+#: forms/models.py:571
#, python-format
msgid "Please correct the duplicate data for %(field)s."
msgstr "رجاء صحّح بيانات %(field)s المتكررة."
-#: forms/models.py:560
+#: forms/models.py:575
#, python-format
msgid "Please correct the duplicate data for %(field)s, which must be unique."
msgstr "رجاء صحّح بيانات %(field)s المتكررة والتي يجب أن تكون مُميّزة."
-#: forms/models.py:566
+#: forms/models.py:581
#, python-format
msgid ""
"Please correct the duplicate data for %(field_name)s which must be unique "
@@ -613,57 +693,64 @@ msgstr ""
"رجاء صحّح بيانات %(field_name)s المتكررة والتي يجب أن تكون مُميّزة لـ%(lookup)s "
"في %(date_field)s."
-#: forms/models.py:574
+#: forms/models.py:589
msgid "Please correct the duplicate values below."
msgstr "رجاءً صحّح القيم المُكرّرة أدناه."
-#: forms/models.py:835
+#: forms/models.py:849
msgid "The inline foreign key did not match the parent instance primary key."
msgstr "حقل foreign key المحدد لا يطابق الحقل الرئيسي له."
-#: forms/models.py:896
+#: forms/models.py:910
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "انتق خياراً صحيحاً. اختيارك ليس أحد الخيارات المتاحة."
-#: forms/models.py:986
+#: forms/models.py:1000
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "انتق خياراً صحيحاً. %s ليس أحد الخيارات المتاحة."
-#: forms/models.py:988
+#: forms/models.py:1002
#, python-format
msgid "\"%s\" is not a valid value for a primary key."
msgstr "القيمة \"%s\" هي صحيحة للحقل المرجعي."
-#: forms/widgets.py:299
+#: forms/util.py:70
+#, python-format
+msgid ""
+"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it "
+"may be ambiguous or it may not exist."
+msgstr ""
+
+#: forms/widgets.py:325
msgid "Currently"
msgstr "حالياً"
-#: forms/widgets.py:300
+#: forms/widgets.py:326
msgid "Change"
msgstr "عدّل"
-#: forms/widgets.py:301
+#: forms/widgets.py:327
msgid "Clear"
msgstr "تفريغ"
-#: forms/widgets.py:548
+#: forms/widgets.py:582
msgid "Unknown"
msgstr "مجهول"
-#: forms/widgets.py:548
+#: forms/widgets.py:583
msgid "Yes"
msgstr "نعم"
-#: forms/widgets.py:548
+#: forms/widgets.py:584
msgid "No"
msgstr "لا"
-#: template/defaultfilters.py:777
+#: template/defaultfilters.py:797
msgid "yes,no,maybe"
msgstr "نعم,لا,ربما"
-#: template/defaultfilters.py:805 template/defaultfilters.py:810
+#: template/defaultfilters.py:825 template/defaultfilters.py:830
#, python-format
msgid "%(size)d byte"
msgid_plural "%(size)d bytes"
@@ -674,52 +761,52 @@ msgstr[3] "%(size)d بايتان"
msgstr[4] "%(size)d بايت"
msgstr[5] "%(size)d بايت"
-#: template/defaultfilters.py:812
+#: template/defaultfilters.py:832
#, python-format
msgid "%s KB"
msgstr "%s ك.ب"
-#: template/defaultfilters.py:814
+#: template/defaultfilters.py:834
#, python-format
msgid "%s MB"
msgstr "%s م.ب"
-#: template/defaultfilters.py:816
+#: template/defaultfilters.py:836
#, python-format
msgid "%s GB"
msgstr "%s ج.ب"
-#: template/defaultfilters.py:818
+#: template/defaultfilters.py:838
#, python-format
msgid "%s TB"
msgstr "%s ت.ب"
-#: template/defaultfilters.py:819
+#: template/defaultfilters.py:839
#, python-format
msgid "%s PB"
msgstr "%s ب.ب"
-#: utils/dateformat.py:42
+#: utils/dateformat.py:45
msgid "p.m."
msgstr "م"
-#: utils/dateformat.py:43
+#: utils/dateformat.py:46
msgid "a.m."
msgstr "ص"