annet 0.8__tar.gz → 0.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of annet might be problematic. Click here for more details.
- {annet-0.8/annet.egg-info → annet-0.9}/PKG-INFO +1 -1
- {annet-0.8 → annet-0.9}/annet/annlib/jsontools.py +1 -1
- {annet-0.8 → annet-0.9}/annet/gen.py +28 -15
- {annet-0.8 → annet-0.9}/annet/generators/__init__.py +21 -9
- {annet-0.8 → annet-0.9}/annet/types.py +7 -3
- {annet-0.8 → annet-0.9/annet.egg-info}/PKG-INFO +1 -1
- {annet-0.8 → annet-0.9}/AUTHORS +0 -0
- {annet-0.8 → annet-0.9}/LICENSE +0 -0
- {annet-0.8 → annet-0.9}/MANIFEST.in +0 -0
- {annet-0.8 → annet-0.9}/README.md +0 -0
- {annet-0.8 → annet-0.9}/annet/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/client.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/manufacturer.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/models.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/query.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/status_client.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/common/storage_opts.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/provider.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v24/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v24/api_models.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v24/client.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v24/storage.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v37/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v37/api_models.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v37/client.py +0 -0
- {annet-0.8 → annet-0.9}/annet/adapters/netbox/v37/storage.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annet.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/command.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/diff.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/errors.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/filter_acl.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/lib.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/db.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/devdb/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/views/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/views/dump.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/netdev/views/hardware.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/output.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/patching.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rbparser/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rbparser/acl.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rbparser/deploying.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rbparser/ordering.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rbparser/platform.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rbparser/syntax.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rulebook/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/rulebook/common.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/tabparser.py +0 -0
- {annet-0.8 → annet-0.9}/annet/annlib/types.py +0 -0
- {annet-0.8 → annet-0.9}/annet/api/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/argparse.py +0 -0
- {annet-0.8 → annet-0.9}/annet/cli.py +0 -0
- {annet-0.8 → annet-0.9}/annet/cli_args.py +0 -0
- {annet-0.8 → annet-0.9}/annet/configs/context.yml +0 -0
- {annet-0.8 → annet-0.9}/annet/configs/logging.yaml +0 -0
- {annet-0.8 → annet-0.9}/annet/connectors.py +0 -0
- {annet-0.8 → annet-0.9}/annet/deploy.py +0 -0
- {annet-0.8 → annet-0.9}/annet/diff.py +0 -0
- {annet-0.8 → annet-0.9}/annet/executor.py +0 -0
- {annet-0.8 → annet-0.9}/annet/filtering.py +0 -0
- {annet-0.8 → annet-0.9}/annet/generators/common/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/generators/common/initial.py +0 -0
- {annet-0.8 → annet-0.9}/annet/hardware.py +0 -0
- {annet-0.8 → annet-0.9}/annet/implicit.py +0 -0
- {annet-0.8 → annet-0.9}/annet/lib.py +0 -0
- {annet-0.8 → annet-0.9}/annet/output.py +0 -0
- {annet-0.8 → annet-0.9}/annet/parallel.py +0 -0
- {annet-0.8 → annet-0.9}/annet/patching.py +0 -0
- {annet-0.8 → annet-0.9}/annet/reference.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/arista/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/arista/iface.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/aruba/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/aruba/ap_env.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/aruba/misc.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/cisco/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/cisco/iface.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/cisco/misc.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/cisco/vlandb.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/common.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/deploying.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/huawei/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/huawei/aaa.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/huawei/bgp.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/huawei/iface.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/huawei/misc.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/huawei/vlandb.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/juniper/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/nexus/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/nexus/iface.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/patching.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/ribbon/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/arista.deploy +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/arista.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/arista.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/aruba.deploy +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/aruba.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/aruba.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/cisco.deploy +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/cisco.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/cisco.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/huawei.deploy +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/huawei.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/huawei.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/juniper.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/nexus.deploy +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/nexus.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/nexus.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/nokia.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/pc.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/pc.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/ribbon.deploy +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/ribbon.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/routeros.order +0 -0
- {annet-0.8 → annet-0.9}/annet/rulebook/texts/routeros.rul +0 -0
- {annet-0.8 → annet-0.9}/annet/storage.py +0 -0
- {annet-0.8 → annet-0.9}/annet/tabparser.py +0 -0
- {annet-0.8 → annet-0.9}/annet/text_term_format.py +0 -0
- {annet-0.8 → annet-0.9}/annet/tracing.py +0 -0
- {annet-0.8 → annet-0.9}/annet.egg-info/SOURCES.txt +0 -0
- {annet-0.8 → annet-0.9}/annet.egg-info/dependency_links.txt +0 -0
- {annet-0.8 → annet-0.9}/annet.egg-info/entry_points.txt +0 -0
- {annet-0.8 → annet-0.9}/annet.egg-info/requires.txt +0 -0
- {annet-0.8 → annet-0.9}/annet.egg-info/top_level.txt +0 -0
- {annet-0.8 → annet-0.9}/annet_generators/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet_generators/example/__init__.py +0 -0
- {annet-0.8 → annet-0.9}/annet_generators/example/lldp.py +0 -0
- {annet-0.8 → annet-0.9}/requirements.txt +0 -0
- {annet-0.8 → annet-0.9}/setup.cfg +0 -0
- {annet-0.8 → annet-0.9}/setup.py +0 -0
|
@@ -106,7 +106,7 @@ def apply_acl_filters(content: Dict[str, Any], filters: List[str]) -> Dict[str,
|
|
|
106
106
|
patch = jsonpatch.JsonPatch([{"op": "add", "path": f, "value": part}])
|
|
107
107
|
result = patch.apply(result)
|
|
108
108
|
except jsonpointer.JsonPointerException:
|
|
109
|
-
# no value found in
|
|
109
|
+
# no value found in content by the pointer, skip the ACL item
|
|
110
110
|
continue
|
|
111
111
|
|
|
112
112
|
return result
|
|
@@ -216,6 +216,7 @@ def _old_new_per_device(ctx: OldNewDeviceContext, device: Device, filterer: Filt
|
|
|
216
216
|
|
|
217
217
|
new_files = {}
|
|
218
218
|
safe_new_files = {}
|
|
219
|
+
safe_new_json_fragment_files = {}
|
|
219
220
|
if not ctx.no_new:
|
|
220
221
|
if device in ctx.fetched_packages:
|
|
221
222
|
if ctx.args.required_packages_check:
|
|
@@ -238,23 +239,34 @@ def _old_new_per_device(ctx: OldNewDeviceContext, device: Device, filterer: Filt
|
|
|
238
239
|
new_files = res.new_files()
|
|
239
240
|
new_json_fragment_files = res.new_json_fragment_files(old_json_fragment_files)
|
|
240
241
|
|
|
241
|
-
|
|
242
|
-
|
|
242
|
+
filters: List[str] = []
|
|
243
|
+
filters_text = build_filter_text(filterer, device, ctx.stdin, ctx.args, ctx.config)
|
|
244
|
+
if filters_text:
|
|
245
|
+
filters = filters_text.split("\n")
|
|
243
246
|
|
|
244
|
-
|
|
247
|
+
for file_name in new_json_fragment_files:
|
|
248
|
+
new_json_fragment_files = _update_json_config(
|
|
249
|
+
new_json_fragment_files,
|
|
250
|
+
file_name,
|
|
251
|
+
jsontools.apply_acl_filters(new_json_fragment_files[file_name][0], filters)
|
|
252
|
+
)
|
|
253
|
+
for file_name in old_json_fragment_files:
|
|
254
|
+
old_json_fragment_files = _update_json_config(
|
|
255
|
+
old_json_fragment_files,
|
|
256
|
+
file_name,
|
|
257
|
+
jsontools.apply_acl_filters(old_json_fragment_files[file_name][0], filters)
|
|
258
|
+
)
|
|
245
259
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
jsontools.apply_acl_filters(old_json_fragment_files[file_name][0], filters)
|
|
257
|
-
)
|
|
260
|
+
if ctx.args.acl_safe:
|
|
261
|
+
safe_new_files = res.new_files(safe=True)
|
|
262
|
+
safe_new_json_fragment_files = res.new_json_fragment_files(old_json_fragment_files, safe=True)
|
|
263
|
+
if filters:
|
|
264
|
+
for file_name in safe_new_json_fragment_files:
|
|
265
|
+
safe_new_json_fragment_files = _update_json_config(
|
|
266
|
+
safe_new_json_fragment_files,
|
|
267
|
+
file_name,
|
|
268
|
+
jsontools.apply_acl_filters(safe_new_json_fragment_files[file_name][0], filters)
|
|
269
|
+
)
|
|
258
270
|
|
|
259
271
|
if ctx.args.profile:
|
|
260
272
|
perf = res.perf_mesures()
|
|
@@ -281,6 +293,7 @@ def _old_new_per_device(ctx: OldNewDeviceContext, device: Device, filterer: Filt
|
|
|
281
293
|
safe_old=safe_old,
|
|
282
294
|
safe_new=safe_new,
|
|
283
295
|
safe_new_files=safe_new_files,
|
|
296
|
+
safe_new_json_fragment_files=safe_new_json_fragment_files,
|
|
284
297
|
filter_acl_rules=filter_acl_rules,
|
|
285
298
|
)
|
|
286
299
|
|
|
@@ -180,9 +180,8 @@ class RunGeneratorResult:
|
|
|
180
180
|
def new_json_fragment_files(
|
|
181
181
|
self,
|
|
182
182
|
old_files: Dict[str, Optional[str]],
|
|
183
|
-
safe: bool = False,
|
|
183
|
+
safe: bool = False,
|
|
184
184
|
) -> Dict[str, Tuple[Any, Optional[str]]]:
|
|
185
|
-
# TODO: safe
|
|
186
185
|
files: Dict[str, Tuple[Any, Optional[str]]] = {}
|
|
187
186
|
reload_prios: Dict[str, int] = {}
|
|
188
187
|
for generator_result in self.json_fragment_results.values():
|
|
@@ -194,7 +193,12 @@ class RunGeneratorResult:
|
|
|
194
193
|
files[filepath] = ({}, None)
|
|
195
194
|
previous_config: Dict[str, Any] = files[filepath][0]
|
|
196
195
|
new_fragment = generator_result.config
|
|
197
|
-
|
|
196
|
+
|
|
197
|
+
if safe:
|
|
198
|
+
new_config = jsontools.apply_json_fragment(previous_config, new_fragment, generator_result.acl_safe)
|
|
199
|
+
else:
|
|
200
|
+
new_config = jsontools.apply_json_fragment(previous_config, new_fragment, generator_result.acl)
|
|
201
|
+
|
|
198
202
|
if filepath in reload_prios and reload_prios[filepath] > generator_result.reload_prio:
|
|
199
203
|
_, reload_cmd = files[filepath]
|
|
200
204
|
else:
|
|
@@ -502,12 +506,17 @@ def _run_json_fragment_generator(
|
|
|
502
506
|
raise RuntimeError("json fragment generator should return non-empty path")
|
|
503
507
|
|
|
504
508
|
acl_item_or_list_of_items = gen.acl(device)
|
|
509
|
+
safe_acl_item_or_list_of_items = gen.acl_safe(device)
|
|
505
510
|
if not acl_item_or_list_of_items:
|
|
506
511
|
raise RuntimeError("json fragment generator should return non-empty acl")
|
|
507
512
|
if isinstance(acl_item_or_list_of_items, list):
|
|
508
513
|
acl = acl_item_or_list_of_items
|
|
509
514
|
else:
|
|
510
515
|
acl = [acl_item_or_list_of_items]
|
|
516
|
+
if isinstance(safe_acl_item_or_list_of_items, list):
|
|
517
|
+
acl_safe = safe_acl_item_or_list_of_items
|
|
518
|
+
else:
|
|
519
|
+
acl_safe = [safe_acl_item_or_list_of_items]
|
|
511
520
|
|
|
512
521
|
logger.info("Generating JSON_FRAGMENT ...")
|
|
513
522
|
with GeneratorPerfMesurer(gen, storage) as pm:
|
|
@@ -518,10 +527,10 @@ def _run_json_fragment_generator(
|
|
|
518
527
|
tags=gen.TAGS,
|
|
519
528
|
path=path,
|
|
520
529
|
acl=acl,
|
|
530
|
+
acl_safe=acl_safe,
|
|
521
531
|
config=config,
|
|
522
532
|
reload=reload_cmds,
|
|
523
533
|
perf=pm.last_result,
|
|
524
|
-
is_safe=gen.is_safe(device),
|
|
525
534
|
reload_prio=gen.reload_prio,
|
|
526
535
|
)
|
|
527
536
|
|
|
@@ -935,14 +944,17 @@ class JSONFragment(TreeGenerator):
|
|
|
935
944
|
"""
|
|
936
945
|
raise NotImplementedError("Required ACL for JSON_FRAGMENT generator")
|
|
937
946
|
|
|
947
|
+
def acl_safe(self, device: Device) -> Union[str, List[str]]:
|
|
948
|
+
"""
|
|
949
|
+
Restrict the generator to a specified safe ACL using JSON Pointer syntax.
|
|
950
|
+
|
|
951
|
+
Expected ACL to be a list of strings, but a single string is also allowed.
|
|
952
|
+
"""
|
|
953
|
+
raise NotImplementedError("Required ACL for JSON_FRAGMENT generator")
|
|
954
|
+
|
|
938
955
|
def run(self, device: Device):
|
|
939
956
|
raise NotImplementedError
|
|
940
957
|
|
|
941
|
-
# pylint: disable=unused-argument
|
|
942
|
-
def is_safe(self, device: Device) -> bool:
|
|
943
|
-
"""Output gen results when --acl-safe flag is used"""
|
|
944
|
-
return False
|
|
945
|
-
|
|
946
958
|
def get_reload_cmds(self, device: Device) -> str:
|
|
947
959
|
ret = self.reload(device) or ""
|
|
948
960
|
return ret
|
|
@@ -126,20 +126,20 @@ class GeneratorJSONFragmentResult:
|
|
|
126
126
|
tags: List[str],
|
|
127
127
|
path: str,
|
|
128
128
|
acl: List[str],
|
|
129
|
+
acl_safe: List[str],
|
|
129
130
|
config: Dict[str, Any],
|
|
130
131
|
reload: str,
|
|
131
132
|
perf: GeneratorPerf,
|
|
132
|
-
is_safe: bool,
|
|
133
133
|
reload_prio: int,
|
|
134
134
|
):
|
|
135
135
|
self.name = name
|
|
136
136
|
self.tags = tags
|
|
137
137
|
self.path = path
|
|
138
138
|
self.acl = acl
|
|
139
|
+
self.acl_safe = acl_safe
|
|
139
140
|
self.config = config
|
|
140
141
|
self.reload = reload
|
|
141
142
|
self.perf = perf
|
|
142
|
-
self.is_safe = is_safe
|
|
143
143
|
self.reload_prio = reload_prio
|
|
144
144
|
|
|
145
145
|
|
|
@@ -171,6 +171,7 @@ class OldNewResult:
|
|
|
171
171
|
safe_old=None,
|
|
172
172
|
safe_new=None,
|
|
173
173
|
safe_new_files=None,
|
|
174
|
+
safe_new_json_fragment_files=None,
|
|
174
175
|
filter_acl_rules=None
|
|
175
176
|
):
|
|
176
177
|
self.device: Device = device
|
|
@@ -193,6 +194,7 @@ class OldNewResult:
|
|
|
193
194
|
self.safe_old: MutableMapping = safe_old if safe_old else OrderedDict()
|
|
194
195
|
self.safe_new: MutableMapping = safe_new if safe_new else OrderedDict()
|
|
195
196
|
self.safe_new_files: MutableMapping = safe_new_files if safe_new_files else {}
|
|
197
|
+
self.safe_new_json_fragment_files: MutableMapping = safe_new_json_fragment_files or {}
|
|
196
198
|
|
|
197
199
|
self.filter_acl_rules: Optional[MutableMapping] = filter_acl_rules
|
|
198
200
|
|
|
@@ -221,5 +223,7 @@ class OldNewResult:
|
|
|
221
223
|
return self.new_files
|
|
222
224
|
|
|
223
225
|
def get_new_file_fragments(self, safe: bool = False) -> Dict[str, Tuple[Any, Optional[str]]]: # pylint: disable=unused-argument
|
|
224
|
-
|
|
226
|
+
if safe:
|
|
227
|
+
return self.safe_new_json_fragment_files
|
|
228
|
+
|
|
225
229
|
return self.new_json_fragment_files
|
{annet-0.8 → annet-0.9}/AUTHORS
RENAMED
|
File without changes
|
{annet-0.8 → annet-0.9}/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{annet-0.8 → annet-0.9}/setup.py
RENAMED
|
File without changes
|