
Research
SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains
An emerging npm supply chain attack that infects repos, steals CI secrets, and targets developer AI toolchains for further compromise.
serializor
Advanced tools
Created to be used in a project, this package is published to github for ease of management and installation across different modules.
Install from PyPi
pip install serializor
Install from github
pip install git+https://github.com/AresJef/Serializor.git
This package is designed to serialize most of Python objects into <'bytes'>, and then deserializes them back to the original (or compatiable) object.
[Supports Timezone][Supports Timezone][1-4 dimemsional][Supports Timezone][Supports Timezone]The following result comes from benchmark:
method description rounds ser_time des_time total_time
serializor datetime.date 1,000,000 0.111606 0.054381 0.165986
serializor datetime.datetime 1,000,000 0.156439 0.058737 0.215176
serializor datetime.datetime.tz 1,000,000 0.279386 0.146563 0.425948
serializor datetime.time 1,000,000 0.130660 0.053886 0.184547
serializor datetime.timedelta 1,000,000 0.137054 0.058629 0.195683
serializor decimal.Decimal 1,000,000 0.151619 0.164718 0.316336
serializor native.None 1,000,000 0.029402 0.032072 0.061473
serializor native.bool 1,000,000 0.029300 0.032557 0.061856
serializor native.bytearray 1,000,000 0.163795 0.204271 0.368066
serializor native.bytes.ascci 1,000,000 0.090823 0.059227 0.150049
serializor native.bytes.utf-8 1,000,000 0.086925 0.063321 0.150246
serializor native.complex 1,000,000 0.340286 0.109108 0.449394
serializor native.float 1,000,000 0.148515 0.075095 0.223610
serializor native.int 1,000,000 0.126915 0.046609 0.173524
serializor native.memoryview 1,000,000 0.116604 0.062738 0.179342
serializor native.str.ascii 1,000,000 0.103631 0.065440 0.169071
serializor native.str.utf-8 1,000,000 0.119890 0.103121 0.223011
serializor np.bool_ 1,000,000 0.038970 0.032415 0.071385
serializor np.bytes_ 1,000,000 0.085287 0.056964 0.142251
serializor np.complex128 1,000,000 0.346779 0.104836 0.451615
serializor np.datetime64 1,000,000 0.108729 0.131430 0.240160
serializor np.float64 1,000,000 0.175410 0.076764 0.252173
serializor np.int64 1,000,000 0.144910 0.046478 0.191387
serializor np.int64 1,000,000 0.149947 0.062591 0.212537
serializor np.str_ 1,000,000 0.113398 0.066752 0.180150
serializor np.timedelta64 1,000,000 0.108617 0.120959 0.229576
serializor pd.Timedelta 1,000,000 0.102173 2.273358 2.375531
serializor pd.Timestamp 1,000,000 0.143575 1.037143 1.180718
serializor pd.Timestamp.tz 1,000,000 0.243033 2.138342 2.381375
serializor time.struct_time 1,000,000 1.443414 1.181920 2.625334
serializor native.dict[mixed] 100,000 0.166442 0.095385 0.261826
serializor native.frozenset[mixed] 100,000 0.086782 0.105518 0.192300
serializor native.list[mixed] 100,000 0.086708 0.049511 0.136219
serializor native.range 100,000 0.044731 0.018418 0.063149
serializor native.set[mixed] 100,000 0.088746 0.078731 0.167477
serializor native.tuple[mixed] 100,000 0.084207 0.050072 0.134279
serializor np.ndarray.bool.1dim 100,000 0.059088 0.038294 0.097381
serializor np.ndarray.bool.2dim 100,000 0.095351 0.055688 0.151039
serializor np.ndarray.bytes.1dim 100,000 0.067917 0.042592 0.110509
serializor np.ndarray.bytes.2dim 100,000 0.125669 0.061103 0.186772
serializor np.ndarray.complex128.1dim 100,000 0.101098 0.066359 0.167458
serializor np.ndarray.complex128.2dim 100,000 0.182839 0.114994 0.297833
serializor np.ndarray.datetime64.1dim 100,000 0.077447 0.062867 0.140315
serializor np.ndarray.datetime64.2dim 100,000 0.117511 0.081945 0.199457
serializor np.ndarray.float64.1dim 100,000 0.079962 0.043448 0.123410
serializor np.ndarray.float64.2dim 100,000 0.151705 0.062965 0.214670
serializor np.ndarray.int64.1dim 100,000 0.040866 0.040583 0.081449
serializor np.ndarray.int64.2dim 100,000 0.075535 0.057880 0.133414
serializor np.ndarray.object.1dim 100,000 0.120009 0.035457 0.155466
serializor np.ndarray.object.2dim 100,000 0.228742 0.055797 0.284538
serializor np.ndarray.timedelta64.1dim 100,000 0.078657 0.060962 0.139619
serializor np.ndarray.timedelta64.2dim 100,000 0.118687 0.079886 0.198573
serializor np.ndarray.unicode.1dim 100,000 0.032552 0.076028 0.108581
serializor np.ndarray.unicode.2dim 100,000 0.071057 0.116673 0.187730
serializor pd.DataFrame 10,000 0.241303 2.152159 2.393463
serializor pd.DatetimeIndex 10,000 0.012195 0.078967 0.091162
serializor pd.Series.bool 10,000 0.012649 0.107103 0.119751
serializor pd.Series.bytes 10,000 0.012066 0.097440 0.109506
serializor pd.Series.complex128 10,000 0.015063 0.112606 0.127668
serializor pd.Series.datetime64 10,000 0.172289 0.193961 0.366250
serializor pd.Series.float64 10,000 0.013266 0.180588 0.193854
serializor pd.Series.int64 10,000 0.009387 0.109114 0.118501
serializor pd.Series.object 10,000 0.017119 0.107831 0.124949
serializor pd.Series.timedelta64 10,000 0.013114 0.170046 0.183160
serializor pd.Series.unicode 10,000 0.013292 0.126546 0.139838
serializor pd.TimedeltaIndex 10,000 0.010394 0.060776 0.071169
import datetime
from decimal import Decimal
from zoneinfo import ZoneInfo
import numpy as np
import serializor
obj = {
"str": "Hello World!\n中国\n한국어\nにほんご\nEspañol",
"int": 1234567890,
"float": 3.141592653589793,
"bool": True,
"none": None,
"datetime": datetime.datetime(2012, 1, 2, 3, 4, 5, 6),
"datetime.tz1": datetime.datetime.now(ZoneInfo("CET")),
"datetime.tz2": datetime.datetime.now(
datetime.timezone(datetime.timedelta(hours=9))
),
"date": datetime.date(2012, 1, 2),
"time": datetime.time(3, 4, 5, 6),
"timedelta": datetime.timedelta(1, 2, 3),
"decimal": Decimal("3.1234"),
"complex": 2.12345 + 3.12345j,
"bytes": "Hello World!\n中国\n한국어\nにほんご\nEspañol".encode("utf-8"),
"datetime64": np.datetime64("2012-06-30 12:00:00.000000010"),
"timedelta64": np.timedelta64(-datetime.timedelta(1, 2, 3)),
"complex64": np.complex64(1 + 1j),
"complex128": np.complex128(-1 + -1j),
}
se = serializor.serialize(obj)
print(se)
b'D\x12s\x03strs3Hello World!\n\xe4\xb8\xad\xe5\x9b\xbd\n\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4\n\xe3\x81\xab\xe3\x81\xbb\xe3\x82\x93\xe3\x81\x94\nEspa\xc3\xb1ols\x03inti\n1234567890s\x05floatf\x113.141592653589793s\x04boolo\x01s\x04nonens\x08datetimez\x00\xdc\x07\x01\x02\x03\x04\x05\x06\x00\x00\x00s\x0cdatetime.tz1z\x01\xe8\x07\x08\x1f\x05/\x15\x11t\x0e\x00\x03CETs\x0cdatetime.tz2z\x02\xe8\x07\x08\x1f\x0c/\x15\x1at\x0e\x00\x00\x00\x00\x00\x90~\x00\x00\x00\x00\x00\x00s\x04dated\xdc\x07\x01\x02s\x04timet\x00\x03\x04\x05\x06\x00\x00\x00s\ttimedeltal\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00s\x07decimale\x063.1234s\x07complexc\x072.12345\x073.12345s\x05bytesb3Hello World!\n\xe4\xb8\xad\xe5\x9b\xbd\n\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4\n\xe3\x81\xab\xe3\x81\xbb\xe3\x82\x93\xe3\x81\x94\nEspa\xc3\xb1ols\ndatetime64M\n\n\x80V/\xc8d\x9c\x12s\x0btimedelta64m\t}\x1b\n\xe2\xeb\xff\xff\xffs\tcomplex64c\x031.0\x031.0s\ncomplex128c\x04-1.0\x04-1.0'
de = serializor.deserialize(se)
assert obj == de
print(de)
{'str': 'Hello World!\n中国\n한국어\nにほんご\nEspañol', 'int': 1234567890, 'float': 3.141592653589793, 'bool': True, 'none': None, 'datetime': datetime.datetime(2012, 1, 2, 3, 4, 5, 6), 'datetime.tz1': datetime.datetime(2024, 8, 31, 5, 47, 21, 947217, tzinfo=zoneinfo.ZoneInfo(key='CET')), 'datetime.tz2': datetime.datetime(2024, 8, 31, 12, 47, 21, 947226, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400))), 'date': datetime.date(2012, 1, 2), 'time': datetime.time(3, 4, 5, 6), 'timedelta': datetime.timedelta(days=1, seconds=2, microseconds=3), 'decimal': Decimal('3.1234'), 'complex': (2.12345+3.12345j), 'bytes': b'Hello World!\n\xe4\xb8\xad\xe5\x9b\xbd\n\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4\n\xe3\x81\xab\xe3\x81\xbb\xe3\x82\x93\xe3\x81\x94\nEspa\xc3\xb1ol', 'datetime64': numpy.datetime64('2012-06-30T12:00:00.000000010'), 'timedelta64': numpy.timedelta64(-86402000003,'us'), 'complex64': (1+1j), 'complex128': (-1-1j)}
SQLCyCli is based on the following open-source repositories:
FAQs
Serialization/Deserialization for Python native and NumPy/Pandas objects.
We found that serializor demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
An emerging npm supply chain attack that infects repos, steals CI secrets, and targets developer AI toolchains for further compromise.

Company News
Socket is proud to join the OpenJS Foundation as a Silver Member, deepening our commitment to the long-term health and security of the JavaScript ecosystem.

Security News
npm now links to Socket's security analysis on every package page. Here's what you'll find when you click through.