Skip to content

Conversation

aditya0yadav
Copy link

What is the purpose of the change

ISSUE: #issue_number

Brief changelog

Verifying this change

Checklist

  • Make sure there is a GitHub_issue field for the change (usually before you start working on it). Trivial changes like typos do not require a GitHub issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
  • Each commit in the pull request should have a meaningful subject line and body.
  • Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist.
  • Add some description to dubbo-website project if you are requesting to add a feature.
  • GitHub Actions works fine on your own branch.
  • If this contribution is large, please follow the Software Donation Guide.

@aditya0yadav
Copy link
Author

Pull Request Summary

This pull request includes the complete implementation based on previous discussions and feedback. It also incorporates suggestions from @cnzakii, who has been mentoring and guiding the direction.

🔑 Key Highlights

  • ✅ Introduced support for advanced types such as frozenset, datetime, UUID, and more.
  • ⚙️ Added handling for params_types and return_type for better control over serialization.
  • 🔁 Improved codec design to ensure compatibility with various complex data structures.
  • 🧪 Added realistic test data for broader type coverage:
self.users_db = [
    User(
        id=1,
        name="Alice",
        email="[email protected]",
        age=30,
        login_history=[
            LoginRecord(timestamp=datetime.utcnow() - timedelta(days=1), ip_address="192.168.1.10"),
            LoginRecord(timestamp=datetime.utcnow(), ip_address="192.168.1.11")
        ],
        meta=UserMeta(tags=frozenset(["admin", "beta"]), scores=(88, 92, 85))
    ),
    User(
        id=2,
        name="Bob",
        email="[email protected]",
        age=25,
        login_history=[
            LoginRecord(timestamp=datetime.utcnow() - timedelta(hours=2), ip_address="192.168.1.20")
        ],
        meta=UserMeta(tags=frozenset(["tester"]), scores=(75, 80, 70))
    )
]

@aditya0yadav
Copy link
Author

@cnzakii check this out

@aditya0yadav
Copy link
Author

@cnzakii in this repo i have a code from which i run the server and client
https://github.com/aditya0yadav/gsoc-test-file


from typing import Any, Callable, Optional, Union,Type
from abc import ABC, abstractmethod
from pydantic import BaseModel
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This place will still cause strong dependency on pydantic

arg_serialization=(request_serializer, None),
return_serialization=(None, response_deserializer),
rpc_type=RpcTypes.CLIENT_STREAM.value,
"""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also hope to see the implementation on the server side

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cnzakii
If you don't mind can you explain me about this

like most of the work of server can be handle by the rpc handler

or
Am i missing something ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can review the proposal I sent in Slack, which also contains the corresponding Server interface design. You should also implement the construction method descriptors on the Server side, select the serialization method, and so on.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok
Now i understand
Thx for clarification

@aditya0yadav
Copy link
Author

@cnzakii
ok
Let me resolve them

@cnzakii
Copy link
Member

cnzakii commented Jul 10, 2025

@aditya0yadav While it lacks some generality, the overall work is good. Please make optimizations based on my comments, complete the remaining tasks, and submit the relevant code.

@aditya0yadav
Copy link
Author

aditya0yadav commented Jul 10, 2025

@cnzakii ok sir
based on your comment , I will optimize the code
Thanks for the depth review

@aditya0yadav
Copy link
Author

@cnzakii, then there's no need for an RPC method handler, right?
Should I encapsulate and abstract the RPC method handler inside server.py's handler, or create something new similar to how it's done on the client side?

@aditya0yadav
Copy link
Author

@cnzakii
I fixed the error
Please take a look

@aditya0yadav aditya0yadav changed the title gsoc pull request containing json serialization handler gsoc containing json serialization handler and dubbo codec Jul 22, 2025
@aditya0yadav
Copy link
Author

@cnzakii Please check out the pull request , sir

@cnzakii
Copy link
Member

cnzakii commented Aug 25, 2025

Okay, I'll do a code review as soon as I can.

@cnzakii
Copy link
Member

cnzakii commented Aug 25, 2025

Quick View: missing Test, please supplement.

@aditya0yadav
Copy link
Author

@cnzakii,

Hi sir

I wanted to share a quick update. This project still requires Hessian integration, and until that is added, there is more work to be done. I plan to continue working on this project after GSoC, focusing on Hessian integration and fixing additional bugs in the system.

Thank you,
Aditya

@aditya0yadav
Copy link
Author

@cnzakii
Hi Sir,
I have completed the Hessian serialization using both pyhessian and manual serialization.
However, I am facing one problem: Hessian does not support advanced data structures like frozenset.

@aditya0yadav
Copy link
Author

@cnzakii
Sir,
Base Level hessian is completed
I need your suggestion on this one

Please take a look at this

@aditya0yadav
Copy link
Author

@cnzakii done

Copy link
Member

@cnzakii cnzakii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please carefully review my comments and either address the issues I raised or clearly respond in the comments explaining why no changes are made.

@aditya0yadav
Copy link
Author

@cnzakii Please review this. I refactored the JSON and Protobuf code into multiple modules, using the Extension Loader to manage and call the appropriate handlers.

JSON:

Multiple type handlers are now supported via the Extension Loader.

The system will use ujson or orjson depending on availability and performance.

Protobuf:

If the user is using BetterProto or Google Protoc, the correct message handler will be automatically inferred and used.

This is also managed through the Extension Loader, so no manual intervention is needed.

@aditya0yadav
Copy link
Author

@cnzakii Please check it out

@aditya0yadav
Copy link
Author

aditya0yadav commented Sep 6, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants