Пример #1
0
def urlquote_plus(url, safe=''):
    """
    A version of Python's urllib.quote_plus() function that can operate on
    unicode strings. The url is first UTF-8 encoded before quoting. The
    returned string can safely be used as part of an argument to a subsequent
    iri_to_uri() call without double-quoting occurring.
    """
    return force_text(quote_plus(force_str(url), force_str(safe)))
Пример #2
0
def urlencode(query, doseq=0):
    """
    A version of Python's urllib.urlencode() function that can operate on
    unicode strings. The parameters are first cast to UTF-8 encoded strings and
    then encoded as per normal.
    """
    if isinstance(query, MultiValueDict):
        query = query.lists()
    elif hasattr(query, 'items'):
        query = query.items()
    return original_urlencode(
        [(force_str(k),
          [force_str(i)
           for i in v] if isinstance(v, (list, tuple)) else force_str(v))
         for k, v in query], doseq)
Пример #3
0
 def get_connection_params(self):
     kwargs = {
         'conv': django_conversions,
         'charset': 'utf8',
     }
     if six.PY2:
         kwargs['use_unicode'] = True
     settings_dict = self.settings_dict
     if settings_dict['USER']:
         kwargs['user'] = settings_dict['USER']
     if settings_dict['NAME']:
         kwargs['db'] = settings_dict['NAME']
     if settings_dict['PASSWORD']:
         kwargs['passwd'] = force_str(settings_dict['PASSWORD'])
     if settings_dict['HOST'].startswith('/'):
         kwargs['unix_socket'] = settings_dict['HOST']
     elif settings_dict['HOST']:
         kwargs['host'] = settings_dict['HOST']
     if settings_dict['PORT']:
         kwargs['port'] = int(settings_dict['PORT'])
     # We need the number of potentially affected rows after an
     # "UPDATE", not the number of changed rows.
     kwargs['client_flag'] = CLIENT.FOUND_ROWS
     kwargs.update(settings_dict['OPTIONS'])
     return kwargs
Пример #4
0
 def get_directory_name(self):
     warnings.warn(
         'FileField now delegates file name and folder processing to the '
         'storage. get_directory_name() will be removed in Django 2.0.',
         RemovedInDjango20Warning,
         stacklevel=2)
     return os.path.normpath(
         force_text(datetime.datetime.now().strftime(
             force_str(self.upload_to))))
Пример #5
0
 def generate_filename(self, instance, filename):
     """
     Apply (if callable) or prepend (if a string) upload_to to the filename,
     then delegate further processing of the name to the storage backend.
     Until the storage layer, all file paths are expected to be Unix style
     (with forward slashes).
     """
     if callable(self.upload_to):
         filename = self.upload_to(instance, filename)
     else:
         dirname = force_text(datetime.datetime.now().strftime(
             force_str(self.upload_to)))
         filename = posixpath.join(dirname, filename)
     return self.storage.generate_filename(filename)
Пример #6
0
    def __str__(self):
        from arouse._dj.db import models

        if self.obj is None:
            obj = "?"
        elif isinstance(self.obj, models.base.ModelBase):
            # We need to hardcode ModelBase and Field cases because its __str__
            # method doesn't return "applabel.modellabel" and cannot be changed.
            obj = self.obj._meta.label
        else:
            obj = force_str(self.obj)
        id = "(%s) " % self.id if self.id else ""
        hint = "\n\tHINT: %s" % self.hint if self.hint else ''
        return "%s: %s%s%s" % (obj, id, self.msg, hint)
Пример #7
0
 def get_connection_params(self):
     settings_dict = self.settings_dict
     # None may be used to connect to the default 'postgres' db
     if settings_dict['NAME'] == '':
         raise ImproperlyConfigured(
             "settings.DATABASES is improperly configured. "
             "Please supply the NAME value.")
     conn_params = {
         'database': settings_dict['NAME'] or 'postgres',
     }
     conn_params.update(settings_dict['OPTIONS'])
     conn_params.pop('isolation_level', None)
     if settings_dict['USER']:
         conn_params['user'] = settings_dict['USER']
     if settings_dict['PASSWORD']:
         conn_params['password'] = force_str(settings_dict['PASSWORD'])
     if settings_dict['HOST']:
         conn_params['host'] = settings_dict['HOST']
     if settings_dict['PORT']:
         conn_params['port'] = settings_dict['PORT']
     return conn_params
Пример #8
0
 def __repr__(self):
     return force_str("<%s: %s>" %
                      (self.__class__.__name__, self or "None"))
Пример #9
0
def urlunquote_plus(quoted_url):
    """
    A wrapper for Python's urllib.unquote_plus() function that can operate on
    the result of django.utils.http.urlquote_plus().
    """
    return force_text(unquote_plus(force_str(quoted_url)))
Пример #10
0
    def check(self,
              app_configs=None,
              tags=None,
              display_num_errors=False,
              include_deployment_checks=False,
              fail_level=checks.ERROR):
        """
        Uses the system check framework to validate entire Django project.
        Raises CommandError for any serious message (error or critical errors).
        If there are only light messages (like warnings), they are printed to
        stderr and no exception is raised.
        """
        all_issues = self._run_checks(
            app_configs=app_configs,
            tags=tags,
            include_deployment_checks=include_deployment_checks,
        )

        header, body, footer = "", "", ""
        visible_issue_count = 0  # excludes silenced warnings

        if all_issues:
            debugs = [
                e for e in all_issues
                if e.level < checks.INFO and not e.is_silenced()
            ]
            infos = [
                e for e in all_issues
                if checks.INFO <= e.level < checks.WARNING
                and not e.is_silenced()
            ]
            warnings = [
                e for e in all_issues
                if checks.WARNING <= e.level < checks.ERROR
                and not e.is_silenced()
            ]
            errors = [
                e for e in all_issues
                if checks.ERROR <= e.level < checks.CRITICAL
                and not e.is_silenced()
            ]
            criticals = [
                e for e in all_issues
                if checks.CRITICAL <= e.level and not e.is_silenced()
            ]
            sorted_issues = [
                (criticals, 'CRITICALS'),
                (errors, 'ERRORS'),
                (warnings, 'WARNINGS'),
                (infos, 'INFOS'),
                (debugs, 'DEBUGS'),
            ]

            for issues, group_name in sorted_issues:
                if issues:
                    visible_issue_count += len(issues)
                    formatted = (self.style.ERROR(force_str(e))
                                 if e.is_serious() else self.style.WARNING(
                                     force_str(e)) for e in issues)
                    formatted = "\n".join(sorted(formatted))
                    body += '\n%s:\n%s\n' % (group_name, formatted)

        if visible_issue_count:
            header = "System check identified some issues:\n"

        if display_num_errors:
            if visible_issue_count:
                footer += '\n'
            footer += "System check identified %s (%s silenced)." % (
                "no issues" if visible_issue_count == 0 else
                "1 issue" if visible_issue_count == 1 else "%s issues" %
                visible_issue_count,
                len(all_issues) - visible_issue_count,
            )

        if any(
                e.is_serious(fail_level) and not e.is_silenced()
                for e in all_issues):
            msg = self.style.ERROR(
                "SystemCheckError: %s" % header) + body + footer
            raise SystemCheckError(msg)
        else:
            msg = header + body + footer

        if msg:
            if visible_issue_count:
                self.stderr.write(msg, lambda x: x)
            else:
                self.stdout.write(msg)
Пример #11
0
 def write(self, msg, style_func=None, ending=None):
     ending = self.ending if ending is None else ending
     if ending and not msg.endswith(ending):
         msg += ending
     style_func = style_func or self.style_func
     self._out.write(force_str(style_func(msg)))
Пример #12
0
 def __str__(self):
     template = '(NOT (%s: %s))' if self.negated else '(%s: %s)'
     return force_str(
         template %
         (self.connector, ', '.join(force_text(c) for c in self.children)))
Пример #13
0
 def make_key(self, key, version=None):
     # Python 2 memcache requires the key to be a byte string.
     return force_str(
         super(BaseMemcachedCache, self).make_key(key, version))
Пример #14
0
 def __repr__(self):
     return force_str("<%s: %s (%s)>" % (
         self.__class__.__name__, self.name, self.content_type))