Skip to content

Commit 75d90d6

Browse files
committed
"adding the support for hugging face package manager"
1 parent ad74e92 commit 75d90d6

10 files changed

Lines changed: 178 additions & 6 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.jfrog.artifactory.client.model.repository.settings;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
5+
@JsonIgnoreProperties(ignoreUnknown = true)
6+
public interface HuggingFaceRepositorySettings extends RepositorySettings {
7+
}

services/src/main/java/org/jfrog/artifactory/client/impl/jackson/RepositorySettingsMixIn.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
@JsonSubTypes.Type(value = GoRepositorySettingsImpl.class, name = "go"),
4646
@JsonSubTypes.Type(value = CargoRepositorySettingsImpl.class, name = "cargo"),
4747
@JsonSubTypes.Type(value = TerraformRepositorySettingsImpl.class, name = "terraform"),
48-
@JsonSubTypes.Type(value = OciRepositorySettingsImpl.class, name = "oci")
48+
@JsonSubTypes.Type(value = OciRepositorySettingsImpl.class, name = "oci"),
49+
@JsonSubTypes.Type(value = HuggingFaceRepositorySettingsImpl.class, name = "HuggingFaceML")
4950
})
5051

5152
public abstract class RepositorySettingsMixIn {

services/src/main/java/org/jfrog/artifactory/client/model/impl/FederatedRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
public class FederatedRepositoryBuilderImpl extends NonVirtualRepositoryBuilderBase<FederatedRepositoryBuilder, FederatedRepository> implements FederatedRepositoryBuilder {
1818
private static Set<PackageType> federatedRepositorySupportedTypes = new HashSet<>(Arrays.asList(
19-
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci
19+
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci, HuggingFaceML
2020
));
2121

2222
protected List<FederatedMember> members = new ArrayList<>();

services/src/main/java/org/jfrog/artifactory/client/model/impl/LocalRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818
public class LocalRepositoryBuilderImpl extends NonVirtualRepositoryBuilderBase<LocalRepositoryBuilder, LocalRepository> implements LocalRepositoryBuilder {
1919
private static Set<PackageType> localRepositorySupportedTypes = new HashSet<PackageType>(Arrays.asList(
20-
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci
20+
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci, HuggingFaceML
2121
));
2222

2323
protected LocalRepositoryBuilderImpl() {

services/src/main/java/org/jfrog/artifactory/client/model/impl/PackageTypeImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public enum PackageTypeImpl implements PackageType {
3535
go,
3636
cargo,
3737
terraform,
38-
oci;
38+
oci,
39+
HuggingFaceML;
3940

4041
@Override
4142
public boolean isCustom() {

services/src/main/java/org/jfrog/artifactory/client/model/impl/RemoteRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818
public class RemoteRepositoryBuilderImpl extends NonVirtualRepositoryBuilderBase<RemoteRepositoryBuilder, RemoteRepository> implements RemoteRepositoryBuilder {
1919
private static Set<PackageType> remoteRepositorySupportedTypes = new HashSet<PackageType>(Arrays.asList(
20-
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, p2, pypi, sbt, vcs, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci
20+
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, p2, pypi, sbt, vcs, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci, HuggingFaceML
2121
));
2222

2323
private String url;

services/src/main/java/org/jfrog/artifactory/client/model/impl/VirtualRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
public class VirtualRepositoryBuilderImpl extends RepositoryBuilderBase<VirtualRepositoryBuilder, VirtualRepository> implements VirtualRepositoryBuilder {
1717
private static Set<PackageType> virtualRepositorySupportedTypes = new HashSet<PackageType>(Arrays.asList(
18-
bower, cran, conda, docker, debian, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, p2, pypi, sbt, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, terraform, oci
18+
bower, cran, conda, docker, debian, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, p2, pypi, sbt, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, terraform, oci, HuggingFaceML
1919
));
2020

2121
private Collection<String> repositories = Collections.emptyList();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.jfrog.artifactory.client.model.repository.settings.impl;
2+
3+
import org.jfrog.artifactory.client.model.PackageType;
4+
import org.jfrog.artifactory.client.model.impl.PackageTypeImpl;
5+
import org.jfrog.artifactory.client.model.repository.settings.AbstractRepositorySettings;
6+
import org.jfrog.artifactory.client.model.repository.settings.HuggingFaceRepositorySettings;
7+
8+
public class HuggingFaceRepositorySettingsImpl extends AbstractRepositorySettings implements HuggingFaceRepositorySettings {
9+
public static String defaultLayout = "simple-default";
10+
11+
public HuggingFaceRepositorySettingsImpl() {
12+
super(defaultLayout);
13+
}
14+
15+
@Override
16+
public PackageType getPackageType() {
17+
return PackageTypeImpl.HuggingFaceML;
18+
}
19+
20+
@Override
21+
public boolean equals(Object o) {
22+
if (this == o) return true;
23+
return o instanceof HuggingFaceRepositorySettingsImpl;
24+
}
25+
26+
@Override
27+
public int hashCode() {
28+
return super.hashCode();
29+
}
30+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package org.jfrog.artifactory.client;
2+
3+
import org.jfrog.artifactory.client.model.Repository;
4+
import org.jfrog.artifactory.client.model.builder.RepositoryBuilders;
5+
import org.jfrog.artifactory.client.model.impl.PackageTypeImpl;
6+
import org.jfrog.artifactory.client.model.repository.settings.HuggingFaceRepositorySettings;
7+
import org.jfrog.artifactory.client.model.repository.settings.impl.HuggingFaceRepositorySettingsImpl;
8+
import org.testng.annotations.AfterMethod;
9+
import org.testng.annotations.BeforeMethod;
10+
import org.testng.annotations.Test;
11+
12+
import static org.testng.Assert.assertEquals;
13+
import static org.testng.Assert.assertNotNull;
14+
15+
public class HuggingFacePackageTypeRepositoryTest extends ArtifactoryTestsBase {
16+
17+
private final String localRepo = "huggingface-local-1";
18+
private final String federatedRepo = "huggingface-federated-1";
19+
private final String virtualRepo = "huggingface-virtual-1";
20+
21+
@BeforeMethod
22+
@AfterMethod
23+
private void cleanup() {
24+
deleteRepoIfExists(localRepo);
25+
deleteRepoIfExists(federatedRepo);
26+
deleteRepoIfExists(virtualRepo);
27+
}
28+
29+
@Test
30+
public void testHuggingFaceLocalRepo() {
31+
HuggingFaceRepositorySettings settings = new HuggingFaceRepositorySettingsImpl();
32+
RepositoryBuilders repositoryBuilders = artifactory.repositories().builders();
33+
Repository localRepository = repositoryBuilders.localRepositoryBuilder()
34+
.key(localRepo)
35+
.description("new local huggingface repo")
36+
.notes("some notes")
37+
.repositorySettings(settings)
38+
.build();
39+
40+
// Use position 0 for create, as required by the interface
41+
artifactory.repositories().create(0, localRepository);
42+
Repository localRepoFromServer = artifactory.repository(localRepo).get();
43+
assertNotNull(localRepoFromServer);
44+
assertEquals(localRepoFromServer.getKey(), localRepo);
45+
assertEquals(localRepoFromServer.getDescription(), "new local huggingface repo");
46+
assertEquals(localRepoFromServer.getNotes(), "some notes");
47+
assertEquals(localRepoFromServer.getRepoLayoutRef(), "simple-default");
48+
assertEquals(localRepoFromServer.getRepositorySettings().getPackageType(), PackageTypeImpl.HuggingFaceML);
49+
}
50+
51+
@Test
52+
public void testHuggingFaceFederatedRepo() {
53+
HuggingFaceRepositorySettings settings = new HuggingFaceRepositorySettingsImpl();
54+
RepositoryBuilders repositoryBuilders = artifactory.repositories().builders();
55+
Repository federatedRepository = repositoryBuilders.federatedRepositoryBuilder()
56+
.key(federatedRepo)
57+
.description("new federated huggingface repo")
58+
.notes("some notes")
59+
.repositorySettings(settings)
60+
.build();
61+
62+
artifactory.repositories().create(0, federatedRepository);
63+
Repository federatedRepoFromServer = artifactory.repository(federatedRepo).get();
64+
assertNotNull(federatedRepoFromServer);
65+
assertEquals(federatedRepoFromServer.getKey(), federatedRepo);
66+
assertEquals(federatedRepoFromServer.getDescription(), "new federated huggingface repo");
67+
assertEquals(federatedRepoFromServer.getNotes(), "some notes");
68+
}
69+
70+
@Test
71+
public void testHuggingFaceVirtualRepo() {
72+
HuggingFaceRepositorySettings settings = new HuggingFaceRepositorySettingsImpl();
73+
RepositoryBuilders repositoryBuilders = artifactory.repositories().builders();
74+
Repository virtualRepository = repositoryBuilders.virtualRepositoryBuilder()
75+
.key(virtualRepo)
76+
.description("new virtual huggingface repo")
77+
.notes("some notes")
78+
.repositorySettings(settings)
79+
.build();
80+
81+
artifactory.repositories().create(0, virtualRepository);
82+
Repository virtualRepoFromServer = artifactory.repository(virtualRepo).get();
83+
assertNotNull(virtualRepoFromServer);
84+
assertEquals(virtualRepoFromServer.getKey(), virtualRepo);
85+
assertEquals(virtualRepoFromServer.getDescription(), "new virtual huggingface repo");
86+
assertEquals(virtualRepoFromServer.getNotes(), "some notes");
87+
}
88+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.jfrog.artifactory.client;
2+
3+
import org.jfrog.artifactory.client.model.PackageType;
4+
import org.jfrog.artifactory.client.model.impl.PackageTypeImpl;
5+
import org.jfrog.artifactory.client.model.repository.settings.impl.HuggingFaceRepositorySettingsImpl;
6+
import org.testng.annotations.Test;
7+
8+
import static org.testng.Assert.*;
9+
10+
/**
11+
* Test for HuggingFace repository settings implementation
12+
*/
13+
public class HuggingFaceRepositorySettingsTest {
14+
15+
@Test
16+
public void testHuggingFaceRepositorySettings() {
17+
HuggingFaceRepositorySettingsImpl settings = new HuggingFaceRepositorySettingsImpl();
18+
19+
// Test package type
20+
PackageType packageType = settings.getPackageType();
21+
assertEquals(packageType, PackageTypeImpl.HuggingFaceML);
22+
23+
// Test default layout
24+
assertEquals(settings.getRepoLayout(), "simple-default");
25+
26+
// Test layout setting
27+
settings.setRepoLayout("custom-layout");
28+
assertEquals(settings.getRepoLayout(), "custom-layout");
29+
30+
// Test that it's not a custom package type
31+
assertFalse(packageType.isCustom());
32+
}
33+
34+
@Test
35+
public void testConsistencyWithOtherPackageManagers() {
36+
HuggingFaceRepositorySettingsImpl huggingFaceSettings = new HuggingFaceRepositorySettingsImpl();
37+
38+
// Verify it follows the same interface pattern as other package managers
39+
assertNotNull(huggingFaceSettings.getPackageType());
40+
assertNotNull(huggingFaceSettings.getRepoLayout());
41+
42+
// Test that the default layout is properly set
43+
assertEquals(HuggingFaceRepositorySettingsImpl.defaultLayout, "simple-default");
44+
}
45+
}

0 commit comments

Comments
 (0)