Ecosyste.ms: OpenCollective

An open API service for software projects hosted on Open Collective.

github.com/python/mypy

Optional static typing for Python
https://github.com/python/mypy

[mypyc] Add mypyc run tests for singledispatch (#10589)

Add some run tests to run-singledispatch.test for situations that are
likely to be common or ar...

9d92fbaab4d1c18991d71517a9981900ae60db25 authored over 3 years ago by pranavrajpal <[email protected]>
Fix callable instance variable support (#10548)

Fixes #708 and Fixes #5485

Prevent handling as bounded method of callable members declared as...

6ab0efcc2ae3bcf649098b86d1edbcab2e4b1e9b authored over 3 years ago by wyfo <[email protected]>
[mypyc] Add cleanup at end of init function (#10590)

This frees everything created in the generated initialization function
so that we don't leak me...

db7e335934cf1a48cc6fb20fc7fd268a86bb1ec9 authored over 3 years ago by pranavrajpal <[email protected]>
Add support for using xfail in test cases (#10635)

Add support for adding -xfail to the end of a test case in a .test file
to make pytest mark it ...

fe157d40cf11c5bd6398fe0bef99c8844ed3aedf authored over 3 years ago by pranavrajpal <[email protected]>
Sync typeshed (#10537)

Source commit:
https://github.com/python/typeshed/commit/c4da3757d7a513f6caf8924c59b6c16aed55c9...

7f921078882f1fcaba7c825f699c194aedf0af8a authored over 3 years ago by Shantanu <[email protected]>
Consider variance when joining generic types (#9994)

Co-authored-by: Shantanu <[email protected]>

9f6b3731367a975da84fa7a0e96ced46716b6e16 authored over 3 years ago by Adrian Freund <[email protected]>
stubgen: Don't annotate unknown argument and return types (#10626)

### Description

Don't annotate unknown argument and return types with explicit `Any`. Also, f...

55bd489ce5ef5ef7bb0e7d36742c9974893bd218 authored over 3 years ago by Sebastian Rittau <[email protected]>
Updates docs in 'checkexpr.py' and fixes a TODO (#10630)

While reading the source code of this file, I have noticed a `TODO` that was easy to fix.

e2010ccc2f039aa285b16695873faf136fe365dc authored over 3 years ago by Nikita Sobolev <[email protected]>
stubgen: never generate variable initializer (#10623)

Previously, the generation of a variable initialized (= ...) was
inconsistent between top-level...

8664adaf596c0c977e7de6712cbf43736d461603 authored over 3 years ago by Sebastian Rittau <[email protected]>
stubgen: Use NamedTuple class syntax (#10625)

### Description

Use `typing.NamedTuple` in stubgen, instead of `collections.namedtuple`.

#...

7e1eb3c67afa1365baa580de24e8756da5203721 authored over 3 years ago by Sebastian Rittau <[email protected]>
stubgen: Use PEP 604 instead of Optional (#10624)

1cad082fa0df9110c8860d989003fb36a3b49da5 authored over 3 years ago by Sebastian Rittau <[email protected]>
Support --install-types --non-interactive that doesn't prompt (#10616)

It also doesn't show errors, making it useful in CI jobs.

Example:
```
$ mypy --install-typ...

50800534029e2e7d8da86c971732dededd849cf2 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Remove misleading list of default locations (#10614)

The list of location in the second paragraph was missing pyproject.toml and the user config file...

0e6e2f99e3d06eacbedaff5e5411b6fd860d7044 authored over 3 years ago by Konstantin Weddige <[email protected]>
Don't suggest incompatible stub packages (#10610)

Keep track of supported Python versions of legacy bundled packages, and
only suggest a stub pac...

0095dc29b3b296925492c8a982f23b8e2afdc146 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix confusion between stubs for google.protobuf and google.cloud (#10609)

Previously we used `google` as a package prefix for `google.protobuf`.
That wasn't correct, sin...

83356aef8f42242e52212871d7c7510cf542ae73 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Bump version to 0.910+dev (#10607)

cd35d486e7fdea0addea086b57ac2679c8d71544 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Don't suggest installing types-pycrypto (#10603)

It doesn't exist, since it was removed from typeshed in October (python/typeshed#4606). Similarl...

d95f24ba2413e699d1d1cfde66fdb4176ee6dc95 authored over 3 years ago by Jelle Zijlstra <[email protected]>
[mypyc] Avoid crash when importing unknown module with from import (#10550)

Fixes mypyc/mypyc#851

This fixes a bug where code compiled with mypyc would crash on from imp...

7bb1f3718e9e527ea01feb11530af167721dc0b4 authored over 3 years ago by pranavrajpal <[email protected]>
[mypyc] Produce unimplemented errors on unsupported async features (#10595)

And avoid triggering mypy assertion failures on errors.

Fixes mypyc/mypyc#866.
Opened mypyc/...

40282036399d88ec93823e0047dd245fcd0ba940 authored over 3 years ago by Michael J. Sullivan <[email protected]>
[mypyc] Fix evaluation of iterable in list comprehension twice (#10599)

This could result in a crash if the second evaluation results
in a shorter list, such as in thi...

e37dfb126ee03fff92c66d5fc55d82befb750163 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
[mypyc] Add 'range' primitive type (#10307)

Closes mypyc/mypyc#770.

0a6a48c4278f99417fe81f7d3f0194edeaec7e46 authored over 3 years ago by 97littleleaf11 <[email protected]>
[mypyc] Fix relative imports in `__init__.py`s (#10543)

Fixes mypyc/mypyc#842

0af616e936563cc7f5861e88348daaa3654b7c0c authored over 3 years ago by James <[email protected]>
[mypyc] Fix segfault when top level raises exception (#10586)

If an error occurs while running the initialization code, set the
CPyModule_<name>_internal mod...

8d73d6ed6a3412f9695f628091d61e9abba2b6af authored over 3 years ago by pranavrajpal <[email protected]>
[mypyc] Only allow deleting attributes declared using __deletable__ (#10524)

Native classes now must declare attributes that can be deleted.

This improves type safety and...

b562cc235dcd2e71d2fed1aad72a4a8400bc307d authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Make ignore_missing_imports work for libs which had bundled stubs (#10582)

It has to be specified as a per-module option, if the library used
to have bundled stubs. This ...

4642a31bdd437edc2ebe788cc6deb3214f06d997 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Restrict the number of errors shown when there are missing stubs (#10579)

When upgrading to mypy 0.900, most projects will see some errors about
missing stubs. Projects ...

159f382fe39f96098f92b12ef6241a44c45f3804 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Include typeshed LICENSE (#10578)

4e2fca8ff8a384a3e7c29f3ca861c8ea34af4362 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Convert MessageBuilder.disable_errors to a context manager (#10569)

28718facbeea5b3c33ec96bc335bb018d3b0a395 authored over 3 years ago by Ilya Konstantinov <[email protected]>
Unreachable expressions: treat non-zero ints as truthy (#10562)

8853f226498a910556a46e0a201198c7a1413ac1 authored over 3 years ago by Ilya Konstantinov <[email protected]>
Improve pytest quality of life (#10567)

98ac4874f84dc83e0b9845ef10b73c1799111a7a authored over 3 years ago by Ilya Konstantinov <[email protected]>
Fix typo in config_file.rst (#10568)

e702679ede667b8ea48685326a2ca54b3c95fdd2 authored over 3 years ago by wwuck <[email protected]>
Mention fullname of PlaceholderNode in assertion (#10565)

Helps with #10542

Co-authored-by: Shantanu <[email protected]>
...

4da09c7d0317a78963c4a1aac1f437d7de8cf814 authored over 3 years ago by Adam Weeden <[email protected]>
rename STUBS_NOT_INSTALLED to APPROVED_STUBS_NOT_INSTALLED (#10558)

Since this code path involves mypy recommending installation of a stub
package, I thought I'd r...

0635422c5d707f2713e7ba8715b4dd7f8091557d authored over 3 years ago by Shantanu <[email protected]>
Add security documentation for --install-types (#10555)

Resolves #10538

d57d5d146483df5304d3553c14c9b97d4f62ade6 authored over 3 years ago by Adam Weeden <[email protected]>
[mypyc] Emit native_int instead of int64/int32 in IR test output (#10446)

Fixes mypyc/mypyc#776.

This is a super quick workaround. So far the issue mostly (if not comp...

61c346230cf4960c9766f7c2b5bd3312b47f74da authored over 3 years ago by Xuanda Yang <[email protected]>
[mypyc] Modify specializers and add int.__pow__ in test-data/fixture (#10448)

* Move simple tuple and list creation to new functions. Each specializer only
focus on one s...

7780482965c653844fb6dbfa5659b2361645f298 authored over 3 years ago by 97littleleaf11 <[email protected]>
Update copyright year in LICENSE (#10473)

799e40c01221ebbbab8977680a00d7b79aad6e13 authored over 3 years ago by Saiprasad Kale <[email protected]>
Move mypy_extensions stubs to typeshed/stubs/mypy-extensions (#10527)

This fixes `--custom-typeshed-dir`.

8628fa0b842162b03621e56fbf4fe337a3fd50c8 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Double quotes in errors messages (#10525)

b633ae123b816e45058853d42bbd9a1f82af1a23 authored over 3 years ago by Dixith <[email protected]>
stubgenc: type check for getattr changes (#10523)

https://github.com/python/typeshed/pull/5516 makes changes to getattr
that would introduce type...

015543adfe5addad3119e10f4c85512b0c6287ab authored over 3 years ago by Shantanu <[email protected]>
Fix crash on TypeGuard plus "and" (#10496)

In python/typeshed#5473, I tried to switch a number of `inspect` functions to use the new `TypeG...

8e909e438e39b3bb4dc488dd8d78f0e721e81ae7 authored over 3 years ago by Jelle Zijlstra <[email protected]>
Double quotes in errors `Source file found twice`, `Duplicate module named`, `Setting "strict" not supported`, `bound by an outer class` and `cannot subclass` (#10513)

de6fd6a462282e7ba35506e74c3e22918d0f63e9 authored over 3 years ago by Dixith <[email protected]>
Use double quotes in error messages (#10511)

Changes the messages "Inconsistent use of * in function", "is a type variable and only valid in ...

eb6f09288625dcc147db51939dfaa524be67fc0a authored over 3 years ago by Dixith <[email protected]>
Port over latest GA mypy_primer changes (#10505)

This is mostly the same as typeshed. The biggest difference is that we
don't post the "no effec...

c3a600b4c827c4ba1749c4042c2f63da05f9ee5f authored over 3 years ago by Shantanu <[email protected]>
Don't suggest --install-types in daemon mode (#10508)

It doesn't work with mypy daemon.

Fixes #10015.

1e220b107db1868b3b039cf9299bfceba8046741 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Include stubs for mypy_extensions in bundled typeshed (#10507)

Also don't install a stub package for `mypy_extensions`.

There are two reasons why we're doin...

58aef054dccb1b49acd1f6769ac2a18c2525dd63 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix spurious name undefined error in class body within import cycle (#10498)

This could sometimes happen with protobuf stubs. The issue is a quite
tricky one, since it only...

7f2377e15d1feb9bbb1fde7728b5856080962890 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Remove assertion from TypeGuard serialization (#10486)

This came up in python/typeshed#5473: mypy started crashing when
I made a function return TypeG...

02e016f29e1a0da8b5654871fc38f3f1908d148b authored over 3 years ago by Jelle Zijlstra <[email protected]>
Do not allow to use Final and ClassVar at same time (#10478)

c605579af8c2a315f0b9fce40c7c61dd21610f1f authored over 3 years ago by Yurii Karabas <[email protected]>
Sync typeshed (#10495)

Source commit:
https://github.com/python/typeshed/commit/17bc1d83ea5ba4c3fb8363259993047727caf6...

675ae1afc8a5b0a9a515292c7e9d6bc2a38887be authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Empty commit to trigger builds

0ce3eb95ad586969a69aa124b8392a4e0b41d73f authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Allow running mypy if Python 2 typeshed stubs aren't installed (#10494)

This enables custom mypy configurations where only Python 3 is supported.

329e61507da2011b085738a825974433d09f0c6a authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Use double quotes in errors (#10491)

Part of #7445

fa1931dbdba285456cf8efe55eb8699ac206b4ba authored over 3 years ago by Dixith <[email protected]>
mypy_primer: fix comment permissions (#10476)

Port #5452
We didn't have the global permission set, so maybe it wasn't broken, but
explicitly...

8642b351cff94c471333256f9cd6867807384f01 authored over 3 years ago by Shantanu <[email protected]>
mypy_primer: use 'needs: mypy_primer' for comment job (#10474)

030d6614da879aa4d42dc89d9b7881a86cfaa91d authored over 3 years ago by Akuli <[email protected]>
Allow inline comments in VERSIONS (#10472)

0d5a1dfde9af766bf7523de2a5a520a5d786bb2a authored over 3 years ago by Sebastian Rittau <[email protected]>
[mypyc] Support __setitem__, __delitem__, __len__ and __contains__ (#10451)

Previously these couldn't be used in compiled classes.

__setitem__ and __delitem__ are implem...

5a105d1ffae0f005ad3cb6d975a5edf31155f529 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix several typos (#10460)

6fac70122c177340d1a1a49747ba244d13a29efd authored over 3 years ago by Arjun <[email protected]>
Fix typos in comments (#10459)

bc8565fee7e38bcb2cdd6a48ddc924ef09b87f54 authored over 3 years ago by Arjun <[email protected]>
Infer unreachability for await no_return() (#10458)

Fixes #10454

The logic here is similar to what we do in visit_call_expr_inner

5eb4de443269b906d2e8b2292dbf472ce17d0e1f authored over 3 years ago by Shantanu <[email protected]>
Fix unresolved reference + tuples crashing (#10401)

466017dab694fd87b7ab2d89475259a7004f589e authored over 3 years ago by EXPLOSION <[email protected]>
Fix “they is” typo in Final docs (#10453)

551eea3697d0740838aa978b2a61e6f7e771c3e2 authored over 3 years ago by Philip Jägenstedt <[email protected]>
[mypyc] Support multiple specializers (#10433)

Closes mypyc/mypyc#832

3cbcad0771a244031787c57231acb2bff39c3974 authored over 3 years ago by 97littleleaf11 <[email protected]>
[mypyc] Add missing header declaration for CPyStr_IsTrue (#10440)

Also add test that will find things missing in headers, as long as they follow
our naming conve...

e8afde621531880c2b9c51acba8e565a29cde0b1 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Sync typeshed (#10435)

Source commit:
https://github.com/python/typeshed/commit/97101b1d2c8cc7836c18668dc6f92a804511e8...

ce981182cf4159e000cf4e9b4dfe72b812df0174 authored over 3 years ago by Shantanu <[email protected]>
Fix crash with type alias inside __init__ in incremental mode (#10432)

Don't create `TypeAliasType` for aliases defined within functions,
since the target can't be lo...

0964d9e65b2c6a341fe5fc8120240f832b95e9c3 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix crash with nested NamedTuple in incremental mode (#10431)

The name of the nested tuple type was inconsistent. Sometimes if was stored
using the full name...

389a1725c1df7fad4e2605360157c9f910cb502c authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix crash related to module-level __getattr__ in incremental mode (#10430)

The `from_module_getattr` attribute of `Var` was not serialized, so
subsequent runs didn't know...

4a5e311d229d038b9801a6b8d3b0119b474f1136 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Add support for functools.cached_property (#10408)

Add support for functools.cached_property decorator:
https://docs.python.org/3/library/functool...

204c7dada412b0ca4ce22315d2acae640adb128f authored over 3 years ago by Marc Mueller <[email protected]>
Add support for pulling configuration from pyproject.toml files (#10219)

Closes #5205.

This PR will add support to mypy for end users specifying configuration in
a ...

fdeedd6f561880bde312fef81b86d44a8cca0628 authored over 3 years ago by Adam Weeden <[email protected]>
Add tests for make_simplified_union (#10397)

This commit adds tests for make_simplified_union, including the new functionality
added in #10...

fbf6fe4f4c0458e8b4a9b5c31d5db7b21e28b40b authored over 3 years ago by Adrian Freund <[email protected]>
Don't narrow Type[X] with a metaclass (#10424)

We could narrow `Type[T]` to `<nothing>` when tested against a
metaclass, which is not useful. ...

6d2635d21050a406f785cf9c7a6b8a9253d9be07 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Don't use Python 3 stdlib stubs in Python 2 mode (#10422)

Previously we could find stubs both in `stdlib/@python2` and
`stdlib` for the same top-level pa...

4518b55663bc689646280a0ab2247c4a724bf3c0 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Remove note: setup.cfg *does* need [mypy] section (#10364)

As per #9940, a [mypy] section is now required in setup.cfg in order for config to be loaded fro...

b484c6d341464d750467c9c318d855e5b6bfd398 authored over 3 years ago by James Cooke <[email protected]>
Fix typo “a cases” in kinds_of_types.rst (#10420)

95a267167dca6dd5072e4f4d02db4a4ba54f5488 authored over 3 years ago by Philip Jägenstedt <[email protected]>
Fix inference of IntEnum value attribute type (Python 2) (#10417)

The enum stubs for Python 2 are slightly different from Python 3.
The fix in #10412 didn't quit...

e4bf52675251c5078a8ba3a9d2d446f51628a122 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix TypedDict test case on Python 3.5 (#10418)

Class-based TypedDict syntax requires Python 3.6+.

b8c8833a8029492211b816d9261fcf2fb4e89ce6 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Don't report error when using total_ordering in Python 2 mode (#10416)

Even if the plugin doesn't work yet, generating an error is a
regression. The decorator used to...

ed6d7d10c921aec030d78cc1f43e86d430fbd637 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix narrowing down TypedDict unions with enum literal types (#10415)

A union of enum literals was merged back to the enum type, which broke
type narrowing. Disable ...

0729345b15576884ae79552995de6d3209b99e86 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix inference of IntEnum value attribute type (#10412)

If the enum value initializer has a NewType type, it should be
reflected in the type of the `va...

b17e33fd14bb2fe3453810adf1848984e209aa59 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Use typeddict-item error code for more errors (#10410)

Previously this was inconsistent, and some TypedDict operations used
the 'misc' error code, whi...

a8a8a5252238a75e8fcde72136fa5c1e6c887556 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix a bunch of test broken by python 3.10 (#10404)

Python 3.10 changes a bunch of parser error messages. This commit
introduces the version>= argu...

42e2bb47966c72cbb97d2afc518a7d37079debff authored over 3 years ago by Adrian Freund <[email protected]>
Support max version marker of stdlib typeshed modules (#10402)

* Support max version marker of stdlib typeshed modules

* Support '2.7-' VERSIONS format

8bc1115a7469ac4702d29da87acf5831c696d007 authored over 3 years ago by Sebastian Rittau <[email protected]>
Fixed a teststubtest test failing in python 3.10 (#10406)

194873d06491ea49233d87422dbc7b934ef4338a authored over 3 years ago by Adrian Freund <[email protected]>
First look into @python2 subdirectory of search path items in Python 2 mode (#10392)

When using `mypy_path` or `MYPYPATH`, allow storing Python 2 only stubs and
source files under ...

44925f4b121392135440f53d7c8a3fb30593d6cc authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Make enum type compatible with union of all enum item literals (#10388)

For example, consider this enum:

```
class E(Enum):
A = 1
B = 1
```

This PR ma...

322ef60ba7231bbd4f735b273e88e67afb57ad17 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix make_simplified_union for instances with last_known_value (#10373)

This fixes make_simplified_union if multiple instances of the same type but
with different las...

7189a23994c0687344e3ca8ab627ff707eb69f11 authored over 3 years ago by Adrian Freund <[email protected]>
Sync typeshed (#10383)

Source commit:
https://github.com/python/typeshed/commit/8bd3e16eef2737562be5351ea38f7d34d73acad5

3c916477d8925fe2c3db395eeb4d11a0cce606ab authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix re-exporting __all__ in a stub file (#10382)

Propagate the value of `__all__` from the imported module.

Fixes #10381.

e14cb14d6770095b0088b04df9432eb533ecc78c authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Fix documentation style (#10378)

Change the documentation style for the arguments to
find_type_equals_check to be closer to what...

352b0a9954fc845b71042ec59b0e763d6c73a7f4 authored over 3 years ago by pranavrajpal <[email protected]>
[mypyc] Pre-allocate space in list comprehensions (#10295)

Allocate a correctly sized list instead of appending to an initially empty list
in many list co...

5f05bf56bbedac3299fb70242f20a13e334fd85e authored over 3 years ago by 97littleleaf11 <[email protected]>
stubtest: improve build error messages (#10365)

Make it clearer that we didn't actually run the core stubtest logic

Co-authored-by: hauntsani...

66c2ac516305f194a9bc37c1ebf7f22d62d6141c authored over 3 years ago by Shantanu <[email protected]>
Run self check with Python 3.6 (#10363)

0643b48757e1248d3676e933679434a82dc36a1b authored over 3 years ago by Sebastian Rittau <[email protected]>
Extend the dataclass plugin to deal with callable properties (#10292)

At runtime, the callable properties of dataclasses are handled in the
way one would expect: the...

3996f433e5efec57cfa6176256733b553109cd1c authored over 3 years ago by Aaron Ecay <[email protected]>
[mypyc] Basic support for class-based named tuples (#10252)

Not all possible variants are tested, but at least simple things work.

Fixes mypyc/mypyc#719.

8c82dac571e8ed730e6a551eea1aee69865b39a9 authored over 3 years ago by Jukka Lehtosalo <[email protected]>
Use Python 3.9 for mypy self check (#10362)

Using obsolete Python 3.5 breaks typeshed's execution of mypy's self
check, as typeshed does no...

0603ae44f3a38168e5974d66fb3c8e9e1bedd241 authored over 3 years ago by Sebastian Rittau <[email protected]>
Use double quotes in errors related to NewType, TypeVar, namedTuple and TypedDict (#10359)

* NewType related errors and Cannot redefine

* TypeVar related

* namedTuple - First argume...

d326952f88214b36d302c7fcbc92320b3c68fa18 authored over 3 years ago by Dixith <[email protected]>
[mypyc] Faster dict true test (#10333)

Closes mypyc/mypyc#768.

bdcc5621d7a2f5124382662272d1be8476ec90fe authored over 3 years ago by 97littleleaf11 <[email protected]>
TypedDict incompatible type message more understandable (#10326)

Added a section to the incompatible_argument function in mypy.messages that is executed when try...

09bf2500bb6326c56a82b7559e1114d42bcec846 authored over 3 years ago by Akshay K <[email protected]>
TypedDict key (#10352)

dd16ba3cd1306a6a209e6675804324411b004398 authored over 3 years ago by Dixith <[email protected]>