Commit Graph

144 Commits

Author SHA1 Message Date
Dave Dalcino
2d1d71df8d Allow for empty DownloadArchive tags
This also updates the type hints for the PackageUpdate class, to make
it easier to understand the datatypes. It also adds some assertions
to prove what types they are.
2022-09-21 16:25:09 -07:00
Hiroshi Miura
2a89308818 Add Updates, PackageUpdate data class
- Drop update_xml and its content from field of QtArchives class
- Add test for Updates class

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2022-06-12 00:13:00 +09:00
Hiroshi Miura
638f94a690 archives: do not keep update.xml text in field
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2022-06-11 12:19:42 +09:00
David Dalcino
dc45839df4 Fix implementation of helper.get_hash
Causes `get_hash` to verify the hash length, and check that the hash can
be unhexlified properly.

Fixes the interface for `get_hash` so that the caller does not have to
run `binascii.unhexlify` or verify its output.
2022-03-20 14:16:24 -07:00
David Dalcino
5ad7c1a058 Use defusedxml to parse Updates.xml files
I don't think we can really call the `Updates.xml` files that we are
parsing 'untrusted xml', because we are checking that they match the
sha256 checksum. However, I don't think there's any good reason not to
use a more secure parsing algorithm.
2022-03-10 17:23:58 -08:00
David Dalcino
f979d80899 WIP use checksums for updates.xml files 2022-03-06 17:56:25 -08:00
David Dalcino
96af3eb393 Refactor: split QtArchive.archive_url into parts
This splits QtArchive.archive_url into two new datamembers: archive_path
and base_url. Ultimately, base_url should be removed from QtPackage
entirely.
2022-03-06 17:36:32 -08:00
David Dalcino
7ebd6aa34e Use sha256 hashes only from trusted mirrors
To keep this commit small, `hashurl` was removed from QtPackage, and
`get_hash` constructs the hash url based on the url of the 7z archive
to download. I think that in the future, QtArchive and QtPackage could
be refactored to construct this url more appropriately. However, this
would be a complicated change that doesn't belong in this commit.
2022-03-06 17:36:32 -08:00
Hiroshi Miura
eaf5a46e48 Merge pull request #459 from ddalcino/fix-archives-flag
Restrict effect of `--archives` flag to base and debug_info modules
2022-01-26 14:21:47 +09:00
Hiroshi Miura
9b66f03718 Accept Update.xml that use comma without space as delimiter
resolve #475

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2022-01-12 22:24:16 +09:00
David Dalcino
9c706a270c Fix implementation of --archives flag 2021-12-05 11:53:38 -08:00
David Dalcino
078154c0db refactor QtArchives base pkg name accessors
This adds an accessor function, `QtArchives._base_package_names`,
that returns a list of all possible PackageUpdate.Name properties
for the base package

This also renames `QtArchives._base_target_package_name` to
`_base_module_name`, so that its meaning is more clear in context
and not so easy to confuse with the new function.
2021-12-05 11:53:35 -08:00
David Dalcino
022373683b Allow SrcDocExamplesArchives to omit base
This change allows for the future implementation of a `--noarchives`
flag for the `install-src/doc/example` commands.
I don't know if end users will need this or not, but I need this to
determine whether or not archive filtration works properly.
This property is tested in `tests/test_archive.py` at
`test_archives_weird_module_7z_name()`.
2021-12-05 11:53:31 -08:00
David Dalcino
cfc241002d Fix suggestions for src/doc/ex missing modules 2021-11-23 12:17:03 -08:00
David Dalcino
621cd7a6c0 Fix implementation of aqt tool
This modifies `aqt tool` to allow `-` characters in tool versions, so
that `aqt tool` can pass the same unit tests that `install-tool` can.
This makes it less like the `aqt tool` from v1.2.5, but it should work
better with more tools with different version formats.
2021-10-30 19:23:35 -07:00
David Dalcino
38a125ee6b Clarify meaning and scope of all_archives
This is a code-readability improvement. Every time I read this code,
I get tripped up by the `if not all_archives:` line, and I have to hunt
for all uses of `all_archives` to see what it means and what it does.

This change moves the assignment next to its usage, so its meaning and
scope are immediately clear, and no hunting is necessary. This also
gives it a less ambiguous name.

This change will likely make the reader wonder if this variable is
needed at all; the conditional `if subarchives is not None:` would
probably work just as well. I would tend to agree.
However, I am leaving this variable in because the variable name
documents what the code is doing and why.

I recognize that the value of this change is very subjective, and I am
happy to revert this if necessary.
2021-10-20 19:53:09 -07:00
David Dalcino
46fc2aaf9f Cause --noarchives to omit the base Qt module 2021-10-20 19:32:36 -07:00
David Dalcino
c5b89f6170 fail on mismatched tool versions
This recreates the legacy behavior, where `aqt tool` would fail to
install a tool variant when the version in the xml file does not match
the version requested in cli arguments.

This also recreates a bug where `aqt tool` cannot install tools that
do not have a valid semantic version.
2021-09-30 19:15:32 -07:00
David Dalcino
8c7d50d9f0 Simplify help message 2021-09-20 13:01:50 -07:00
David Dalcino
a5bb2553ce Add improved error messages for missing archives 2021-09-20 12:46:47 -07:00
David Dalcino
1a918c35c5 Merge remote-tracking branch 'upstream/master' into specify-version-by-simplespec 2021-09-09 08:26:10 -07:00
David Dalcino
5a1aedb480 Add functions to determine extensions
This moves the logic for determining extensions out of the QtArchive
class so that it is available elsewhere and does not need to be
duplicated.
2021-09-07 14:27:51 -07:00
David Dalcino
88c30d90d0 Raise exceptions from existing exceptions 2021-09-02 09:57:34 -07:00
David Dalcino
7fa9dff9ea Don't duplicate error messages in QtArchives 2021-09-01 12:37:54 -07:00
David Dalcino
c9c1388027 Merge remote-tracking branch 'upstream/master' into fail-on-missing-modules
# Conflicts:
#	aqt/archives.py
#	tests/test_archives.py
2021-08-25 09:49:59 -07:00
David Dalcino
e1c7bd0c1b Cause ToolArchive failure when variant is missing
This allows test_tools_variants to pass.
2021-08-24 10:10:31 -07:00
David Dalcino
ba86bbbb48 Allow empty version string
The interface for ToolArchives says that `version_str` is optional,
but when you try to use it with the default value, the QtArchives
constructor raises a ValueError exception. This change substitutes
the dummy value used by the Cli.run_install_tool for version_str, when
version_str is empty.
2021-08-24 10:06:07 -07:00
David Dalcino
9b29055797 Implement check for missing modules 2021-08-23 10:57:27 -07:00
David Dalcino
499fdb020f Use posixpath.join to compose urls
This makes sure that all urls composed in QtArchive are put together
properly, using posixpath.join. #287 did this in a few places, but not
all.
2021-08-23 10:57:25 -07:00
David Dalcino
847bd420a3 Add type hints to QtArchives
This is meant to make the QtArchives class more readable, so the types
of each data member are absolutely clear.
2021-08-23 10:57:24 -07:00
David Dalcino
5fa7d22cbe Add name of PackageUpdate to QtPackage
This adds the "Name" property from the "PackageUpdate" element from
"Updates.xml" to the QtPackage objects. This is intended to make
testing easier: if the "Name" property is missing, there's no way to
find out which PackageUpdate the 7z archive came from after it has
been added to the QtArchive.

In the case of ToolArchive contents, the `QtPackage.pkg_update_name`
is redundant, because the "Name" property is already saved as
`QtPackage.name`. The `QtPackage.name` property is being used in two
different ways in two different places, probably because of different
naming conventions.
2021-08-23 10:57:22 -07:00
David Dalcino
c7993c1031 Make addons. prefix optional for Qt6+ 2021-08-17 15:22:45 -07:00
David Dalcino
a0e002de75 Allow QtArchives to recognize Qt 5.9.0 2021-08-11 11:29:09 -07:00
Hiroshi Miura
c99ec5372b Coding style update by Black/isort
Change to max line length to 125

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-08-02 13:50:00 +09:00
Hiroshi Miura
0c346d77c8 Merge branch 'master' into topic-tool-latest 2021-07-15 14:10:09 +09:00
Hiroshi Miura
0d7c3eecb8 Merge pull request #316 from miurahr/patch-refactoring-installer
Refactoring call_instaler/installer
2021-07-15 09:49:10 +09:00
Hiroshi Miura
62d8ed3b55 Rename to get_packages
- It is problematic name that QtArchive.get_archives returns List[QtPackage]

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-15 09:32:26 +09:00
Hiroshi Miura
f1b8b5a2c3 Refactoring call_instaler/installer
- Introduce `run_installer` that consume `List[QtArchives]` data
  to be same structure as `show_list` and `ToolData` data class.

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-15 08:33:50 +09:00
Hiroshi Miura
1721a21390 Drop unused class
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-15 08:32:04 +09:00
Hiroshi Miura
ab823596dc Utilize dataclasses (#313)
* Utilize dataclasses

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* PEP8

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-15 08:08:53 +09:00
Hiroshi Miura
a5bb6b7e96 Introduce metadata package (#305)
* Introduce metadata module

that has Versions and ListCommand class

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Introduce custom Version class

A Version class override semantic_version.Version class
that accept qt versions and tools versions

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* PEP8/Black

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Improve test assertion

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Move ArchiveId class to metadata module

And Improve imports

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Refactoring Version class

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Refactoring Table class

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Refactoring Table class(wip)

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* Fix output format of `list tools` command

Signed-off-by: Hiroshi Miura <miurahr@linux.com>

* list: Improve print output

avoid str.join()

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-13 00:10:36 +09:00
Hiroshi Miura
534bfc6add Make ListCommand iterable
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-11 11:06:48 +09:00
Hiroshi Miura
9cb3e880ae wip: fix error
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-11 10:42:27 +09:00
Hiroshi Miura
3d9ef1ac6b Update dummy version handling
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-11 10:29:29 +09:00
David Dalcino
10d4ec02d5 Add tool-long-listing to ListCommand
This change adds the ability to list all the 'tool variant names'
alongside the version and release date of the tool.

When using the `aqt list tools` feature, I often find that I need more
information than the tool provides. I often need to know the release
date and the version for each tool, and I can't get that information
without looking up the Updates.xml file. This feature enables me to skip
that part.
2021-07-09 19:05:08 -07:00
Hiroshi Miura
358687d7e5 Merge branch 'master' into topic-tool-latest 2021-07-10 09:29:22 +09:00
David Dalcino
7a2e7faf53 Allow ListCommand to choose tool by version
This adds the function `ListCommand.fetch_tool_by_simple_spec`. This
allows the caller to specify a SimpleSpec and the name of a tool, and
the function will return the Updates.xml record for the specified tool
with the largest version number that satisfies the SimpleSpec. This is
meant to allow users to install tools without specifying an explicit
version number.

This also adds some test code to validate the complicated parts of this
code.

This also extends `helper.xml_to_modules`, so that a caller can
automatically get all tags in an XML element without explicitly
specifying them.
2021-07-09 17:02:50 -07:00
Hiroshi Miura
e8b849fa58 Drop duplicated members 2021-07-10 01:02:35 +09:00
Hiroshi Miura
905d9c2f5f wip
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2021-07-10 00:59:01 +09:00
Hiroshi Miura
62c7075aeb Accept target argument 2021-07-09 23:53:41 +09:00