diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 000000000..c9a33fcec --- /dev/null +++ b/.pylintrc @@ -0,0 +1,408 @@ +[MASTER] + +# Specify a configuration file. +#rcfile= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS,migrations + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Pickle collected data for later comparisons. +persistent=yes + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins=pylint_django,pylint_common + +# Use multiple processes to speed up Pylint. +jobs=1 + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + +# Allow optimization of some AST trees. This will activate a peephole AST +# optimizer, which will apply various small optimizations. For instance, it can +# be used to obtain the result of joining multiple strings with the addition +# operator. Joining a lot of strings can lead to a maximum recursion error in +# Pylint and this flag can prevent that. It has one side effect, the resulting +# AST will be different than the one from reality. This option is deprecated +# and it will be removed in Pylint 2.0. +optimize-ast=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +#enable= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" +#disable=C,import-star-module-level,old-octal-literal,oct-method,print-statement,unpacking-in-except,parameter-unpacking,backtick,old-raise-syntax,old-ne-operator,long-suffix,dict-view-method,dict-iter-method,metaclass-assignment,next-method-called,raising-string,indexing-exception,raw_input-builtin,long-builtin,file-builtin,execfile-builtin,coerce-builtin,cmp-builtin,buffer-builtin,basestring-builtin,apply-builtin,filter-builtin-not-iterating,using-cmp-argument,useless-suppression,range-builtin-not-iterating,suppressed-message,no-absolute-import,old-division,cmp-method,reload-builtin,zip-builtin-not-iterating,intern-builtin,unichr-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,input-builtin,round-builtin,hex-method,nonzero-method,map-builtin-not-iterating,unused-wildcard-import,locally-disabled,mixed-indentation +disable=W,C,R,I,no-member + + +[REPORTS] + +# Set the output format. Available formats are text, parseable, colorized, msvs +# (visual studio) and html. You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=parseable + +# Put messages in a separate file for each module / package specified on the +# command line instead of printing them on stdout. Reports (if any) will be +# written in a file name "pylint_global.[txt|html]". This option is deprecated +# and it will be removed in Pylint 2.0. +files-output=no + +# Tells whether to display a full report or only the messages +reports=no + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + + +[SPELLING] + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[FORMAT] + +# Maximum number of characters on a single line. +max-line-length=100 + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma,dict-separator + +# Maximum number of lines in a module +max-module-lines=1000 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO + + +[SIMILARITIES] + +# Minimum lines number of a similarity. +min-similarity-lines=4 + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + + +[VARIABLES] + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=(_+[a-zA-Z0-9]*?$)|dummy + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_,_cb + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,future.builtins + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=logging + + +[TYPECHECK] + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + + +[BASIC] + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,_ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Regular expression matching correct function names +function-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for function names +function-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct variable names +variable-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for variable names +variable-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct constant names +const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Naming hint for constant names +const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Regular expression matching correct attribute names +attr-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for attribute names +attr-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct argument names +argument-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for argument names +argument-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct class attribute names +class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ + +# Naming hint for class attribute names +class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ + +# Regular expression matching correct inline iteration names +inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ + +# Naming hint for inline iteration names +inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ + +# Regular expression matching correct class names +class-rgx=[A-Z_][a-zA-Z0-9]+$ + +# Naming hint for class names +class-name-hint=[A-Z_][a-zA-Z0-9]+$ + +# Regular expression matching correct module names +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Naming hint for module names +module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Regular expression matching correct method names +method-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for method names +method-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + + +[ELIF] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__,__new__,setUp + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict,_fields,_replace,_source,_make + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=5 + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.* + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of branch for function / method body +max-branches=12 + +# Maximum number of statements in function / method body +max-statements=50 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + + +[IMPORTS] + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub,TERMIOS,Bastion,rexec + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/ietf/dbtemplate/template.py b/ietf/dbtemplate/template.py index 2ac7dd5f0..3445984fb 100644 --- a/ietf/dbtemplate/template.py +++ b/ietf/dbtemplate/template.py @@ -26,7 +26,7 @@ class Template(object): self.name = name def render(self, context): - raise NotImplemented + raise NotImplementedError class PlainTemplate(Template): diff --git a/ietf/doc/factories.py b/ietf/doc/factories.py index 7e59a4927..9e29c1a19 100644 --- a/ietf/doc/factories.py +++ b/ietf/doc/factories.py @@ -31,23 +31,23 @@ class DocumentFactory(factory.DjangoModelFactory): alias = factory.RelatedFactory('ietf.doc.factories.DocAliasFactory','document') @factory.post_generation - def other_aliases(self, create, extracted, **kwargs): + def other_aliases(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument if create and extracted: for alias in extracted: - self.docalias_set.create(name=alias) + obj.docalias_set.create(name=alias) @factory.post_generation - def states(self, create, extracted, **kwargs): + def states(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument if create and extracted: for (state_type_id,state_slug) in extracted: - self.set_state(State.objects.get(type_id=state_type_id,slug=state_slug)) + obj.set_state(State.objects.get(type_id=state_type_id,slug=state_slug)) @factory.post_generation - def authors(self, create, extracted, **kwargs): + def authors(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument if create and extracted: order = 0 for email in extracted: - DocumentAuthor.objects.create(document=self, author=email, order=order) + DocumentAuthor.objects.create(document=obj, author=email, order=order) order += 1 @classmethod diff --git a/ietf/ietfauth/forms.py b/ietf/ietfauth/forms.py index 9779fd218..a7d2e48ce 100644 --- a/ietf/ietfauth/forms.py +++ b/ietf/ietfauth/forms.py @@ -74,7 +74,7 @@ def get_person_form(*args, **kwargs): exclude = exclude_list def __init__(self, *args, **kwargs): - super(ModelForm, self).__init__(*args, **kwargs) + super(PersonForm, self).__init__(*args, **kwargs) # blank ascii if it's the same as name self.fields["ascii"].required = self.fields["ascii"].widget.is_required = False diff --git a/ietf/ipr/forms.py b/ietf/ipr/forms.py index de56fdf0c..aa3aff61e 100644 --- a/ietf/ipr/forms.py +++ b/ietf/ipr/forms.py @@ -227,7 +227,7 @@ class HolderIprDisclosureForm(IprDisclosureFormBase): return cleaned_data def save(self, *args, **kwargs): - obj = super(IprDisclosureFormBase, self).save(*args,commit=False) + obj = super(HolderIprDisclosureForm, self).save(*args,commit=False) if self.cleaned_data.get('same_as_ii_above') == True: obj.submitter_name = obj.holder_contact_name obj.submitter_email = obj.holder_contact_email diff --git a/ietf/liaisons/forms.py b/ietf/liaisons/forms.py index a2d307f5d..1ec804bf0 100644 --- a/ietf/liaisons/forms.py +++ b/ietf/liaisons/forms.py @@ -199,8 +199,8 @@ class CustomModelMultipleChoiceField(forms.ModelMultipleChoiceField): if (hasattr(value, '__iter__') and not isinstance(value, six.text_type) and not hasattr(value, '_meta')): - return [super(forms.ModelMultipleChoiceField, self).prepare_value(v) for v in value] - return super(forms.ModelMultipleChoiceField, self).prepare_value(value) + return [super(CustomModelMultipleChoiceField, self).prepare_value(v) for v in value] + return super(CustomModelMultipleChoiceField, self).prepare_value(value) class LiaisonModelForm(BetterModelForm): diff --git a/ietf/meeting/factories.py b/ietf/meeting/factories.py index ebff3a6c3..66386ad90 100644 --- a/ietf/meeting/factories.py +++ b/ietf/meeting/factories.py @@ -38,7 +38,7 @@ class MeetingFactory(factory.DjangoModelFactory): return 'interim-%d-%s-%02d'%(self.date.year,GroupFactory().acronym,n) @factory.post_generation - def populate_agenda(self, create, extracted, **kwargs): + def populate_agenda(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument ''' Create a default agenda, unless the factory is called with populate_agenda=False @@ -47,9 +47,9 @@ class MeetingFactory(factory.DjangoModelFactory): extracted = True if create and extracted: for x in range(3): - TimeSlotFactory(meeting=self) - self.agenda = ScheduleFactory(meeting=self) - self.save() + TimeSlotFactory(meeting=obj) + obj.agenda = ScheduleFactory(meeting=obj) + obj.save() class SessionFactory(factory.DjangoModelFactory): @@ -63,7 +63,7 @@ class SessionFactory(factory.DjangoModelFactory): status_id='sched' @factory.post_generation - def add_to_schedule(self, create, extracted, **kwargs): + def add_to_schedule(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument ''' Put this session in a timeslot unless the factory is called with add_to_schedule=False @@ -71,8 +71,8 @@ class SessionFactory(factory.DjangoModelFactory): if extracted is None: extracted = True if create and extracted: - ts = self.meeting.timeslot_set.all() - self.timeslotassignments.create(timeslot=ts[random.randrange(len(ts))],schedule=self.meeting.agenda) + ts = obj.meeting.timeslot_set.all() + obj.timeslotassignments.create(timeslot=ts[random.randrange(len(ts))],schedule=obj.meeting.agenda) class ScheduleFactory(factory.DjangoModelFactory): class Meta: diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py index e37d435de..27e1ee4f6 100644 --- a/ietf/meeting/models.py +++ b/ietf/meeting/models.py @@ -1215,7 +1215,7 @@ class Session(models.Model): return self._agenda_file def badness_test(self, num): - from settings import BADNESS_CALC_LOG + from settings import BADNESS_CALC_LOG # pylint: disable=import-error #sys.stdout.write("num: %u / BAD: %u\n" % (num, BADNESS_CALC_LOG)) return BADNESS_CALC_LOG >= num @@ -1245,7 +1245,7 @@ class Session(models.Model): if self.badness_test(2): self.badness_log(2, "badness for group: %s has %u constraints\n" % (self.group.acronym, len(conflicts))) - from settings import BADNESS_UNPLACED, BADNESS_TOOSMALL_50, BADNESS_TOOSMALL_100, BADNESS_TOOBIG, BADNESS_MUCHTOOBIG + from settings import BADNESS_UNPLACED, BADNESS_TOOSMALL_50, BADNESS_TOOSMALL_100, BADNESS_TOOBIG, BADNESS_MUCHTOOBIG # pylint: disable=import-error count = 0 myss_list = assignments[self.group] # for each constraint of this sessions' group, by group @@ -1364,7 +1364,7 @@ class Session(models.Model): # not being scheduled is worth 10,000,000 points # def badness_fast(self, timeslot, scheduleslot, session_pk_list): - from settings import BADNESS_UNPLACED, BADNESS_TOOSMALL_50, BADNESS_TOOSMALL_100, BADNESS_TOOBIG, BADNESS_MUCHTOOBIG + from settings import BADNESS_UNPLACED, BADNESS_TOOSMALL_50, BADNESS_TOOSMALL_100, BADNESS_TOOBIG, BADNESS_MUCHTOOBIG # pylint: disable=import-error badness = 0 diff --git a/ietf/meeting/timedeltafield.py b/ietf/meeting/timedeltafield.py index 234b670d8..a03a29fe4 100644 --- a/ietf/meeting/timedeltafield.py +++ b/ietf/meeting/timedeltafield.py @@ -59,7 +59,7 @@ class TimedeltaField(models.Field): def value_to_string(self, obj): value = self._get_val_from_obj(obj) - return self.get_db_prep_value(value) + return self.get_db_prep_value(value) # pylint: disable=no-value-for-parameter class TimedeltaFormField(forms.Field): diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index febdd085c..6b10fe0d1 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -141,7 +141,7 @@ def agenda_create(request, num=None, owner=None, name=None): if schedule is None: # here we have to return some ajax to display an error. - messages.error("Error: No meeting information for meeting %s owner %s schedule %s available" % (num, owner, name)) + messages.error("Error: No meeting information for meeting %s owner %s schedule %s available" % (num, owner, name)) # pylint: disable=no-value-for-parameter return redirect(edit_agenda, num=num, owner=owner, name=name) # authorization was enforced by the @group_require decorator above. diff --git a/ietf/nomcom/factories.py b/ietf/nomcom/factories.py index ef639d2e5..6c29a53ed 100644 --- a/ietf/nomcom/factories.py +++ b/ietf/nomcom/factories.py @@ -84,7 +84,7 @@ class NomComFactory(factory.DjangoModelFactory): public_key = factory.django.FileField(data=cert) @factory.post_generation - def populate_positions(self, create, extracted, **kwargs): + def populate_positions(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument ''' Create a set of nominees and positions unless NomcomFactory is called with populate_positions=False @@ -92,8 +92,8 @@ class NomComFactory(factory.DjangoModelFactory): if extracted is None: extracted = True if create and extracted: - nominees = [NomineeFactory(nomcom=self) for i in range(4)] - positions = [PositionFactory(nomcom=self) for i in range(3)] + nominees = [NomineeFactory(nomcom=obj) for i in range(4)] + positions = [PositionFactory(nomcom=obj) for i in range(3)] def npc(position,nominee,state_id): return NomineePosition.objects.create(position=position, @@ -108,7 +108,7 @@ class NomComFactory(factory.DjangoModelFactory): npc(positions[0],nominees[3],'declined') @factory.post_generation - def populate_personnel(self, create, extracted, **kwargs): + def populate_personnel(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument ''' Create a default set of role holders, unless the factory is called with populate_personnel=False @@ -120,7 +120,7 @@ class NomComFactory(factory.DjangoModelFactory): roles = ['chair', 'advisor', 'member'] for role in roles: p = PersonFactory() - self.group.role_set.create(name_id=role,person=p,email=p.email_set.first()) + obj.group.role_set.create(name_id=role,person=p,email=p.email_set.first()) class PositionFactory(factory.DjangoModelFactory): class Meta: diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index d6c80f13e..273b97da4 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -75,7 +75,7 @@ class PositionNomineeField(forms.ChoiceField): class MultiplePositionNomineeField(forms.MultipleChoiceField, PositionNomineeField): def clean(self, value): - nominees = super(PositionNomineeField, self).clean(value) + nominees = super(PositionNomineeField, self).clean(value) # pylint: disable=bad-super-call result = [] for nominee in nominees: if not nominee: diff --git a/ietf/nomcom/models.py b/ietf/nomcom/models.py index bc0162965..8e1afc691 100644 --- a/ietf/nomcom/models.py +++ b/ietf/nomcom/models.py @@ -187,7 +187,7 @@ class Position(models.Model): def get_templates(self): if hasattr(self, '_templates'): - return self._templates + return self._templates # pylint: disable=access-member-before-definition from ietf.dbtemplate.models import DBTemplate self._templates = DBTemplate.objects.filter(group=self.nomcom.group).filter(path__contains='/%s/position/' % self.id).order_by('title') return self._templates diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index 01dc0f6ce..0a81d608b 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -5,7 +5,7 @@ import re import tempfile from email.header import decode_header -from email.Iterators import typed_subpart_iterator +from email.iterators import typed_subpart_iterator from email import message_from_string from django.conf import settings diff --git a/ietf/person/factories.py b/ietf/person/factories.py index 1a65a6d58..ef47865e9 100644 --- a/ietf/person/factories.py +++ b/ietf/person/factories.py @@ -22,8 +22,8 @@ class UserFactory(factory.DjangoModelFactory): username = factory.LazyAttribute(lambda u: u.email) @factory.post_generation - def set_password(self, create, extracted, **kwargs): - self.set_password( '%s+password' % self.username ) + def set_password(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument + obj.set_password( '%s+password' % obj.username ) # pylint: disable=no-value-for-parameter class PersonFactory(factory.DjangoModelFactory): class Meta: @@ -39,24 +39,24 @@ class PersonFactory(factory.DjangoModelFactory): ) @factory.post_generation - def default_aliases(self, create, extracted, **kwargs): + def default_aliases(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument make_alias = getattr(AliasFactory, 'create' if create else 'build') - make_alias(person=self,name=self.name) - make_alias(person=self,name=self.ascii) + make_alias(person=obj,name=obj.name) + make_alias(person=obj,name=obj.ascii) @factory.post_generation - def default_emails(self, create, extracted, **kwargs): + def default_emails(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument make_email = getattr(EmailFactory, 'create' if create else 'build') - make_email(person=self,address=self.user.email) + make_email(person=obj,address=obj.user.email) @factory.post_generation - def default_photo(self, create, extracted, **kwargs): + def default_photo(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument import atexit - if self.biography: - photo_name = self.photo_name() + if obj.biography: + photo_name = obj.photo_name() media_name = u"%s/%s.jpg" % (settings.PHOTOS_DIRNAME, photo_name) - self.photo = media_name - self.photo_thumb = media_name + obj.photo = media_name + obj.photo_thumb = media_name photosrc = os.path.join(settings.TEST_DATA_DIR, "profile-default.jpg") photodst = os.path.join(settings.PHOTOS_DIR, photo_name + '.jpg') if not os.path.exists(photodst): diff --git a/ietf/secr/areas/templatetags/__init__.py b/ietf/secr/areas/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ietf/secr/areas/templatetags/custom_tags.py b/ietf/secr/areas/templatetags/custom_tags.py deleted file mode 100644 index 0423b3c6a..000000000 --- a/ietf/secr/areas/templatetags/custom_tags.py +++ /dev/null @@ -1,10 +0,0 @@ -from django import template -from ietf.secr.areas import models - -register = template.Library() - -@register.inclusion_tag('areas/directors.html') -def display_directors(area_id): - area = models.Area.objects.get(area_acronym__exact=area_id) - directors = models.AreaDirector.objects.filter(area=area) - return { 'directors': directors } diff --git a/ietf/secr/proceedings/models.py b/ietf/secr/proceedings/models.py index 0e3001a65..7ddf6d6fe 100644 --- a/ietf/secr/proceedings/models.py +++ b/ietf/secr/proceedings/models.py @@ -25,7 +25,7 @@ class InterimMeeting(Meeting): def group(self): return self.session_set.all()[0].group - def agenda(self): + def agenda(self): # pylint: disable=method-hidden session = self.session_set.all()[0] agendas = session.materials.exclude(states__slug='deleted').filter(type='agenda') if agendas: diff --git a/ietf/secr/rolodex/views.py b/ietf/secr/rolodex/views.py index 0778a5815..b49b9aa5c 100644 --- a/ietf/secr/rolodex/views.py +++ b/ietf/secr/rolodex/views.py @@ -73,7 +73,7 @@ def add_proceed(request): if request.session['post_data']: post_data = request.session['post_data'] else: - messages.error('ERROR: unable to save session data (enable cookies)') + messages.error('ERROR: unable to save session data (enable cookies)') # pylint: disable=no-value-for-parameter return redirect('rolodex_add') name = post_data['name'] diff --git a/ietf/submit/checkers.py b/ietf/submit/checkers.py index 671152823..faf4b74f2 100644 --- a/ietf/submit/checkers.py +++ b/ietf/submit/checkers.py @@ -80,7 +80,7 @@ class DraftIdnitsChecker(object): else: passed = False - item = None + item = "" for line in message.splitlines(): if line[:5] in (errstart + warnstart): item = line.rstrip() @@ -93,7 +93,7 @@ class DraftIdnitsChecker(object): warnings += 1 else: raise RuntimeError("Unexpected state in idnits checker: item: %s, line: %s" % (item, line)) - item = None + item = "" elif item and line.strip() != "": item += " " + line.strip() else: diff --git a/ietf/utils/mail.py b/ietf/utils/mail.py index 85ef88655..bed77fa70 100644 --- a/ietf/utils/mail.py +++ b/ietf/utils/mail.py @@ -1,9 +1,9 @@ # Copyright The IETF Trust 2007, All Rights Reserved -from email.Utils import make_msgid, formatdate, formataddr, parseaddr, getaddresses -from email.MIMEText import MIMEText -from email.MIMEMessage import MIMEMessage -from email.MIMEMultipart import MIMEMultipart +from email.utils import make_msgid, formatdate, formataddr, parseaddr, getaddresses +from email.mime.text import MIMEText +from email.mime.message import MIMEMessage +from email.mime.multipart import MIMEMultipart from email.header import Header from email import message_from_string from email import charset as Charset diff --git a/ietf/utils/management/commands/import_htpasswd.py b/ietf/utils/management/commands/import_htpasswd.py index 6a3a03286..a444377cb 100644 --- a/ietf/utils/management/commands/import_htpasswd.py +++ b/ietf/utils/management/commands/import_htpasswd.py @@ -11,7 +11,7 @@ def import_htpasswd_file(filename, verbosity=1, overwrite=False): for line in file: if not ':' in line: raise ValueError('Found a line without colon separator in the htpassword file %s:'+ - ' "%s"' % (file.name, line)) + ' "%s"' % (file.name, line)) # pylint: disable=too-many-format-args username, password = line.strip().split(':', 1) try: user = User.objects.get(username=username) @@ -59,4 +59,4 @@ class Command(BaseCommand): verbosity = int(options.get('verbosity')) for fn in filenames: import_htpasswd_file(fn, verbosity=verbosity, overwrite=overwrite) - \ No newline at end of file + diff --git a/ietf/utils/storage.py b/ietf/utils/storage.py index 6e0a96c67..0aa02cab8 100644 --- a/ietf/utils/storage.py +++ b/ietf/utils/storage.py @@ -2,7 +2,7 @@ from django.core.files.storage import FileSystemStorage class NoLocationMigrationFileSystemStorage(FileSystemStorage): - def deconstruct(obj): + def deconstruct(obj): # pylint: disable=no-self-argument path, args, kwargs = FileSystemStorage.deconstruct(obj) kwargs["location"] = None return (path, args, kwargs)