installation
pyjiit 0.1.0a8 on Python 3.9 or newer. Poetry for contributors. First call: Quick start guide.
PyPI#
pip install pyjiit
That installs:
| Dist | Constraint | Role |
|---|---|---|
pyjiit |
0.1.0a8 |
Client |
requests |
>=2.32.3,<3.0.0 |
HTTP |
pycryptodome |
>=3.22.0,<4.0.0 |
AES-CBC |
flowchart LR Pip["pip install pyjiit"] --> Wheel["pyjiit 0.1.0a8"] Wheel --> R["requests"] Wheel --> C["pycryptodome"]
Check the import:
from pyjiit import Webportal
from pyjiit.init import __version__
print(__version__) # 0.1.0a8
print(Webportal()) # Driver Class for JIIT Webportal
__version__ lives in pyjiit/init.py, not __init__.py. __init__.py only imports Webportal.
Virtualenv#
python3 -m venv .venv
source .venv/bin/activate
pip install pyjiit
On Windows, run .venv\Scripts\activate.
From git#
Fork used for these docs:
git clone https://github.com/tashifkhan/pyjiit.git
cd pyjiit
pip install .
Upstream:
git clone https://github.com/codelif/pyjiit.git
pyproject.toml [project.urls] still lists https://github.com/codelif/pyjiit.
Poetry (maintainers)#
pip install poetry
poetry install
Runtime deps only. Docs extra:
poetry install --with docs
That pulls Sphinx >=7.4.7 and Furo ^2024.8.6 from [tool.poetry.group.docs.dependencies]. Build backend is poetry.core.masonry.api.
flowchart TB
subgraph users [Users]
P["pip install pyjiit"]
end
subgraph devs [Maintainers]
Po["poetry install"]
Docs["poetry install --with docs"]
end
P --> Runtime["requests, pycryptodome"]
Po --> Runtime
Docs --> Sphinx["sphinx, furo"]
Docs --> RuntimeConstraints that bite#
- Python older than 3.9 fails
requires-python. pycryptodomeis notpycrypto. README.rst says the pin is explicit.- Docs are RST, not Markdown. There is no
README.md. docs/requirements.txtonly pinsfuro==2024.8.6. CI uses Poetry’s docs group instead.
Network#
Every live call needs https://webportal.jiit.ac.in:6011. Campus or home, TLS on 6011 has to work. The client does not pin certificates beyond what requests does.
Verify#
from pyjiit import Webportal
from pyjiit.default import CAPTCHA
from pyjiit.encryption import generate_key, generate_local_name
assert generate_key() # 16 bytes for today
assert generate_local_name()
w = Webportal()
# student_login needs real credentials
If from pyjiit import WebPortal fails, that is expected. The class name is Webportal.