Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting "ValueError" error while connecting to client #187

Open
apurvkulkarni7 opened this issue Mar 25, 2024 · 4 comments
Open

Getting "ValueError" error while connecting to client #187

apurvkulkarni7 opened this issue Mar 25, 2024 · 4 comments

Comments

@apurvkulkarni7
Copy link

While connecting to client, I am getting following error

raise ValueError("password replacement is not allowed for relative URLs")
ValueError: password replacement is not allowed for relative URLs

I am using example scripts mentioned here. In this example, I get the error at line 53. I have also gone through the documentation. But I couldn't find any troubleshooting guide related to this topic.

I am currently using metricq with version 5.3.0.

@bmario
Copy link
Member

bmario commented Mar 25, 2024

This sounds a bit like a problem with mismatching python modules. Can you provide the output of pip list?

@apurvkulkarni7
Copy link
Author

Thank you for your reply. Following are the libraries of my python virtual environment

Package                       Version
----------------------------- ---------------
aio-pika                      9.4.1
aiormq                        6.8.0
alabaster                     0.7.16
appdirs                       1.4.4
arrow                         1.3.0
astroid                       3.0.2
asttokens                     2.4.1
atomicwrites                  1.4.1
attrs                         23.2.0
autopep8                      2.0.4
Babel                         2.14.0
backcall                      0.2.0
beautifulsoup4                4.12.3
beniget                       0.4.1
binaryornot                   0.4.4
black                         23.12.1
bleach                        6.1.0
blinker                       1.4
Brotli                        1.0.9
certifi                       2023.11.17
chardet                       5.2.0
charset-normalizer            3.3.2
click                         8.0.3
click-completion              0.5.2
click-log                     0.4.0
cloudpickle                   3.0.0
colorama                      0.4.4
comm                          0.2.1
command-not-found             0.3
cookiecutter                  2.5.0
cryptography                  3.4.8
cupshelpers                   1.0
cycler                        0.11.0
dbus-python                   1.2.18
debugpy                       1.8.0
decorator                     5.1.1
defusedxml                    0.7.1
Deprecated                    1.2.14
diff-match-patch              20230430
dill                          0.3.7
distro                        1.7.0
distro-info                   1.1+ubuntu0.2
docstring-to-markdown         0.13
docutils                      0.20.1
dominate                      2.9.1
entrypoints                   0.4
exceptiongroup                1.2.0
executing                     2.0.1
fastjsonschema                2.19.1
flake8                        6.1.0
fonttools                     4.29.1
fs                            2.4.12
fuse-python                   1.0.2
gast                          0.5.2
gpg                           1.23.2-unknown
helpdev                       0.7.1
html5lib                      1.1
httplib2                      0.20.2
idna                          3.6
imagesize                     1.4.1
importlib-metadata            7.0.1
inflection                    0.5.1
intervaltree                  3.1.0
ipykernel                     6.29.0
ipython                       8.20.0
ipython_genutils              0.2.0
isort                         5.13.2
jedi                          0.19.1
jeepney                       0.7.1
jellyfish                     1.0.3
Jinja2                        3.1.3
jsonschema                    4.21.1
jsonschema-specifications     2023.12.1
jupyter_client                8.6.0
jupyter_core                  5.7.1
jupyterlab_pygments           0.3.0
keyring                       23.5.0
kiwisolver                    1.3.2
language-selector             0.1
launchpadlib                  1.10.16
lazr.restfulclient            0.14.4
lazr.uri                      1.0.6
lazy-object-proxy             0.0.0
logilab-common                1.8.2
lxml                          4.8.0
lz4                           3.1.3+dfsg
markdown-it-py                3.0.0
MarkupSafe                    2.1.4
matplotlib                    3.5.1
matplotlib-inline             0.1.6
mccabe                        0.7.0
mdurl                         0.1.2
mercurial                     6.1.1
metricq                       5.3.0
mistune                       3.0.2
mock                          4.0.3
more-itertools                8.10.0
mpmath                        0.0.0
multidict                     6.0.5
mypy-extensions               1.0.0
nbclient                      0.9.0
nbconvert                     7.14.2
nbformat                      5.9.2
nest-asyncio                  1.6.0
netifaces                     0.11.0
numpy                         1.26.3
numpydoc                      1.6.0
oauthlib                      3.2.0
olefile                       0.46
openshot-qt                   3.1.1
packaging                     23.2
pamqp                         3.3.0
pandas                        2.2.0
pandocfilters                 1.5.1
parso                         0.8.3
pathspec                      0.12.1
pbr                           5.8.0
pep8                          1.7.1
pexpect                       4.8.0
pickleshare                   0.7.5
Pillow                        9.0.1
pip                           23.2.1
platformdirs                  4.1.0
pluggy                        1.3.0
ply                           3.11
prompt-toolkit                3.0.43
protobuf                      3.12.4
psutil                        5.9.8
ptyprocess                    0.7.0
pure-eval                     0.2.2
py                            1.10.0
pyarrow                       15.0.2
pycairo                       1.20.1
pycodestyle                   2.11.1
pycups                        2.0.1
pydocstyle                    6.3.0
pyflakes                      3.1.0
pygdbmi                       0.11.0.0
Pygments                      2.17.2
PyGObject                     3.42.1
PyJWT                         2.3.0
pylibacl                      0.6.0
pylint                        3.0.3
pylint-venv                   3.0.3
pyls-black                    0.4.6
pyls-spyder                   0.4.0
pyparsing                     2.4.7
PyQt5                         5.15.10
PyQt5-sip                     12.13.0
PyQtWebEngine                 5.15.6
PyQtWebEngine-Qt5             5.15.2
pyrsistent                    0.18.1
pysvn                         1.9.15
python-apt                    2.4.0+ubuntu3
python-dateutil               2.8.2
python-jsonrpc-server         0.4.0
python-language-server        0.36.2
python-lsp-black              2.0.0
python-lsp-jsonrpc            1.1.2
python-lsp-server             1.9.0
python-slugify                8.0.1
pythran                       0.14.0
pytoolconfig                  1.3.1
pytz                          2022.1
pyxattr                       0.7.2
pyxdg                         0.28
PyYAML                        5.4.1
pyzmq                         25.1.2
QDarkStyle                    3.2.3
qstylizer                     0.2.2
QtAwesome                     1.3.0
qtconsole                     5.5.1
QtPy                          2.4.1
referencing                   0.32.1
reportlab                     3.6.8
requests                      2.31.0
rich                          13.7.0
roman                         3.3
rope                          1.12.0
rpds-py                       0.17.1
Rtree                         1.2.0
scipy                         1.8.0
SecretStorage                 3.3.1
sentry-sdk                    1.4.3
setuptools                    68.2.0
shellingham                   1.5.4
six                           1.16.0
snowballstemmer               2.2.0
sortedcontainers              2.4.0
soupsieve                     2.5
Sphinx                        7.2.6
sphinxcontrib-applehelp       1.0.8
sphinxcontrib-devhelp         1.0.6
sphinxcontrib-htmlhelp        2.0.5
sphinxcontrib-jsmath          1.0.1
sphinxcontrib-qthelp          1.0.7
sphinxcontrib-serializinghtml 1.1.10
spyder                        5.5.0
spyder-kernels                2.5.0
ssh-import-id                 5.11
stack-data                    0.6.3
sympy                         1.9
tabulate                      0.9.0
testpath                      0.5.0
text-unidecode                1.3
textdistance                  4.6.1
three-merge                   0.1.1
tinycss2                      1.2.1
toml                          0.10.2
tomli                         2.0.1
tomlkit                       0.12.3
tornado                       6.4
traitlets                     5.14.1
types-python-dateutil         2.8.19.20240106
typing_extensions             4.9.0
tzdata                        2023.4
ubuntu-drivers-common         0.0.0
ufoLib2                       0.13.1
ufw                           0.36.1
ujson                         5.9.0
unicodedata2                  14.0.0
urllib3                       2.1.0
wadllib                       1.3.6
watchdog                      3.0.0
wcwidth                       0.2.13
webencodings                  0.5.1
whatthepatch                  1.0.5
wheel                         0.41.2
wrapt                         1.13.3
wurlitzer                     3.0.3
xdg                           5
xkit                          0.0.0
yapf                          0.40.2
yarl                          1.9.4
zipp                          1.0.0

@apurvkulkarni7
Copy link
Author

I did some investigation and I found that this error message is present in yarl python library. As seen above, I am using yarl==1.9.4 . Is there any version recommendation? To add to that following is my full code to extract metrics (historical data) from a MetricQ server, which is inspired from the examples.

async def aget_history(server: str, token: str, metric: str, start_time: str, end_time: str) -> None:    
    # Connect to the server
    client = metricq.HistoryClient(token=token, url=server)
    await client.connect()
     
    logger.info("connected")
    
    zone_offset = datetime.now(pytz.timezone('CET')).strftime('%z')
    parsed_match = re.compile(r'[+-]*(\d{2})(\d{2})').findall(zone_offset)[0]
    zone_delta = metricq.Timedelta.from_timedelta(timedelta(hours=int(parsed_match[0]),minutes=int(parsed_match[1])))
    
    total_begin = metricq.Timestamp.from_iso8601(start_time)
    total_begin = total_begin - zone_delta
    total_end = metricq.Timestamp.from_iso8601(end_time)
    total_end = total_end - zone_delta
    time_diff = total_end-total_begin
    
    chunk_duration = metricq.Timedelta.from_timedelta(timedelta(seconds=time_diff.s))
    interval_max_raw = metricq.Timedelta(0)
     
    chunk_begin = total_begin
    node_name = metric.split(".")[1]
   
    df = pd.DataFrame(columns=[f"{node_name}_power_watt"])
    while chunk_begin < total_end:
        chunk_end = chunk_begin + chunk_duration
        chunk_end = min(chunk_end, total_end)
        click.echo(f"Requesting chunk from {chunk_begin} to {chunk_end}")     
        result = await client.history_data_request(
            metric,
            start_time=chunk_begin,
            end_time=chunk_end,
            interval_max=interval_max_raw,
            request_type=HistoryRequestType.FLEX_TIMELINE,
        )
        for tv in result.values():
            # The DB can give you one value before the requested begin timestamp
            if tv.timestamp < chunk_begin:
                continue
            tp = str(tv.timestamp).split("]")[1]
            tp = parser.parse(tp)
            tp = datetime.fromtimestamp(tp.timestamp()).isoformat() + "Z"
            df.loc[tp] = tv.value
        chunk_begin = chunk_end
    await client.stop(None)

    return df

I am calling the above function as follows:

@click.command()
@click.option("--server", default="amqp://localhost/")
@click.option("--token", default="history-py-dummy")
@click.option("--exp_dir")
@click_log.simple_verbosity_option(logger)  # type: ignore
def get_history(server: str, token: str, exp_dir: str) -> None:
    [...]
    # Get master metric
    df_master = asyncio.run(
        aget_history(server, token, myinfo["master_metric"], myinfo["start_time"], myinfo["end_time"])
        )
    [...]

if __name__ == "__main__":
    get_history()

@apurvkulkarni7
Copy link
Author

This is working if I pass client_version="1.0.1.dev1+<some-value>" to the History client as follows:

client = metricq.HistoryClient(token=token, url=server, client_version="1.0.1.dev1+<some-value>")

To clarify more about this issue. I haven't installed any examples from this git repository. I am using my own python scripts and my own virtual environment. But then in such cases what values should be passed to the "client_version" ? The documentation does mention that I can use the git tags as the client_version. But I am confused as the documentation shows the use case of working with git repository. But my use case is totally different where I am using only a python script to extract the data.

In my opinion this issue can be closed after I get some feedback of above question.

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

No branches or pull requests

2 participants