Descriptor Protocol
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- javascript, python
- Domain
- compilers
Research direction
Start with the proposed py_metatype.new override and its surrounding pragma('js') block in the issue. The payload names no repository file or test, so locating the compiler/runtime integration and defining coverage for the listed descriptor limitations will require project familiarity. Done means descriptor access and assignment work as described without breaking existing behavior.
Written by the indexing model from the issue text.
Description
This is a little bit of a patch (hack) I apply to allow the use of the descriptor protocol (or, most of it). Descriptors are really useful for reactive UI design, and easy to implement in a way that shares sensibilities with Transcrypt's implementation of properties. The readme suggested I start by raising the idea as an issue, so I didn't bother reworking it as a pull request that modifies the code-base directly. Hope this is interesting and doesn't wreck anything fundemental.
"""
Add the descriptor protocol to `py_metatype`.
Limitations:
- `__delete__` is not supported.
- Assigning a new value to an attribute that is a set operation on a class
will not replace the descriptor (much like Transcrypt's `@property`).
- Cannot access descriptor instance using `vars` (`vars` is not supported).
- Missing `__get__` or `__set__` are noop (much like Transcrypt's
`@property`).
"""
__pragma__('js', '{}', '''
(function(undefined) {
function _get_function(descriptor) {
return function() {
if(this.hasOwnProperty('__class__')) {
return descriptor.__get__(this, py_typeof(this))
} else {
return descriptor.__get__(null, this)
}
};
}
function _set_function(descriptor) {
return function(value) {
if(this.hasOwnProperty('__class__')) {
descriptor.__set__(this, value);
}
};
}
const _py_metatype_new = py_metatype.__new__;
py_metatype.__new__ = function (meta, name, bases, attributes) {
const new_type = _py_metatype_new(meta, name, bases, attributes);
for(const attribute in attributes) {
const descriptor = new_type[attribute];
if(
descriptor &&
descriptor.hasOwnProperty('__class__') &&
(descriptor.__get__ || descriptor.__set__)
) {
const data = { enumerable: true };
if(descriptor.__get__) {
data.get = _get_function(descriptor);
}
if(descriptor.__set__) {
data.set = _set_function(descriptor);
}
Object.defineProperty(new_type, attribute, data);
if(descriptor.__set_name__) {
descriptor.__set_name__(new_type, attribute);
}
}
}
return new_type;
};
})();
''')
- Dominant language
- Python
- Stars
- 2.9k
- Forks
- 218
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from TranscryptOrg/Transcrypt
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
TranscryptOrg/Transcrypt#913 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
TranscryptOrg/Transcrypt#911 · 2 comments ·
-
IS: bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
TranscryptOrg/Transcrypt#908 ·
-
SUB: documentation
Difficulty 1/5 Under an hour Newbie friendliness 62/100
TranscryptOrg/Transcrypt#656 · 7 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 76/100
TranscryptOrg/Transcrypt#914 ·
All issues in TranscryptOrg/Transcrypt
Similar issues
-
area/auth bug comp/agent P3 platform/discord type/security
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
NousResearch/hermes-agent#117848 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
bancolombia/sentinel#23 ·
-
test md OpenCI
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulty 2/5 1-3 hours Newbie friendliness 88/100