utf8' codec can't decode byte #xc5: invalid continuation byte   in "", position 1621

OS: Debian 8
Hi guys !
awesome work to keep everything going to help out catching pokemons ;)
Sadly i can't get it to work :( I thought its something with pip but i reinstalled everything but to no avail.. Looks like the bot isn't even starting because of the error that comes first..
any help would be great !
/pokecli.py config/config.yml --debug
gives me
Traceback (most recent call last):
File "./pokecli.py", line 88, in
main()
File "./pokecli.py", line 73, in main
kernel.boot()
File "/home/anon/PokemonGo-Bot/web/OpenPoGoBot/app/kernel.py", line 55, in boot
self.load_config()
File "/home/anon/PokemonGo-Bot/web/OpenPoGoBot/app/kernel.py", line 32, in load_config
self._configs['core'] = ruamel.yaml.load(config_file.read(), ruamel.yaml.RoundTripLoader)
File "/usr/local/lib/python2.7/dist-packages/ruamel/yaml/main.py", line 73, in load
loader = Loader(stream, version, preserve_quotes=preserve_quotes)
File "/usr/local/lib/python2.7/dist-packages/ruamel/yaml/loader.py", line 56, in init
Reader.init(self, stream)
File "/usr/local/lib/python2.7/dist-packages/ruamel/yaml/reader.py", line 92, in init
self.determine_encoding()
File "/usr/local/lib/python2.7/dist-packages/ruamel/yaml/reader.py", line 149, in determine_encoding
self.update(1)
File "/usr/local/lib/python2.7/dist-packages/ruamel/yaml/reader.py", line 185, in update
exc.encoding, exc.reason)
ruamel.yaml.reader.ReaderError: 'utf8' codec can't decode byte #xc5: invalid continuation byte
in "", position 1621
is this an issue with locales? I already looked through the issues but i can't find a fix..

Can you show me your config.yml?

debug: false
load_library: "libencrypt.so"
login:
# Choose whether to login using Google (google) or Pokemon Trainer Club (ptc)
auth_service: "google"
# Should be self explanatory
username: "filled in"
password: "filled in"

mapping:
# Required, see https://developers.google.com/maps/documentation/javascript/get-api-key for details
gmapkey: "filled in"
# Can be a string or a set of GPS coordinates
location: "-33.860109,<PHONE_NUMBER>"

# Use last known location instead of above specified location
location_cache: true

# Specify what units  for distance the bot should use
distance_unit: "km"

# The radius (in meters) to fetch cell data for. Cell data includes pokestops and nearby pokemon
# Max value is 1500
cell_radius: 500

movement:
# Use Google Maps Direction API (google) or just walk directly (direct)
path_finder: "google"
# Select which navigation method to use
# fort: Navigate to nearby PokeStops
# waypoint: Navigate to a list of waypoints
# camper: Camp at one spot
navigator: "fort"

# Only required if using waypoint navigator; specify which waypoints to visit
navigator_waypoints: []

# Only required if using camping navigator; specify where to camp
navigator_campsite: null

# Specify how fast the bot should walk, in meters/second
walk_speed: 4.16

plugins:
# Do not automatically load the specified plugins
exclude: []
# Plugin directories to load
include:
    - ./plugins

# Load plugin YAML config files from these directories, relative to the main config file directory.
# Later directories will override configs in previous directories.
config:
    - "plugins"


support merge and unload when using PEFT + DeepSpeed ZeRO3

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

Nice quality of life improvement. I have a suggestion: How about we package the functionality into a utility function, that way it's easier to plug it everywhere we need it (since other adapters besides LoRA will need this too):
@contextmanager
def gather_params_ctx(module: nn.Module):
    """TODO"""
    if is_deepspeed_zero3_enabled():
        import deepspeed

        params_to_gather = module.parameters()
        with deepspeed.zero.GatheredParameters(params_to_gather, modifier_rank=0):
            yield
        return

    # no deepspeed: nothing to do
    yield

Then we can do:
def merge_adapter(...):  # same idea for unmerge_adapter
    ...
    with gather_metrics_ctx(module):
        module.merge()

Note that there is some similarity with #1190, maybe the two context managers can (eventually) be merged into one.

Sorry if this is unrelated, tried patching this to initialize finetuning from after merging a lora adapter, but hitting some error
  File "/opt/venv/lib/python3.11/site-packages/transformers/trainer.py", line 1546, in train
    return inner_training_loop(
           ^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/transformers/trainer.py", line 1681, in _inner_training_loop
    model, self.optimizer = self.accelerator.prepare(self.model, self.optimizer)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/accelerate/accelerator.py", line 1209, in prepare
    result = self._prepare_deepspeed(*args)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/accelerate/accelerator.py", line 1582, in _prepare_deepspeed
    engine, optimizer, _, lr_scheduler = deepspeed.initialize(**kwargs)
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/deepspeed/__init__.py", line 171, in initialize
    engine = DeepSpeedEngine(args=args,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/deepspeed/runtime/engine.py", line 304, in __init__
    self._configure_optimizer(optimizer, model_parameters)
  File "/opt/venv/lib/python3.11/site-packages/deepspeed/runtime/engine.py", line 1225, in _configure_optimizer
    self.optimizer = self._configure_zero_optimizer(basic_optimizer)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/deepspeed/runtime/engine.py", line 1552, in _configure_zero_optimizer
    optimizer = DeepSpeedZeroOptimizer_Stage3(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.11/site-packages/deepspeed/runtime/zero/stage3.py", line 146, in __init__
    self.dtype = self.optimizer.param_groups[0]['params'][0].dtype
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

@jonathanasdf Could you please open a new issue for this and add code to reproduce the error, if possible?

@pacman100 Would it make sense to revive this PR?


Write result after each search query

How to write the result after each query?
Now when i run 100 queries and something goes wrong on the 99th query all data is lost

I will be releasing a v2 by Tomorrow. That Fixes That Automatically. Please wait till Tomorrow 9PM IST.

Hi @sh3ll4rpw have released the scraper, kindly use it and let me know your thoughts. Also as a thank you could you star the repository?

Maybe try this function after each iteration
def write(data):
    timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
    csv_filename = f"data_{timestamp}.csv"
    json_filename = f"data_{timestamp}.json"

    # Check if the CSV file already exists
    if os.path.exists(csv_filename):
        # Read the existing data from the CSV file
        existing_data = pd.read_csv(csv_filename)

        # Append new data to the existing data
        new_data = pd.DataFrame(data)
        updated_data = pd.concat([existing_data, new_data], ignore_index=True)

        # Write the updated data to the CSV file
        updated_data.to_csv(csv_filename, index=False, mode='a', header=not existing_data.empty)

    else:
        # File does not exist, create a new file and write the data
        new_data = pd.DataFrame(data)
        new_data.to_csv(csv_filename, index=False)

    # Check if the JSON file already exists
    if os.path.exists(json_filename):
        # Read the existing data from the JSON file
        with open(json_filename, 'r') as file:
            existing_data = json.load(file)

        # Append new data to the existing data
        existing_data.append(data)

        # Write the updated data to the JSON file
        with open(json_filename, 'w') as file:
            json.dump(existing_data, file)

    else:
        # File does not exist, create a new file and write the data
        with open(json_filename, 'w') as file:
            json.dump([data], file)
    print("Data saved to CSV and JSON files")

Nevertheless, it is fixes.
Also we use Bose, so saving data is as simple as this
from bose import Output

# Data to be written to the file
data = [
    {"name": "John Doe", "age": 42},
    {"name": "Jane Smith", "age": 27},
    {"name": "Bob Johnson", "age": 35}
]

# Write the data to the file "data.json"
Output.write_json(data, "data.json")

# Write the data to the file "data.csv"
Output.write_csv(data, "data.csv")


network, netstat: Centralize the domain & agent data migration

What this PR does / why we need it:
The information collected from the domain and guest-agent is processed
in order to associate the interfaces with their corresponding networks
(when possible).
This step has been done at two locations, at the netstat update method
and at the agent-poller.
This change centralizes the data merging at the netstat update method,
leaving in the guest-agent entries only the original data.
With this change, some behaviors are clearer to observe and tests have
been updated to only input relevant data.

For backward compatibility with older virt-launchers, when the
guest-agent (domain status) report is seen, apply this logic when
calculating the infoSource field:

When the domain status Name filed is set, it is an old virt-launcher,
therefore, set nothing (the merge occurred in the virt-launcher,
therefore we do not know if the source is domain-only or domain+GA).
When the domain status Name field is not set (empty), it is a new
virt-launcher, therefore it can be safely determined as domain+GA.

The transient cases during upgrade (the control plane components are updated in an async manner) is not handled as the situation converges eventually.
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes
Special notes for your reviewer:
Depends on  #7051 ,  #7058
Only the last 4 commits are to be reviewed in this PR context.
Release note:
NONE

/uncc omeryahud stu-gott

/test all

/sig network

Thanks for the PR.
In the PR description it says that the PR: "Fixes #7051 , #7058", which are PRs themselves.
Is this supposed to go at the "Special notes for your reviewer:" section?

Thanks for the PR.
In the PR description it says that the PR: "Fixes #7051 , #7058", which are PRs themselves.
Is this supposed to go to the "Special notes for your reviewer:" section?

It was a glitch. Fixed.

/test all

/retest

/test all

/cc @orelmisan @ormergi @maiqueb @oshoval @dteplits

Thanks
is it fine that now virt-handler will need to process more info ? (it is small a operation, but for all VMs in the node, and for each update event that reach this function
we have only one virt-handler per node, and lots of virt-launchers

Thanks
is it fine that now virt-handler will need to process more info ? (it is small a operation, but for all VMs in the node, and for each update event that reach this function we have only one virt-handler per node, and lots of virt-launchers

Maybe you should define what is this "more info" you refer to. The virt-handler is already passing over all the lists, processing the data.

Thanks
is it fine that now virt-handler will need to process more info ? (it is small a operation, but for all VMs in the node, and for each update event that reach this function we have only one virt-handler per node, and lots of virt-launchers

Maybe you should define what is this "more info" you refer to. The virt-handler is already passing over all the lists, processing the data.

True that it already passes over the info, but we are now adding more.
was referring to MergeAgentStatusesWithDomainData which is done now in addition to everything else,
wouldn't it be better that virt-launcher will do everything that it can and virt-handler will just decorate it with the pod ips ?

Maybe you should define what is this "more info" you refer to. The virt-handler is already passing over all the lists, processing the data.

True that it already passes over the info, but we are now adding more. was referring to MergeAgentStatusesWithDomainData which is done now in addition to everything else,

Maybe you should check again the changes in this PR. It eventually was removed as it is not needed.
If it already processed all lists, adding one or two assignments/conditions changes nothing.

wouldn't it be better that virt-launcher will do everything that it can and virt-handler will just decorate it with the pod ips ?

If it can do everything yes, if it requires partitioning, then no.
Partitioning the reporting is what caused the mess that existed to grow. If there is a CPU/IO penalty it needs proof. I do not see one even in theory.
You could take this one step further and attempt to move this whole processing to the virt-launcher, it sounds to me a good objective.

change: Rebase

change: Answered review comments.

Relocate one function addition
Remove a redundant condition.

in the 3rd commit
In case no guest-agent data exists, the IP fields are overridden by the
pod-cache for all interfaces.

can you check please if in the transient state before the first guest-agent report, there is a change in the behavior comparing to before this PR ?
I mean, lets say there is a guest-agent, but in the around 30 seconds before the first report, the flow is like there is no guest-agent (after all there was no report), i wonder if now due to the logic change, we will start to see ips that we didn't see before that (only for the transient state) and we do see a change, at least lets known about it and see we are fine with it (for bridge / masquerade)

The unit tests have been adjusted to represent the expected behavior before this PR. If I am not mistaken, no changes to the expected results have been touched in these changes, therefore, I do not expect any change in the behavior.
If you see a missing scenario, then we better add it to the unit tests.
Regarding the transient state, I do not understand what you are suggesting to check... that in this transient period some value appears in the report? Would we really want to add such an e2e test check?
If I am not mistaken, there are some tests that check what is seen when there is no guest-agent. So how is that different?
Anyway, if you think we need to add another e2e test to check something, please propose it.
From my point of view, during the period where there is no guest-agent data at all, the reporting logic behaves the same for guests with or without guest-agent. When the guest-agent data is received and the virt-handler is "seeing" it, then it behaves as if there is an active guest-agent. We have these scenarios covered in the unit tests and AFAIK in the existing e2e test.
I have not managed to detect any edge case we are not covering, but if there is one, please do point it out.

From my point of view, during the period where there is no guest-agent data at all, the reporting logic behaves the same for guests with or without guest-agent. When the guest-agent data is received and the virt-handler is "seeing" it, then it behaves as if there is an active guest-agent. We have these scenarios covered in the unit tests and AFAIK in the existing e2e test. I have not managed to detect any edge case we are not covering, but if there is one, please do point it out.

It seems we are covered, but I personally think that it worth safe, and easiest to check manually one time only about the transient state with a real VM and see if there is a behavior change.
In case there is, we will know about it, and then can act / add test for it.
Beside that lgtm
Thanks

/retest

change: Rebase

change: Rebase

change: Added backward compatibility handling and kept the domain status Name field.

I suspect that the change may have backward compatibility issues. Please add to the PR message a section explaining why the change is backward compatible.

Done
Added a dedicated commit for this and mentioned it on the PR description.

change: Added an unit test, changed a variable name and changed the backward compatibility algorithm (which allowed the Name field to be removed).

change: There is no need to condition the update of the VMI interface status by the guest-agent data. One step later, it will be overridden by the pod cache data in case these are SR-IOV or SLIRP.

Ain't it better that it will be explicit like it was before ?
what about bridge btw, same ? (unless not related here)

/approve

There is no need to condition the update of the VMI interface status by the guest-agent data. One step later, it will be overridden by the pod cache data in case these are SR-IOV or SLIRP.

Ain't it better that it will be explicit like it was before ?

Why is it better? I do not think a condition is good, especially if we need to ask the same thing twice.
But feel free to reason for keeping it.

what about bridge btw, same ? (unless not related here)

What bridge? I do not understand the scenario you are trying to describe.
If it is related or not, you know. I don't understand what you are asking or with what scenarios you see a problem.

change: Extracted the backward compatibility condition to a function.

/retest

/retest

/retest


302 redirect after preflight?

Is it possible to do a 302 redirect after preflight has occurred? ie:  inside a filter that fires before a route. It doesn't appear like it works, but the response seems like something that should be allowed?
Here is a simple filter I was playing w/ that "should" redirect to an invalid session if the access_token is invalid, but it doesn't appear to work.
public function filter($route, $request, $data = null)
    {
        //  Get the authorization header or fail
        if ($authorization = Request::header('Authorization', false)) {
            list($type, $token) = explode(' ', $authorization);
            if (is_null($auth = OAuth2::token($token)->first())) {
                return Redirect::to('session/invalid'); // This redirect seems to fail?
            }

            ...

        } else {
            //  The authentication header is invalid, redirect to let the user know.
            return Redirect::to('session/invalid');
        }
    }

I tried fiddling w/  my config options, but nothing has really seemed to work.
return array(
  'defaults' =>  array(
      'allow_credentials' => false,
      'allow_origin'=> array(),
      'allow_headers'=> array(),
      'allow_methods'=> array(),
      'expose_headers'=> array(),
      'max_age' => 0
  ),

  'paths' => array(
      '^/api/' => array(
          'allow_origin'=> array('*'),
          'allow_headers'=> array('Content-Type', 'Authorization'),
          'allow_methods'=> array('POST', 'PUT', 'GET', 'DELETE', 'OPTIONS'),
          'max_age' => 3600
      ),
      '^/session/' => array(
          'allow_origin'=> array('*'),
          'allow_headers'=> array('Content-Type', 'Authorization'),
          'allow_methods'=> array('GET', 'OPTIONS'),
          'max_age' => 3600
      )
  ),

);

Response

XMLHttpRequest cannot load http://foo.com/api/tracks/27d7de10ba-e353-455b-a3cb-ced9b4965141. The request was redirected to 'http://foo.com/session/invalid', which is disallowed for cross-origin requests that require preflight.

veilig2000, how did you solve for this?

@veilig2000 how did you solve this?

@veilig2000 never minde I found your stack overflow answer.  @csprocket777 check out this link if you want to know what he did.  Haven't tried it yet.


Twitter Account

I created a twitter account for this project just in case we ever feel the need to have one.
Any idea for it? @es_explain

I'm not sure if we need a twitter account.


Fix tls close

Codecov Report
Attention: Patch coverage is 76.00000% with 6 lines in your changes missing coverage. Please review.

Project coverage is 97.31%. Comparing base (5b029eb) to head (58696ff).

Files with missing lines
Patch %
Lines

...nc_mqtt/predefined_layer/customized_ssl_stream.hpp
70.00%
6 Missing :warning:

Additional details and impacted files

@@            Coverage Diff             @@
##             main     #357      +/-   ##
==========================================
+ Coverage   97.26%   97.31%   +0.05%
==========================================
  Files         153      153
  Lines        9474     9469       -5
==========================================
  Hits         9215     9215
+ Misses        259      254       -5

Flag
Coverage Δ

?

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines
Coverage Δ

include/async_mqtt/impl/endpoint_close.hpp
98.48% <100.00%> (ø)

...nclude/async_mqtt/util/impl/stream_read_packet.hpp
98.55% <100.00%> (+<0.01%)
:arrow_up:

...clude/async_mqtt/util/impl/stream_write_packet.hpp
97.19% <100.00%> (+0.02%)
:arrow_up:

include/async_mqtt/util/ioc_queue.hpp
100.00% <100.00%> (ø)

...nc_mqtt/predefined_layer/customized_ssl_stream.hpp
82.35% <70.00%> (+7.93%)
:arrow_up:

Unified the point of self.complete() call. It fixes other close issue.
No regressions are detected #353


preserve formatting in announcement emails

i just got an email announcement for a workshop cory is teaching ... looks like he used formatting (hard returns) when drafting the email in the platform, but when delivered it was stripped of that formatting:

Email messages from instructors - to both session attendees and followers - now support Markdown.


SUSI bot - add support for advanced responses

Improve susi bot by:

adding support for table, anchor, answer type of responses
restructuring actions processing logic by adding a for loop.

@tonythomas01 I made the suggested changes. Can you please review again.

@timabbott @tonythomas01 Can you please review. Let me know if any changes are needed.

@tonythomas01 Changed all "" to '' :+1:

This LGTM, but since this function does quite a bit of stuff, I think we want to add some test coverage before merging.  @hkedia321 Do you have time to add tests or should we have somebody else take over the PR?
Another thing to consider here is adding some helpers so that we're not doing so much string concatenation to build up the markdown.  I'm not concerned about the performance; it's just that the code might be nicer to read with things like markdown_link(text=..., link=...) and markdown_table_header(...).

Sure, I will add test coverage and helper functions. @showell


Stopped falling back to  for collection generic types. Fixes for review comments.

Does isObject mean the same isUnspecified?

Does isObject mean the same isUnspecified?

They did mean the same, but in fact this was wrong. Introduced a proper 'unspecified' value for FullType.
PTAL.

LGTM


Fix CQL v3 binary protocol issues

Fix v3 issues in frame header and BATCH message serialization. This makes integration tests pass against Cassandra 2.1.11 without having to fallback to v2.

Great, I missed the streams are 16 bits in v3 ...


translation(zyc&yf): add translation (bipedalwalker_en, lunarlander_eng)

don't use any Chinese punctuation in english doc

refer to the review comments in #101, and continue the following work in this PR

This PR has been integrated in #135


Show better notification when port 3000 is in use

Overview
When the port 3000 is already in use on the computer, the following notification is presented:
HTTP server http://<IP_ADDRESS>:3000/: Error: listen EADDRINUSE: address already in use :::3000
It is not user-friendly.
Suggestion
Show a proper message asking to configure a different port with the new google.drive.authPort setting.

@GustavoASC Can you assign this issue to me?

@gustavosimon yes, thanks for your help!!

Hi @GustavoASC!
I think we can close this issue.


⚠ Bofrost.at has degraded performance

In 2d4c367, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1427 ms

Resolved: Bofrost.at performance has improved in f24acf6 after 24 minutes.


(PDB-1739) Upgrade to the latest clojure.java.jdbc 0.3.7

This commit upgrades PuppetDB to use the latest clojure.java.jdbc which
consists of using the deprecated namespace in the new version as well as
removing some test fixtures that reached into the old internals
namespace of jdbc to bind the db dynamic var.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://jenkins.puppetlabs.com/job/platform_puppetdb_intn-sys_pr/1686/

One question on why we're removing without-db-var, other than that, I'm :+1:

I think the right ticket number for this patch is PDB-1739?

@senior i think this is g2g now

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://jenkins.puppetlabs.com/job/platform_puppetdb_intn-sys_pr/1687/

transient failure


[Mutator] Yard Sale!

According to a note in the code, the authors are gopostal and TheManNo1{HoF}
Credit is also given to |404|shiftre, the creator of Pinata on which this mutator is based.
From the readme, the Description could be "a mod that drops all weapons and pickups you are carrying when you are killed by a monster (only!)"
Bascially the mutator is designed to work with MH

URL: https://unrealarchive.org/mutators/unreal-tournament/Y/yard-sale_9f48e402.html
Hash: 9f48e40271eee93753b0fba108b2d7e8e1a4f932
Current name: Yard Sale!

Updated


Update CDK to 3.4.0-alpha.1

Codecov Report

Merging #1304 into master will decrease coverage by 0.49%.
The diff coverage is n/a.

@@            Coverage Diff            @@
##           master    #1304     +/-   ##
=========================================
- Coverage   93.67%   93.18%   -0.5%
=========================================
  Files          44       44
  Lines        4602     4680     +78
  Branches      503      786    +283
=========================================
+ Hits         4311     4361     +50
- Misses        291      295      +4
- Partials        0       24     +24

Impacted Files
Coverage Δ

browser/model/devstudio-autoinstall.js
97.29% <0%> (-2.71%)
:arrow_down:

browser/services/request.js
97.61% <0%> (-2.39%)
:arrow_down:

browser/model/helpers/downloader.js
95.53% <0%> (-1.68%)
:arrow_down:

browser/model/che.js
95% <0%> (-1.62%)
:arrow_down:

browser/services/platform.js
97.05% <0%> (-1.41%)
:arrow_down:

browser/pages/account/controller.js
98.61% <0%> (-1.39%)
:arrow_down:

browser/model/cdk.js
98.74% <0%> (-1.26%)
:arrow_down:

browser/model/devstudio-p2-zip.js
64.4% <0%> (-1.12%)
:arrow_down:

browser/model/devstudio-central-p2-zip.js
60.31% <0%> (-0.98%)
:arrow_down:

browser/model/jdk-install.js
93.15% <0%> (-0.9%)
:arrow_down:

... and 22 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1af742a...43714a5. Read the comment docs.

test this

test this

test this

test this

test this


Minimize number of dependencies

Some dependencies (such as serde) are only really used for reading the test vector. These can be dev-dependencies. Might require a bit of rewriting

Fixed in https://github.com/cygnet3/rust-silentpayments/pull/21


Mark camptocamp module as deprecated

Please mark the old camptocamp module as deprecated, so that people (and API using programs) see the transfer to the new author.

Cc @raphink @mcanevet
According to this documentation, an API call with a valid bearer token should do it (never tried this!):
curl -X PATCH -H 'Content-Type: application/json' -H 'Authorization: Bearer 1234' https://forgeapi.puppet.com/v3/modules/camptocamp-openldap -d '{"action": "deprecate", "params": {"reason": "This module has been moved to the care of Vox Pupuli where it is now being maintained and updated.", "replacement_slug": "puppet-openldap"}}'

The module has been marked as deprecated by camptocamp.