Monday, 10 July 2017

Mypy 0.520 Released

We’ve just uploaded mypy 0.520 to PyPI. This release includes new features, bug fixes and library stub (typeshed) updates. You can install it as follows:

    python3 -m pip install --upgrade mypy

We are always happy to answer questions on Gitter — note that we’ve moved to a new channel, python/typing.

Major New Features

Fine-grained Control of Any Types

Mypy now has a --disallow-any option that gives you more fine-grained control over Any types in your code. In particular, it lets you disallow the following kinds of Any:

  • explicit disallows explicit Any in type positions such as type annotations and generic type parameters
  • expr disallows all expressions in the module that have type Any
  • unimported disallows Any types that come from unfollowed imports (they usually appear with --follow-imports=skip or --ignore-missing-imports)
  • generics disallows usage of generic types that do not specify explicit type parameters. For example, List (without type parameters) is disallowed but using List[int] (or even List[Any]) is allowed.
  • decorated disallows functions that have Any in their signature after decorator transformation

You can use the option from command-line as --disallow-any=expr,explicit or from config file as disallow_any = generics,expr.

To learn more about the --disallow-any option, read the documentation.

This was implemented by Svyatoslav Ilinskiy.

__setattr__ Support

Mypy now understands __setattr__. If a class defines it, mypy allows assignments to arbitrary attributes. Example:

    class A:
        # This will allow assignment to any A.x, if x is the same type as value.
        def __setattr__(self, name: str, value: int) -> None:
            ... = 42  # Works = 'Ex-parrot'  # Fails type checking

This was contributed by Ethan Smith (PR 3451).

Hash-based Incremental Cache

Previously the incremental cache (enabled by the -i option) detected changes in source files based on the file modification time and file size. This made it hard to share incremental cache files between systems, since modification times generally aren’t consistent across multiple repository checkouts. Now mypy requires a change to the md5 hash of a file to consider it changed. This makes it possible to “warm up” the incremental cache by downloading it from a central repository, which can speed up mypy runs significantly. Providing an implementation of such a repository is out of scope for mypy, though.

This was implemented by Max Moroz and Guido (PR 3437 and some others).

NamedTuple Methods

It is now possible to add methods to NamedTuples defined using the Python 3.6 class-based syntax:
    class Point(NamedTuple):
        x: float
        y: float

        def translate(self, dx: float, dx: float) -> 'Point':
            return Point(x=self.x + dx, y=self.y + dy)

    p = Point(1, 2).translate(Point(4, 5))

Note that runtime support for this feature requires typing 3.6.1.

This was contributed by Jelle Zijlstra (PR 3081).

Improved Error Messages

Various error messages generated by mypy have been improved. Here is a summary of what’s changed:

  • Use distinct formatting for regular types and type object types; previously they looked sometimes confusingly identical (Elazar Gershuni, PR 3374)
  • Display the union type and offending union item when reporting a missing attribute for a union type (Amir Rachum, PR 3402)
  • Include line number of previous definition when there is a redefinition error (Max Moroz, PR 3424)
  • Suggest a type annotation if the type of a returned variable is incompatible with the declared return type (Jesse Lord, PR 3428)
  • Improve error message for invalid package names passed to mypy (chernrick, PR 3447)
  • Fix several error messages that didn't display types correctly (Svyatoslav Ilinskiy, PR 3638)
  • Revamp TypedDict-related error messages (Jukka Lehtosalo)

More New Features

  • Experimental support for enabling strict optional checking on a per file basis (David Fisher, PR 3206)
  • Support simple aliases to modules (Carl Meyer, PR 3435)
  • Support six.with_metaclass (Guido, PR 3364)
  • Allow any subtype of typing.Mapping[str, Any] to be passed in as **kwargs (Roy Williams, PR 3604)
  • Add flag --no-implicit-optional to avoid interpreting arguments with a default of None as Optional — this may become the default behavior in the future (David Fisher, PR 3248)
  • Allow NewType that subclasses another NewType (Carl Meyer, PR 3465)
  • Infer better return types for certain common special signatures such as open (if the mode is a string literal), contextlib.contextmanager and ** with a literal exponent (Jukka Lehtosalo, PR 3299)
  • Add --include-private flag to stubgen to include private members (Chad Dombrova, PR 3367)
  • Add flag --any-exprs-report to generate report about Any expressions (Svyatoslav Ilinskiy, PR 3492)
  • Allow tuple indexing using non-literal expressions (David Fisher, PR 3514)
  • Normalize Type[Union[...]] internally to Union[Type[...], ...] (Max Moroz, PR 3209)
  • Improve handling of compile-time relational operators (Ryan Gonzalez, PR 3158)
  • Add --no-incremental flag to disable incremental mode (David Fisher, PR 3570)
  • Improve type inference of unconditional if statements without else block (Michael Lee, PR 3567)
  • Document the --shadow-file option (David Fisher, PR 3615)
  • Display unreachable code as Any in HTML coverage reports (Svyatoslav Ilinskiy, PR 3616)
  • Add --skip-version-check flag to ignore the mypy version when validating incremental cache metadata (Guido, PR 3641)
  • Add a very experimental (and still undocumented) plugin system for extending mypy (PR 3534 and Jukka Lehtosalo, PR 3517)
  • Many improvements to TypedDict and new documentation [this is still not an officially supported feature] (Jukka Lehtosalo, Max Moroz and Ivan Levkivskyi)

Notable Bugs Fixed

  • Make change of platform invalidate the cache (Guido, PR 3663)
  • Fix imported generic type aliases (Ivan Levkivskyi, PR 3524)
  • Fix Optional[...] type aliases (Ivan Levkivskyi, PR 3524)
  • Reject redefinition of type aliases (Ivan Levkivskyi, PR 3524)
  • Fix None slice bounds with --strict-optional (Dominik Miedziński, PR 3445)
  • Fix crashes related to referring to a type before the definition has been processed (Ivan Levkiskyi, PR 3322 and PR 3560)
  • Fix crash when displaying the location of a method definition (Dominik Miedziński, PR 3375)
  • Treat non-inplace augmented assignment as a simple assignment (Max Moroz, PR 3110)
  • Fixes to quick mode (Ivan Levkivskyi, PR 3304 and PR 3356)
  • Don't warn about returning Any if an Any return value is explicitly allowed (Ivan Levkivskyi, PR 3473)
  • Fix type of f-string with only {…} such as f'{x}' (lincolnq, PR 3390)
  • Make Type[X] compatible with the metaclass of X (Elazar Gershuni, PR 3346)
  • Support accessing modules imported in class bodies within methods (Carl Meyer, PR 3450)
  • Fix crash when serializing a type-ignored property setter (Jelle Zijlstra, PR 3493)
  • Fix spurious "cycle in function expansion" errors (Guido, PR 3504)
  • Fix to union type used in condition (David Fisher, PR 3510)
  • Fix crashes on lambda generators (Ivan Levkivskyi, PR 3523)
  • Fix accessing qualified import in incremental mode (Michael Lee, PR 3548)
  • Fix overload resolution for metaclass (Elazar Gershuni, PR 3511)
  • Allow instances of a class to access inner class definitions on that class (Roy Williams, PR 3636)
  • Fix to type checking calls to classmethods with self types (Elazar Gershuni, PR 3633)
  • Don't crash if isinstance() called with too few arguments (Jukka Lehtosalo, PR 3652)
  • Reject isinstance() with NewType (Jukka Lehtosalo, PR 3654)
  • Fix crash during deserialization of callable types (Jukka Lehtosalo, PR 3660)

Other Changes

  • Require version 1.0.4 of the typed-ast dependency to run mypy
  • Release version 0.3.0 of mypy_extensions
  • Publish a new mypy roadmap
  • The majority of the mypy implementation is now type checked using strict optional checking (Ivan Levkiskyi)


First of all, I’d like to thank my employer Dropbox for funding the mypy core team.

Thanks to all mypy contributors who contributed to this release:

  • Abhas Bhattacharya
  • Amir Rachum
  • Carl Meyer
  • Chad Dombrova
  • chernrick
  • Dominik Miedziński
  • Elazar Gershuni
  • Ethan Smith
  • fdeliege
  • Ivan Levkivskyi
  • Jelle Zijlstra
  • Jesse Lord
  • lincolnq
  • Max Moroz
  • Michael Lee
  • Nathaniel Smith
  • Patrick Williams
  • Roy Williams
  • Ryan Gonzalez
  • Svyatoslav Ilinskiy
  • Thomas Grainger

Additional thanks to all contributors to typeshed:

  • Alex Grönholm
  • Alex Khomchenko
  • amstree
  • Antoine Reversat
  • Ashwini Chaudhary
  • Ask Solem
  • Atul Varma
  • Benjamin Starling
  • Carl Meyer
  • Cooper Lees
  • Daniel Li
  • David Euresti
  • DmitriyS
  • Doug Freed
  • Eklavya Sharma
  • Elliot Marsden
  • elmar bucher
  • Emily Morehouse
  • Ethan Smith
  • George Caley
  • Harmen
  • Ivan Levkivskyi
  • James Elford
  • Jan Hermann
  • Jason Fried
  • Jelle Zijlstra
  • Joe Bateson
  • John Reese
  • khyox
  • li-dan
  • Luka Sterbic
  • Lukasz Langa
  • macheins
  • Mahmoud Afaneh
  • Matthew Page
  • Matthias Kramm
  • Matěj Cepl
  • Max Moroz
  • Max Rozentsveyg
  • Michael Lee
  • Miguel Gaiowski
  • mistermocha
  • mpage
  • Nathan Henrie
  • Peter Vilim
  • pkordas
  • Ray Kraesig
  • rchen152
  • Rhys Parry
  • Roy Williams
  • Ryan Jarvis
  • Sebastian Meßmer
  • Semyon Proshev
  • Sergey Passichenko
  • Suren Nihalani
  • Svyatoslav Ilinskiy
  • Teemu R
  • Thomas Grainger
  • Yusuke Miyazaki

— Jukka (on behalf of the rest of the mypy team: Guido, David and Greg)


  1. def translate(self, dx: float, dx: float) -> 'Point':

    Should read:

    def translate(self, dx: float, dy: float) -> 'Point':

  2. شركة تنظيف بالطائف بيت العز

    عزيزى العميل مع كثرة الشركات فى المملكة العربية السعودية ازدادت اهمية تميز افضل دشركة تنظيف بالطائفعن غيرها من الشركات لان مع الكثرة وانتشار شركات النظافة فالعملاء اصبحوا يتطلعون الى الافضل فى الخدمة والمناسبة فى الاسعار

    شركة تنظيف ستائر بالطائف
    شركة تنظيف شقق بالطائف
    شركة تنظيف سجاد بالطائف

    تنظيف فلل بالطائف
    شركة تنظيف فلل بالطائف
    تنظيف شقق واستراحات بالطائف
    شركة تنظيف شقق واستراحات بالطائف
    تنظيف اثاث المنازل بالطائف
    شركة تنظيف اثاث المنازل بالطائف
    تنظيف واجهات زجاج بالطائف
    شركة تنظيف واجهات زجاج بالطائف

  3. شركة مكافحة حشرات بالطائف بيت العز
    شركة مكافحة حشرات بالطائف قادره على القيام باعمال المكافحة والقضاء على اى نوع من الحشرات بالاعتماد على احدث الالات والماكينات التى تقوم بالوصول الى اصعب الاماكن التى من الممكن ان يتواجد بيها الحشرات
    شركة رش مبيدات بالطائف
    شركة مكافحة النمل الابيض بالطائف

    شركة مكافحة الفئران بالطائف
    مكافحة الفئران بالطائف

    شركة تنظيف خزانات بالطائف بيت العز

    مع شركة تنظيف خزانات بالطائف لا تبحث كثيرا هل ترغب فى الحصول على مياة نظيفة ونقية في منزلك اذن انت فى حاجة الى الاستعانة بافضل شركة غسيل خزانات بالطائف

    شركة عزل خزانات بالطائف

    شركة كشف تسربات بالطائف
    كشف تسربات بالطائف

  4. الفهد العربى ارخص شركات الشحن فهى تقدم خدماتها بين دول الخليج ومصر ودول مجلس التعاون العربى

    شركة شحن بري من مصر للسعودية
    شركة شحن من مصر الى السعودية
    شركة شحن
    شركة شحن دولى

  5. شركة تنظيف بمكة بيت العز

    بيت العز افضلشركة تنظيف بمكة من منا لايحلم بمكان نظيف وهادى ومرتب؟ من منا لا يفكر فى اعمال التنظيف؟ فلا تبحث كثيرا ولاتتردد الان انت تمتلك خدمه كامله فى التنظيف من الالف الى الياء فخدماتنا كامله متكامله فى التنظيف فنحن لدينا القدره على القيام بتنظيف البيارات وتنظيف الشقق والفلل والبيوت والمنازل والمكاتب والموكيت والارضيات والسجاد والوجهات الزجاجيه وغيرهم من التنظيف بالاعتماد على افضل طاقم عمل متخصص للقيام باعمال التنظيف ونوفر الالات التى تساعد فى القيام باعمال التنظيف على اكمل وجه بالاعتماد على افضل المنظفات المتعارف عليها ذات جوده عاليه فلا تتردد فى الاستعانه بـ افضلشركة تنظيف شقق بمكةفتاكد انك سوف تشعر بالفرق الواضح فى خدماتنا في بيت العزشركة تنظيف منازل بمكة
    شركة تنظيف سجاد بمكة

    شركة تنظيف فلل بمكة

    شركة مكافحة حشرات بمكة بيت العز

    بيت العز شركة مكافحة حشرات بمكةنقوم بالقضاء على كافة انواع الحشرات بافضل المبيدات الآمنة على الصحة فمؤسسة بيت العز افضلشركة رش مبيدات بمكة

    هل تعانى من وجود الحشرات؟ هل ياتى عليك فتره وتزداد كميه الحشرات المتواجده فى المكان؟ فالان مع بيت العز كافضل شركة مكافحه حشرات بمكة انت الان تمتلك اكبر الشركات التى تعمل فى خدمات المكافحه والتخلص من اى نوع من الحشرات نهائيا

    شركة مكافحة النمل الابيض بمكة
    شركة مكافحة العتة بمكة
    شركة مكافحة الفئران بمكة
    شركة مكافحة الصراصير بمكة

  6. شركة تنظيف خزانات بمكة بيت العز

    شركة تنظيف خزانات بمكةتساعدك على سلامة المياه من التلوث داخل خزان منزلك لان المياه تعتبر من اهم الاشياء التى لابد ان نعتنى بها فالان مع بيت العز كافضل شركة غسيل خزانات بمكة
    شركة عزل خزانات بمكة

    بيت العز شركة تنظيف بالبخار بمكة
    الكثير لا يعلمون انهم بكل سهولة يستطيعوا ان يقوموا بتنظيف منزلهم وهذا عن طريق استخدام البخار في التنظيف ويوجد ايضا العديد من المميزات نتيجة استخدام البخار في التنظيف ،بيت العز بمكة المكرمة افضل
    شركة تنظيف بالبخار بمكة
    شركة تنظيف سجاد بالبخار بمكة
    شركة تنظيف سجاد بمكة
    شركة تنظيف موكيت بمكة
    شركة تنظيف موكيت بالبخار بمكة
    شركة تنظيف مجالس بالبخار بمكة

  7. شركة تنظيف بالدمام الكمال اول بوابة الكترونية للصيانية المنزلية

    مع الكمال افضل شركة تنظيف بالدمام
    يسعدنا ان نقدم لكم خدمات التنظيف الشاملة وباقل الاسعار واعلى جودة فنحن شركة تنظيف شقق بالدمام

    شركة تنظيف منازل بالدمام

    تابعونا ستجدون لدينا خدمات مميزة واسعار تناسب الجميع

    هل تبغون شركة مكافحة حشرات ماهرة اليكم الكمال

    افضل شركة مكافحة حشرات بالدمام
    ولديها افضل المبيدات الحشرية فهى ارخص شركة رش مبيدات بالدمام

    وتقوم بمكافحة جميع انواع الحشرات فهى امهر شركة مكافحة النمل الابيض بالدمام

  8. فرسان المثالى افضل شركة كشف تسربات المياه بالدمام 0506070763

    من اكبر شركات كشف تسرب المياه بدون تكسير فرسان المثالى
    شركة كشف تسربات بالدمام
    شركة تنظيف خزانات بالدمام

    شركة عزل خزانات بالدمام
    شركة عزل اسطح بالدمام

    شركة عوازل الدمام
    شركات العزل المائي بالدمام
    شركات العزل الحراري بالدمام

    فرسان المثالى افضل شركة كشف تسربات المياه بالقطيف0506070763

    هل تعانى من تسرب المياه فلا داعى للقلق مع فرسان المثالى
    شركة كشف تسريبات المياه بالقطيف

    وباقل الاسعار ولنا خدمتنا بمدن اخرى
    شركة كشف تسربات بالاحساء
    شركة كشف تسربات المياه بالخبر

  9. فرسان المثالى افضل شركة تنظيف بالاحساء0506070763
    احصل على نظافة مثالية من فرسان المثالى افضل

    شركة تنظيف بالاحساء
    شركات النظافة بالاحساء
    شركة تنظيف فلل بالاحساء
    شركة تنظيف منازل بالاحساء
    شركة تنظيف بيوت بالاحساء
    شركة تنظيف شقق بالاحساء
    شركة تنظيف كنب بالاحساء
    شركة المثالية للتنظيف بالاحساء

    فرسان المثالى افضل شركة مكافحة حشرات بالقطيف0506070763
    مع فرسان المثالى افضل
    شركة مكافحة حشرات بالقطيف

    لا داعى للقلق بعد الان فى ستخلصك من جميع انواع الحشرات

    شركة رش مبيدات بالقطيف
    شركة مكافحة النمل الابيض بالقطيف