Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46e598cded | ||
|
|
ce130c4831 | ||
|
|
b6ac988601 | ||
|
|
c8dbbef8fc | ||
|
|
a974f167d1 | ||
|
|
2d3b3daf10 | ||
|
|
1d54c70164 | ||
|
|
6dafe32f6a | ||
|
|
3149d3610f | ||
|
|
f8f3bcfc36 |
9
.github/workflows/bundle_windows.yml
vendored
9
.github/workflows/bundle_windows.yml
vendored
@@ -23,11 +23,14 @@ jobs:
|
||||
contents: write
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.11"]
|
||||
python-version: ["3.12"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- name: Get history and tags for SCM versioning to work
|
||||
run: |
|
||||
git fetch --prune --unshallow
|
||||
git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
|
||||
14
.github/workflows/pypi_publish.yml
vendored
14
.github/workflows/pypi_publish.yml
vendored
@@ -16,18 +16,22 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Get history and tags for SCM versioning to work
|
||||
run: |
|
||||
git fetch --prune --unshallow
|
||||
git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.10"
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
python -m pip install --upgrade pip setuptools wheel build
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
- name: Build
|
||||
run: >-
|
||||
python setup.py sdist bdist_wheel
|
||||
python -m build
|
||||
# We do this, since failures on test.pypi aren't that bad
|
||||
- name: Publish to Test PyPI
|
||||
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
|
||||
@@ -36,6 +40,7 @@ jobs:
|
||||
user: __token__
|
||||
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
||||
repository_url: https://test.pypi.org/legacy/
|
||||
attestations: false
|
||||
|
||||
- name: Publish to PyPI
|
||||
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
|
||||
@@ -43,3 +48,4 @@ jobs:
|
||||
with:
|
||||
user: __token__
|
||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||
attestations: false
|
||||
|
||||
9
.github/workflows/pytest.yml
vendored
9
.github/workflows/pytest.yml
vendored
@@ -14,11 +14,14 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.10", "3.12"]
|
||||
python-version: ["3.12", "3.13"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- name: Get history and tags for SCM versioning to work
|
||||
run: |
|
||||
git fetch --prune --unshallow
|
||||
git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
|
||||
@@ -27,7 +27,7 @@ with low-level SL details. See the [Local Animation addon example](https://githu
|
||||
|
||||
### From Source
|
||||
|
||||
* Python 3.10 or above is **required**. If you're unable to upgrade your system Python package due to
|
||||
* Python 3.12 or above is **required**. If you're unable to upgrade your system Python package due to
|
||||
being on a stable distro, you can use [pyenv](https://github.com/pyenv/pyenv) to create
|
||||
a self-contained Python install with the appropriate version.
|
||||
* [Create a clean Python 3 virtualenv](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment)
|
||||
|
||||
@@ -46,7 +46,7 @@ class SchemaFieldSerializer(abc.ABC, Generic[_T]):
|
||||
class SchemaDate(SchemaFieldSerializer[dt.datetime]):
|
||||
@classmethod
|
||||
def deserialize(cls, val: str) -> dt.datetime:
|
||||
return dt.datetime.utcfromtimestamp(int(val))
|
||||
return dt.datetime.fromtimestamp(int(val), dt.timezone.utc)
|
||||
|
||||
@classmethod
|
||||
def serialize(cls, val: dt.datetime) -> str:
|
||||
@@ -54,7 +54,7 @@ class SchemaDate(SchemaFieldSerializer[dt.datetime]):
|
||||
|
||||
@classmethod
|
||||
def from_llsd(cls, val: Any, flavor: str) -> dt.datetime:
|
||||
return dt.datetime.utcfromtimestamp(val)
|
||||
return dt.datetime.fromtimestamp(val, dt.timezone.utc)
|
||||
|
||||
@classmethod
|
||||
def to_llsd(cls, val: dt.datetime, flavor: str):
|
||||
|
||||
69
pyproject.toml
Normal file
69
pyproject.toml
Normal file
@@ -0,0 +1,69 @@
|
||||
[build-system]
|
||||
requires = ["setuptools>=64", "setuptools-scm>=8"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "hippolyzer"
|
||||
dynamic = ["version"]
|
||||
description = "Analysis tools for SL-compatible virtual worlds"
|
||||
readme = "README.md"
|
||||
license = "LGPL-3.0-only"
|
||||
requires-python = ">=3.12"
|
||||
authors = [
|
||||
{ name = "Salad Dais", email = "83434023+SaladDais@users.noreply.github.com" },
|
||||
]
|
||||
classifiers = [
|
||||
"Operating System :: MacOS",
|
||||
"Operating System :: Microsoft :: Windows",
|
||||
"Operating System :: POSIX",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: Implementation :: CPython",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Topic :: Software Development :: Testing",
|
||||
"Topic :: System :: Networking :: Monitoring",
|
||||
]
|
||||
dependencies = [
|
||||
"aiohttp<4.0.0",
|
||||
"arpeggio",
|
||||
"defusedxml",
|
||||
"gltflib",
|
||||
"Glymur<0.9.7",
|
||||
"idna<3,>=2.5",
|
||||
"lazy-object-proxy",
|
||||
"llsd<1.1.0",
|
||||
"mitmproxy>=11.0.0,<12",
|
||||
"numpy<2.0",
|
||||
"outleap<1.0",
|
||||
"ptpython<4.0",
|
||||
"pycollada",
|
||||
"pyside6-essentials",
|
||||
"qasync",
|
||||
"recordclass>=0.23.1,<0.24",
|
||||
"transformations",
|
||||
"Werkzeug<4.0",
|
||||
]
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["."]
|
||||
include = ["hippolyzer*"]
|
||||
namespaces = false
|
||||
|
||||
[project.scripts]
|
||||
hippolyzer-cli = "hippolyzer.apps.proxy:main"
|
||||
hippolyzer-gui = "hippolyzer.apps.proxy_gui:gui_main"
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/SaladDais/Hippolyzer/"
|
||||
|
||||
[tool.black]
|
||||
line-length = 160
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "6.0"
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
|
||||
[tool.setuptools_scm]
|
||||
120
requirements.txt
120
requirements.txt
@@ -1,77 +1,81 @@
|
||||
aiohttp==3.9.2
|
||||
aioquic==0.9.25
|
||||
aiosignal==1.3.1
|
||||
aiohappyeyeballs==2.6.1
|
||||
aiohttp==3.11.18
|
||||
aioquic==1.2.0
|
||||
aiosignal==1.3.2
|
||||
appdirs==1.4.4
|
||||
argon2-cffi==23.1.0
|
||||
argon2-cffi-bindings==21.2.0
|
||||
Arpeggio==2.0.2
|
||||
asgiref==3.7.2
|
||||
attrs==23.2.0
|
||||
blinker==1.7.0
|
||||
asgiref==3.8.1
|
||||
attrs==25.3.0
|
||||
blinker==1.9.0
|
||||
Brotli==1.1.0
|
||||
certifi==2023.11.17
|
||||
cffi==1.16.0
|
||||
click==8.1.7
|
||||
cryptography==41.0.7
|
||||
dataclasses-json==0.6.3
|
||||
certifi==2025.4.26
|
||||
cffi==1.17.1
|
||||
click==8.2.0
|
||||
cryptography==44.0.3
|
||||
dataclasses-json==0.6.7
|
||||
defusedxml==0.7.1
|
||||
Flask==2.3.3
|
||||
frozenlist==1.4.1
|
||||
Flask==3.1.0
|
||||
frozenlist==1.6.0
|
||||
gltflib==1.0.13
|
||||
Glymur==0.9.6
|
||||
h11==0.14.0
|
||||
h2==4.1.0
|
||||
hpack==4.0.0
|
||||
hyperframe==6.0.1
|
||||
hpack==4.1.0
|
||||
hyperframe==6.1.0
|
||||
idna==2.10
|
||||
itsdangerous==2.1.2
|
||||
jedi==0.19.1
|
||||
Jinja2==3.1.3
|
||||
itsdangerous==2.2.0
|
||||
jedi==0.19.2
|
||||
Jinja2==3.1.6
|
||||
kaitaistruct==0.10
|
||||
lazy-object-proxy==1.10.0
|
||||
lazy-object-proxy==1.11.0
|
||||
ldap3==2.9.1
|
||||
llsd==1.0.0
|
||||
lxml==5.1.0
|
||||
MarkupSafe==2.1.3
|
||||
marshmallow==3.20.1
|
||||
mitmproxy==10.2.1
|
||||
mitmproxy_rs==0.5.1
|
||||
msgpack==1.0.7
|
||||
multidict==6.0.4
|
||||
mypy-extensions==1.0.0
|
||||
numpy==1.26.3
|
||||
outleap==0.6.1
|
||||
packaging==23.2
|
||||
parso==0.8.3
|
||||
lxml==5.4.0
|
||||
MarkupSafe==3.0.2
|
||||
marshmallow==3.26.1
|
||||
mitmproxy==11.1.3
|
||||
mitmproxy_linux==0.11.5
|
||||
mitmproxy_rs==0.11.5
|
||||
msgpack==1.1.0
|
||||
multidict==6.4.4
|
||||
mypy_extensions==1.1.0
|
||||
numpy==1.26.4
|
||||
outleap==0.7.1
|
||||
packaging==25.0
|
||||
parso==0.8.4
|
||||
passlib==1.7.4
|
||||
prompt-toolkit==3.0.43
|
||||
protobuf==4.25.1
|
||||
ptpython==3.0.25
|
||||
prompt_toolkit==3.0.51
|
||||
propcache==0.3.1
|
||||
ptpython==3.0.30
|
||||
publicsuffix2==2.20191221
|
||||
pyasn1==0.5.1
|
||||
pyasn1-modules==0.3.0
|
||||
pycollada==0.8
|
||||
pycparser==2.21
|
||||
Pygments==2.17.2
|
||||
pylsqpack==0.3.18
|
||||
pyOpenSSL==23.3.0
|
||||
pyparsing==3.1.1
|
||||
pyperclip==1.8.2
|
||||
PySide6-Essentials==6.6.1
|
||||
python-dateutil==2.8.2
|
||||
pyasn1==0.6.1
|
||||
pyasn1_modules==0.4.2
|
||||
pycollada==0.9
|
||||
pycparser==2.22
|
||||
Pygments==2.19.1
|
||||
pylsqpack==0.3.22
|
||||
pyOpenSSL==25.0.0
|
||||
pyparsing==3.2.1
|
||||
pyperclip==1.9.0
|
||||
PySide6_Essentials==6.9.0
|
||||
python-dateutil==2.9.0.post0
|
||||
qasync==0.27.1
|
||||
recordclass==0.18.2
|
||||
ruamel.yaml==0.18.5
|
||||
ruamel.yaml.clib==0.2.8
|
||||
service-identity==23.1.0
|
||||
shiboken6==6.6.1
|
||||
six==1.16.0
|
||||
recordclass==0.23.1
|
||||
ruamel.yaml==0.18.10
|
||||
service-identity==24.2.0
|
||||
setuptools==80.7.1
|
||||
shiboken6==6.9.0
|
||||
six==1.17.0
|
||||
sortedcontainers==2.4.0
|
||||
tornado==6.4
|
||||
transformations==2024.6.1
|
||||
tornado==6.4.2
|
||||
transformations==2025.1.1
|
||||
typing-inspect==0.9.0
|
||||
typing_extensions==4.9.0
|
||||
urwid-mitmproxy==2.1.2.1
|
||||
typing_extensions==4.13.2
|
||||
urwid==2.6.16
|
||||
wcwidth==0.2.13
|
||||
Werkzeug==2.3.8
|
||||
Werkzeug==3.1.3
|
||||
wsproto==1.2.0
|
||||
yarl==1.9.4
|
||||
zstandard==0.22.0
|
||||
yarl==1.20.0
|
||||
zstandard==0.23.0
|
||||
|
||||
@@ -10,3 +10,10 @@ universal = 1
|
||||
max-line-length = 160
|
||||
exclude = build/*, .eggs/*
|
||||
ignore = F405, F403, E501, F841, E722, W503, E741, E731
|
||||
|
||||
[options.extras_require]
|
||||
test =
|
||||
pytest
|
||||
aioresponses
|
||||
pytest-cov
|
||||
flake8
|
||||
|
||||
118
setup.py
118
setup.py
@@ -1,116 +1,6 @@
|
||||
"""
|
||||
Copyright 2008, Linden Research, Inc.
|
||||
See NOTICE.md for previous contributors
|
||||
Copyright 2021, Salad Dais
|
||||
All Rights Reserved.
|
||||
#!/usr/bin/env python3
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or (at your option) any later version.
|
||||
from setuptools import setup
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
"""
|
||||
|
||||
from os import path
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
here = path.abspath(path.dirname(__file__))
|
||||
|
||||
version = '0.15.2'
|
||||
|
||||
with open(path.join(here, 'README.md')) as readme_fh:
|
||||
readme = readme_fh.read()
|
||||
|
||||
setup(
|
||||
name='hippolyzer',
|
||||
version=version,
|
||||
description="Analysis tools for SL-compatible virtual worlds",
|
||||
long_description=readme,
|
||||
long_description_content_type="text/markdown",
|
||||
classifiers=[
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)",
|
||||
"Operating System :: MacOS",
|
||||
"Operating System :: POSIX",
|
||||
"Operating System :: Microsoft :: Windows",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: Implementation :: CPython",
|
||||
"Topic :: System :: Networking :: Monitoring",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Topic :: Software Development :: Testing",
|
||||
],
|
||||
author='Salad Dais',
|
||||
author_email='83434023+SaladDais@users.noreply.github.com',
|
||||
url='https://github.com/SaladDais/Hippolyzer/',
|
||||
license='LGPLv3',
|
||||
packages=find_packages(include=["hippolyzer", "hippolyzer.*"]),
|
||||
package_data={
|
||||
'hippolyzer': [
|
||||
'apps/message_builder.ui',
|
||||
'apps/proxy_mainwindow.ui',
|
||||
'apps/filter_dialog.ui',
|
||||
'apps/addon_dialog.ui',
|
||||
'lib/base/message/data/message_template.msg',
|
||||
'lib/base/message/data/message.xml',
|
||||
'lib/base/network/data/ca-bundle.crt',
|
||||
'lib/base/data/static_data.db2',
|
||||
'lib/base/data/static_index.db2',
|
||||
'lib/base/data/avatar_lad.xml',
|
||||
'lib/base/data/male_collada_joints.xml',
|
||||
'lib/base/data/avatar_skeleton.xml',
|
||||
'lib/base/data/LICENSE-artwork.txt',
|
||||
],
|
||||
},
|
||||
entry_points={
|
||||
'console_scripts': {
|
||||
'hippolyzer-gui = hippolyzer.apps.proxy_gui:gui_main',
|
||||
'hippolyzer-cli = hippolyzer.apps.proxy:main',
|
||||
}
|
||||
},
|
||||
zip_safe=False,
|
||||
python_requires='>=3.10',
|
||||
install_requires=[
|
||||
'llsd<1.1.0',
|
||||
'defusedxml',
|
||||
'aiohttp<4.0.0',
|
||||
# Newer recordclasses break!
|
||||
'recordclass>0.15,<0.18.3',
|
||||
'lazy-object-proxy',
|
||||
# requests breaks with newer idna
|
||||
'idna<3,>=2.5',
|
||||
# Needed for mesh format conversion tooling
|
||||
'pycollada',
|
||||
'transformations',
|
||||
'gltflib',
|
||||
# JP2 codec
|
||||
'Glymur<0.9.7',
|
||||
'numpy<2.0',
|
||||
|
||||
# Proxy-specific stuff
|
||||
'outleap<1.0',
|
||||
'arpeggio',
|
||||
# 12.x will be a major change.
|
||||
'mitmproxy>=11.0.0,<12',
|
||||
'Werkzeug<4.0',
|
||||
# For REPLs
|
||||
'ptpython<4.0',
|
||||
# These could be in extras_require if you don't want a GUI.
|
||||
'pyside6-essentials',
|
||||
'qasync',
|
||||
],
|
||||
tests_require=[
|
||||
"pytest",
|
||||
"aioresponses",
|
||||
],
|
||||
)
|
||||
if __name__ == "__main__":
|
||||
setup()
|
||||
|
||||
Reference in New Issue
Block a user